-

Exception Handling

1.      Exception Nedir?

Exception hata sayılabilecek ya da sayılmayacak yazılım veya donanım tarafından algılanan özel müdehale gerektiren programın çalışma ya da derlenme zamanında ortaya çıkabilcek herhangi beklenmedik durumdur.

Exceptionların Nedenleri

  • Donanımsal problemler,
  • Son kullanıcı kaynaklı,
  • Programlama mantığından gelen hatalar olabilir.

Sık Karşılaşılan Exceptionlar

  • Validasyonlarlara takılabilir,girilen veri geçersiz olabilir,
  • Network bağlantısı problemleri,
  • Veri tabanına bağlananamama sorunu,
  • Dosya path ini bulamama sorunu,
  • Tip dönüşüm hatası,
  • Dizi indexi dışında bir değer gelmesi,-1 gibi

2.      Exception Handling Nedir?

Hata algılandıktan sonraki özel müdehale sürecine exception handling,bu kod bloğuna da exception handler denir.Uygulamanın derleme veya çalışması sırasında ortaya çıkan herhangi bir sorun programla dili tarafından algılanır ve senaryoya göre önlemler alınır.Son kullanıcı bazlı problemler için ekrana uyarı verip hatayı düzeltmesini istemek örnek  verilebilir.

3.      Exception Handling Faydaları

  • Hata olduğu durumlarda hatayı giderdikten sonra program çalışmaya devam edebilir,
  • Hata olmadığı zamanlarda da performans kaybı olmaz,
  • Son kullanıcı kaynaklı bir hata ise kullanıcının hatayı gidermesine imkan tanır,
  • Exception Handling yazılımcının farklı durumlar üzerine düşünmesini sağlar.
Exception Handling Olmayan Dil Exception Handling Olan Dil:
Hata   meydana geldiğinde işletim sistemine gider mesajı gösterir ve programı   sonlandırır. Program   hatayı yakalar ve düzeltme şansı doğar bundan dolayı program sonlanması   yerine devam edebilir.

 

 

4.      Exception Handling Kontrol Akışı

Aşağıdaki akıştan da görebileceğimiz gibi kod akışı devam ederken bir hata olduğunda hata exception handlera iletilir.Handling senaryosana göre bir tepkide bulunur ve hata giderildiğinde kod akışına devam eder.

 se

5.      Exception Handling  Terminolojisi

Try

Try bloğu kaynak kodların normal şekildeki işleyişini içerir.Hata olmaz ise kod try bloğu içinde devam eder catch bloğuna girmeden sonlanır.

Catch

Hata olduğunda gireceği bloktur.Hata olduğu durumlarda ne yapılması isteniyorsa bu bloğa eklenir.Farklı hata tipleri için farklı tepki vermesi istenirse birden fazla catch bloğu eklenebilir.Catch blokları sırayla okunur, hangisinin bloğuna ilk girerse onun hatasını fırlatır.Her bir catch bloğuna tek parametre verilebilir ve parametreler tekil(unique) olmalıdır.

Finally

Kod akarken try veya catch bloklarından birinin içine girer,bunlardan bririne girdikten sonra kısıt olmaksızın finally kod bloğunu işler.

Throw

Throw un kelime karşılığı fırlatmadır.Hata meydana geldiğinde ne göstereceği ya da ne göndereceğine karar verir.Kütüphanelerdeki hazır throw ları kullanabileceğimiz gibi hata durumunda kendi özel throw umuzu da fırlatmasını isteyebiliriz.

6.      Farklı Dillerde Exception Handling

C++’da Exception Handling:

C++ diline 1990 yılında eklenmiştir.Temellerini  CLU,Ada ve ML den almaktadır. Bütün hatalar Exception sınıfından türer ve hatalı bir durum oluştuğunda program bu sınıfın bir nesnesini fırlatır.

Formatı aşağıdaki gibidir:

            try {

            — code that is expected to raise an exception

            }

             catch (formal parameter) {

            — handler code

            }…catch (formal parameter) { }

Formal parametreler hata bilgisini handlera iletmek için kullanılır.

Bir programda tanımlı olan hatalar fırlatılabilir,tanımsız olan bir hata görüldüğünde default exception olan unexcepted metodu çağırılır,bu da programı normal bir şekilde sonlandırır.

C++ Exception Hiyerarşisi

c++

Exception

description

bad_alloc thrown by new on allocation failure
bad_cast thrown by dynamic_cast when fails with a referenced   type
bad_exception thrown when an exception type doesn’t match any   catch
bad_typeid thrown by typeid
ios_base::failure thrown by functions in the iostream library

Java’da Exception Handling:

Temellerini OOP mimarisinden almıştır.Bütün hatalar Throwable sınıflarından türeyen sınıfların nesneleridir.

Java kütüphanesi Throwable için iki alt sınıf içerir:

java

  • Error

Yığın(heap) doluluğu gibi durumlarda Java yorumlayıcı tarafından fırlatılır

Kullanıcı programları tarafından handle edilemez.

  • Exception

Kullanıcı tarafından tanımlanan hatalar genelde bu alt sınıfa aittir.

İki tanımlı alt sınıfı vardır:IOExceptions ve RunTimeException.Örnek hatalar; ArrayIndexOutOfBoundsException and NullPointerException.

Try’ın syntaxi C++ daki gibidir.Hatalar c++ daki gibi throw ile fırlatılıyor.Çoğunlukla throw nesneyi oluşturmak new operatorü içerir.

throw new MyException();

Hata ve handlerın bağlantısı c++’dan daha kolaydır.

Hata geldiğinde handler yoksa program sonlandırılır.

Javadaki throws c++ daki throw dan oldukça farklıdır.Javadaki throws programcıya daha fazla ayrıntı verir.Error sınıfından ve RunTimeException türündeki ve onlardan türeyen bütün hatalara unchechked exception geriye kalanlara ise checked exception denir.Checked exception olanlar throws da geçiyordur ya da bir metod içinde handle ediliyordur.

public class ExcepTest{

   public static void main(String args[]){

      int a[] = new int[2];

      try{

         System.out.println(“Access element three :” + a[3]);

      }catch(ArrayIndexOutOfBoundsException e){

         System.out.println(“Exception thrown  :” + e);

      }

    finally{

         a[0] = 6;

         System.out.println(“First element value: ” +a[0]);

         System.out.println(“The finally statement is executed”);

      }   }  }

Output:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3

First element value: 6

The finally statement is executed

Diller Arası Exception farklılıkları

Ortaya çıkan hatalar her dilde aynı etkiyi yaratmaz.

  • 0 a bölünme hatası C# dilinde DivisionByZero hatasını tetikler ama php ve javacsriptte kod akışını durdurmaz.
  • Javascriptte tanımlı olmayan bir fonksiyonu çağırmak exceptiona sebep olur ama php de aynı hata fatal error’a sebep olur kod akışı durur.

7.      Referanslar

  1. http://www.tutorialspoint.com/java/java_exceptions.htm
  2. http://www.cplusplus.com/doc/tutorial/exceptions/
  3. http://people.cs.aau.dk/~normark/oop-csharp/html/notes/exceptions-note-exception-hier-cs.html
  4. Exception Handling in C++,CS-2303 System Programming Concepts
  5. Concepts of Programming Languages,Robert W.Sebesta.Exception Handling Event Handling,Chapter 14
  6. Exception Handling, http://guvensahin.com/