SlideShare a Scribd company logo
1 of 64
Download to read offline
T.C.
        MİLLİ EĞİTİM BAKANLIĞI




   BİLİŞİM TEKNOLOJİLERİ




NESNE TABANLI PROGRAMLAMA 4
             482BK0077




            Ankara 2011
   Bu modül, mesleki ve teknik eğitim okul/kurumlarında uygulanan Çerçeve
    Öğretim Programlarında yer alan yeterlikleri kazandırmaya yönelik olarak
    öğrencilere rehberlik etmek amacıyla hazırlanmış bireysel öğrenme
    materyalidir.
   Millî Eğitim Bakanlığınca ücretsiz olarak verilmiştir.
   PARA İLE SATILMAZ.
İÇİNDEKİLER

AÇIKLAMALAR ...................................................................................................................iii
GİRİŞ ....................................................................................................................................... 1
ÖĞRENME FAALİYETİ-1 ..................................................................................................... 3
1. HATA AYIKLAMA ARAÇLARI....................................................................................... 3
   1.1. Hata Türleri................................................................................................................... 3
   1.2. Debug Menüsü Elemanları............................................................................................ 4
      1.2.1. Start........................................................................................................................ 4
      1.2.2. Restart.................................................................................................................... 4
      1.2.3. Stop Debugging ..................................................................................................... 4
      1.2.4. Step Into................................................................................................................. 4
      1.2.5. Step Over ............................................................................................................... 4
      1.2.6. Step Out ................................................................................................................. 4
      1.2.7. Run to Cursor......................................................................................................... 4
      1.2.8. Watch..................................................................................................................... 5
   1.3. TaskList (Görev Listesi Penceresi) ............................................................................... 7
   1.4. Breakpoint ve Breakpoints Penceresi ........................................................................... 8
   1.5. Output Penceresi ........................................................................................................... 9
   1.6. Command Window (Komut Penceresi) ...................................................................... 10
   UYGULAMA FAALİYETİ .............................................................................................. 12
   ÖLÇME VE DEĞERLENDİRME .................................................................................... 14
ÖĞRENME FAALİYETİ-2 ................................................................................................... 15
2. HATA AYIKLAMA VE İZ BULMA SINIFLARI ........................................................... 15
   2.1. Trace ve Debug Sınıfları ............................................................................................. 15
   2.2. TraceListener Sınıfları ................................................................................................ 16
      2.2.1. DefaultTraceListener ........................................................................................... 17
      2.2.2. TextWriterTraceListener ..................................................................................... 17
      2.2.3. EventLogTraceListener ....................................................................................... 19
   2.3. App.Config Dosyası.................................................................................................... 21
   2.4. Trace ve Debug Sınıfıyla Kullanılan Komutlar .......................................................... 24
      2.4.1. Write .................................................................................................................... 24
      2.4.2. WriteLine............................................................................................................. 24
      2.4.3. WriteIf ................................................................................................................. 24
      2.4.4. WriteLineIf .......................................................................................................... 24
      2.4.5. Assert ................................................................................................................... 24
      2.4.6. Fail ....................................................................................................................... 26
   UYGULAMA FAALİYETİ .............................................................................................. 29
   ÖLÇME VE DEĞERLENDİRME .................................................................................... 32
ÖĞRENME FAALİYETİ-3 ................................................................................................... 33
3. İSTİSNAİ OLAYLAR ....................................................................................................... 33
   3.1. System.Exception Sınıfı.............................................................................................. 33
   3.2. Try-Catch Kullanımı ................................................................................................... 33
   3.3. Finally Kullanımı ........................................................................................................ 38
   3.4. Throw Rethrow Kullanımı .......................................................................................... 42
      3.4.1. Throw Kullanımı ................................................................................................. 42
      3.4.2. Rethrow Kullanımı .............................................................................................. 46
   UYGULAMA FAALİYETİ .............................................................................................. 49
                                                                       i
UYGULAMA FAALİYETİ .............................................................................................. 52
  ÖLÇME VE DEĞERLENDİRME .................................................................................... 55
CEVAP ANAHTARLARI ..................................................................................................... 57
KAYNAKÇA ......................................................................................................................... 58




                                                                 ii
AÇIKLAMALAR

                 AÇIKLAMALAR
KOD              482BK0077
ALAN             Bilişim Teknolojileri
DAL/MESLEK       Veritabanı Programcılığı
MODÜLÜN ADI      Nesne Tabanlı Programlama 4
                        Nesne tabanlı programlamada hata ayıklama araçlarını
                 kullanabilme, hata ayıklama sınıflarını oluşturabilme ve
MODÜLÜN TANIMI
                 istisnai olayları kontrol edebilmeyle ilgili öğrenme
                 materyalidir.
SÜRE             40/32
ÖN KOŞUL         Nesne Tabanlı Programlama 3 modülünü bitirmiş olmak
YETERLİK         Nesne tabanlı programdaki hataları gidermek

                 Genel Amaç
                       Gerekli ortam sağlandığında, programdaki hataları
                 giderebilecek ve istisnai olayları kontrol altına alabileceksiniz.
MODÜLÜN AMACI    Amaçlar
                 1. Hata ayıklama araçlarını kullanabileceksiniz.
                 2. Hata ayıklama ve iz bulma sınıflarını kullanabileceksiniz.
                 3. İstisnai olayları kontrol edebileceksiniz.

                 Ortam
                       Atölye, laboratuvar, ev, bilgi teknolojileri ortamı (
                 İnternet ) vb, kendi kendinize veya grupla çalışabileceğiniz
EĞİTİM ÖĞRETİM   tüm ortamlar.
ORTAMLARI VE     Donanım
DONANIMLARI            Programlama dilini çalıştırabilecek yeterlikte bilgisayar,
                 yedekleme için gerekli donanım ( cd yazıcı, flash bellek),
                 raporlama için yazıcı, sayfa için internet bağlantısı, kâğıt ve
                 kalem.
                       Modülün içinde yer alan her öğrenme faaliyetinden
                 sonra verilen ölçme araçları ile kendinizi değerlendireceksiniz.
ÖLÇME VE
                 Modül sonunda ise, bilgi ve beceriyi belirlemek amacıyla,
DEĞERLENDİRME
                 öğretmeniniz tarafından belirlenecek ölçme aracıyla
                 değerlendirileceksiniz.




                                  iii
iv
GİRİŞ


                                         GİRİŞ
      Sevgili Öğrenci,

       Okul yaşantınızda öğreneceğiniz her konu, yaptığınız uygulama ve tamamladığınız her
modül bilgi dağarcığınızı geliştirecek ve ilerde atılacağınız iş yaşantınızda size başarı olarak
geri dönecektir. Eğitim sürecinde daha öz verili çalışır ve çalışma disiplinini kazanırsanız;
başarılı olmamanız için hiçbir neden yoktur.

      Günümüzde Windows tabanlı görsel programlama dillerinin hızla gelişmekte olduğu
ve kullanımının oldukça yaygınlaştığı görülmektedir. Bu programlama dilleri ile sizler
programlama mantığını ve becerisini çok daha kolay kavrayacaksınız.

      Bu modülle, programın çalışması esnasında ortaya çıkan kullanıcı kaynaklı hataları
kontrol altına alabilecek, hataların nasıl denetlenebileceğiyle ilgili düzenlemeleri editör
menülerinden yapabilecek ve istisnai olaylarla ilgili bilgileri öğreneceksiniz.

       Bu modülde anlatılan konuların tümünü öğrendiğinizde, Nesne Tabanlı Programlama
dilinde yazmış olduğunuz programların hata oluşumunu en asgari seviyeye çekmiş olacak ve
hatasız, kırılmayan programlar yazabileceksiniz.




                                               1
2
ÖĞRENME FAALİYETİ-1

                    ÖĞRENME FAALİYETİ-1
   AMAÇ
       Hata türlerini ve hata ayıklama araçlarını kullanarak program kod satırlarını kontrol
altında tutabileceksiniz. Oluşabilecek hatalara karşı önlemler alabileceksiniz.

   ARAŞTIRMA
            Bitirmiş olduğunuz modüllerde ne tür hatalarla karşılaştınız?
            Hataları gidermek için ne tür çözümler uyguladınız?

           1. HATA AYIKLAMA ARAÇLARI
       Hata, programın çalışması sırasında ortaya çıkan bir durumdur. Hatalar çoğunlukla
kullanıcı kaynaklıdır. Örneğin, kullanıcı programda sayı girilmesi gereken alanda metin
bilgisi girerse hata meydana gelir. Programcı bu nedenle oluşabilecek durumlar için hataları
kontrol edebilen program kod satırları yazarak programın kırılmasını önler.

       Hata ayıklamanın avantajı, bir hata oluştuğunda otomatik olarak çalıştırılan
ExceptionHandler (İstisna Durum Yöneticisi) adında bir kod bloğu tanımlamanıza imkan
vererek hata yönetimi verimliliğini artırmaktır. Bir diğer avantajı ise, çok sık oluşan program
hataları için nesne tabanlı programlamada standart istisnai durumların tanımlanmış
olmasıdır.

1.1. Hata Türleri
      Hatalar üç çeşittir.

            Yazım hataları

     Program içinde kullanılan fonksiyon adları, değişken adları, yapı isimleri ve
komutların karakterlerinin yanlış yazımından meydana gelen hatalardır.
       Örneğin, MessageBox.Show yazılması gerekirken MessageBoxShow yazılırsa yazım
hatası oluşur. Oluşan bu hata görev listesi (TaskList) penceresinde görüntülenir.

            Çalışma zamanı hataları
       Uygulamanın çalışması icra edilirken bir işlem çalışmayabilir. Örneğin, sıfıra bölme
hatası bu tür hatalara bir örnektir.

            Mantıksal hatalar
       Bu hatalar uygulama derlenirken ve yürütülürken oluşur. Bu durumda program çalışsa
bile yanlış sonuç üretir. Örneğin, yaş bilgisi girilmesi istenen bir alana negatif değer
girilemez ya da bir işçinin maaşı hesaplanırken haftada 50 saat yazılması gereken yere 150
saat yazılırsa program çalışır ancak sonuç doğru olmaz. Bu hata bir mantık hatasıdır.

                                              3
1.2. Debug Menüsü Elemanları
1.2.1. Start

      Uygulamayı çalıştırmak için kullanılır. Klavye kısayol tuşu F5’tir.

1.2.2. Restart

      Debug modunda iken çalışmakta olan uygulamayı sonlandırır ve uygulamanın
yürütülmesini yeniden başlatır. Kısayol tuşu Ctrl+Shift+F5’tir.

1.2.3. Stop Debugging

      Hata ayıklama işlemini sonlandırır ve tasarım moduna geri döner. Kısayol tuşu
Shift+F5’tir.

1.2.4. Step Into

      Program kodlarını satır satır çalıştırmak için kullanılır. Kısayol tuşu F11’dir.

      Eğer bir sonraki satır, bir metodu çağırırsa Step Into, o metodun başlangıcında durur.
Yani, sadece bulunduğu metot içinde çalışır.




1.2.5. Step Over

      Program satırlarını adım adım çalıştırmak için kullanılır. Bir sonraki satırda çağrılan
bir metotsa çağrılan metodun içine girmeden metodu çalıştırır ve bir sonraki satırdan itibaren
çalışmaya devam eder. Kısayol tuşu F10’dur.

1.2.6. Step Out

      Çalıştırılan metodun içindeki belirtilen bütün komutlar işletilir. Eğer metot içerisinden
bir başka metot çağrılıyorsa, çağrılan metot işletilerek metodun işleyişi bir sonraki satırdan
devam eder.

1.2.7. Run to Cursor

      İmlecin bulunduğu satırdan itibaren programın çalışmasını yürütür.




                                               4
1.2.8. Watch

       Bir değişken ya da ifadenin programın icrası esnasında hangi değerleri aldığını
görmenizi sağlar. Görmek istediğiniz değişkenin üzerinde iken sağ tıkla açılan menüden
Add Watch komutu tıklanarak değişken Watch penceresine aktarılır ve burada değerleri
izlenir.

        Burada dikkat edilmesi gereken husus, program debug modunda olmalı ve adım adım
çalıştırılmalıdır. Bu şartlarda değişkenlerin değerleri izlenebilir.




                                Resim 1.1: Watch penceresi

      Watch penceresinde bulunan değişkeni çıkarmak için değişken üzerinde sağ tık yapılır
ve Delete Watch komutu çalıştırılır.




                      Resim 1.2: Watch penceresinden değişken silmek




                                            5
Çalışma zamanında debug menüsünden QuickWatch komutu çalıştırılırsa ekrana
gelen pencerede public olan tüm değişkenler ve işletilen metot içindeki diğer değişkenler
izlenir.




                          Resim 1.3: QuickWatch iletişim kutusu

      Recalculate düğmesiyle seçilen değişkenin değeri tekrar hesaplatılabilir. Seçilen
değişken istenirse Add Watch düğmesiyle Watch penceresine de aktarılabilir.




                Resim 1.4: Seçilen değişkenin Watch penceresine aktarılması




                                            6
1.3. TaskList (Görev Listesi Penceresi)
      Program içinde tanımlanmayan değişken, metot ya da yazım hatalarını gösteren
penceredir.

      TaskList penceresini açmak için Project menüsünden Other Windows seçeneği
üzerine gelip açılan menüden Task List komutu seçilmelidir.




                Resim 1.5: Project menüsünden TaskList pencersini açmak

     Diğer bir yöntem olarak ise, klavye kısayol tuşu Ctrl+Alt+K’yı kullanmaktır.




           Resim 1.6: Programın derlenmesinde hatanın Tasklist’te gösterilmesi




                                           7
1.4. Breakpoint ve Breakpoints Penceresi
      Programın işleyişini istediğiniz bir noktada durdurmak için kod satırına Breakpoint
(kesme noktası) ekleyebilirsiniz. Böylece program sizin işaret ettiğiniz kesme noktasında
duracaktır.

      Bir kod satırına Breakpoint eklemek için F9 kısayol tuşu veya sağ tıkla açılan
menüden “Insert Breakpoint” komutunu vermeniz gerekir. Böylece kesme noktası eklenen
program satırı şekildeki gibidir.




                        Resim 1.7: Programa Breakpoint eklenmesi

      Kesme noktası eklenmiş satır Breakpoints penceresinde gösterilir.




                             Resim 1.8: Breakpoints penceresi

       Program çalıştırılıp kesme noktası eklenen satıra geldiğinde programın çalışması
durur. Kırmızı zemin rengi sarıya dönüşür.

       Breakpoint’i silmek için Breakpoints penceresindeki kesme noktası üzerine sağ tık
yapılıp açılan menüden Delete komutu seçilir.




              Resim 1.9: Breakpoints penceresinden kesme noktasının silinmesi



                                            8
1.5. Output Penceresi
      Programın     derlenmesi    aşamalarının    gösterildiği   penceredir.    Kısayol     tuşu
Ctrl+Alt+O’dur.
     Output penceresinde bulunan açılır liste kutusunda iki seçenek vardır. Bunlar Build ve
Debug’dır.




                  Resim 1.10: Output penceresinde Build ve Debug seçenekleri

      Açılır liste kutusundan Build seçildiğinde derlemeyle ilgili bilgiler görüntülenir.




                         Resim 1.11: Output penceresinde Build seçimi

      Debug seçildiğinde ise programı EXE haline dönüştürürken kullanılan dosyalar
görüntülenir.




                                              9
Resim 1.12: Output penceresinde Debug seçimi

1.6. Command Window (Komut Penceresi)
       Uygulamanızı çalışma zamanında takip etme işlemine Trace denir. Trace anında, kod
satırlarında yer alan değişkenlerin o anki değerlerini görmenizi ve bu değerlerle
matematiksel işlem yapmanızı sağlayan pencere komut penceresidir. Kısayol tuşu
Ctrl+Alt+A’dır.

      Komut penceresi ilk açıldığında Command Window penceresi ekrana gelir




                          Resim 1.13: Command Window penceresi

      Kod satırlarıyla ilgili işlem ve hesaplamalar yapabilmek için Command Window’da
iken immed yazılarak Command Window’un Immediate moduna geçilir.




                                Resim 1.14: Immediate modu

      Bu moda değişkenlerle ilgili işlem yapabilmek için ilk önce ? (soru işareti) yazılır.


                                              10
Resim 1.15: Immediate modunda işlem yapılması

Tekrar Command Window’a geçmek istenirse > cmd satırı yazılır.




                                    11
UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ

             İşlem Basamakları                                      Öneriler
 Bir Windows Application oluşturarak formu
  aşağıdaki gibi tasarlayınız.



                                                      2 metin kutusu, 2 Label ve 1 buton
                                                       olduğundan formun boyutunu küçük
                                                       tasarlayınız.




 Girilen sayının faktöriyeli “HESAPLA”
                                                      “HESAPLA” düğmesinin üzerinde
  düğmesine tıklandığında bulunacağı için
                                                       çift tıklayınız.
  program kodlarını Click() metoduna yazınız.
 “int” tipinde bir değişken tanımlayınız.            int sayi;
                                                      Metin kutusundan girilen bilgi string
 Metin kutusundan girilen sayıyı değişkene            tipte olduğu için “Parse” metoduyla
  aktarınız.                                           int tipine çeviriniz.
                                                      sayi=int.Parse(textBox1.Text);
                                                      int faktor=1;
 Sonucu aktaracağınız değişkeni int tipinde          Çarpma işleminde 0 (sıfır) yutan
  tanımlayarak 1 (bir) değerini atayınız.              eleman olduğu için faktor değişkeni 1
                                                       ile başlamalıdır.
                                                      for (int i=0;i<=sayi;i++)
 1’den başlayarak faktoriyeli bulunacak
                                                      {
  sayıdan küçük ve eşit olacak şekilde bir for
  döngüsü bloğu oluşturunuz.
                                                       }
                                                      Faktoriyel hesabı 1’den başlayarak
                                                       belirtilen sayıya kadar bu sayıların
 for bloğu içine faktoriyel hesabını yapacak
                                                       birbiriyle çarpımıdır. Buna girilen
  kodları yazınız.
                                                       sayı da dâhildir.
                                                        faktor=faktor*i;
 Sonucu ikinci metin kutusuna string tipe            textBox2.Text=faktor.ToString(); kod
  çevirerek yazdırınız.                                satırını yazınız.
                                                      Sayi=int.Parse(textBox1.Text);
 Sayı girişi yapıldığı satırdan itibaren işleyişi     satırının başında sağ tık yapıp Run to
  test ediniz.                                         Corsor komutunu veriniz. ve F11
                                                       (Step Over) tuşunu kullanınız.
 Programı tekrar çalıştırınız. Çalışma               Değişken üzerinde sağ tık yaparak

                                              12
zamanında bir Watch penceresi açarak “i”      Add Watch komutunu kullanınız.
  değişkeninin aldığı değerleri görünüz.




 Bu işlem bir kere gerçekleştiğinde faktor      Add Watch komutunu
  değişkenini de Watch penceresine ekleyiniz.     kullanabilirsiniz.
 Command Window’u açarak faktor
  değişkeninin aldığı son değeri ikiye bölünüz.


                                               Command Window’da immed
                                                yazarak işlem yapabilirsiniz.




 Uygulamanın sonuç görüntüsünü yandaki
  resimle karşılaştırınız.




                                         13
ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME
      Aşağıdaki soruları dikkatlice okuyarak doğru/yanlış seçenekli sorularda uygun harfleri
yuvarlak içine alınız. Seçenekli sorularda ise uygun şıkkı işaretleyiniz. Boşluk doldurmalı
sorularda boşluklara uygun cevapları yazınız.
1.    ExceptionHandler (İstisna durum yöneticisi) hata yönetiminin verimliliğini artırır.
      (D/Y)
2.    Mantıksal hata oluştuğunda program çalışmaz. (D/Y)
3.    Uygulamaya yeni kod satırları eklendiğinde program ………….edilmelidir.
4.    Uygulamayı imlecin bulunduğu satırdan itibaren çalıştırmak için ………..……….
      komutu kullanılır.
5.    Program Debug modunda iken ve adım adım çalıştırıldığında değişkenler Watch
      penceresinden izlenebilir. (D/Y)
6.    Program yazımında hata oluştuğunda bu hatalar …………………… penceresinde
      görüntülenir.
7.    Programda istediğiniz bir satıra kesme noktası (Breakpoint) eklemek için …………
      kısa yol tuşu kullanılır.

8.    Komut penceresinde işlem yapabilmek için …………… moduna geçilmelidir.

9.    Hata ayıklama işlemini sonlandıran komut aşağıdakilerden hangisidir?
      A) Step Into
      B) Step Out
      C) Step Over
      D) Stop Debugging

10.   Programı adım adım çalıştırırken çağrılan metodun içini işletmeden çalıştıran Step
      komutu aşağıdakilerden hangisidir?
      A) Step Into
      B) Step Out
      C) Step Over
      D) Stop Debugging

DEĞERLENDİRME

      Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konulara geri dönerek tekrar inceleyiniz. Tüm sorulara doğru cevap
verdiyseniz diğer öğrenme faaliyetine geçiniz.



                                            14
ÖĞRENME FAALİYETİ-2

                   ÖĞRENME FAALİYETİ-2
   AMAÇ

     Programda oluşabilecek hataları çeşitli yöntemlerle önceden tespit edebilmeyi ve bu
yöntemlerin neler olduğunu kavrayabileceksiniz.


  ARAŞTIRMA

           Nesne tabanlı programlamanın derleyicisi hataları nasıl tespit etmektedir?
            Araştırınız.


          2. HATA AYIKLAMA VE İZ BULMA
                     SINIFLARI
2.1. Trace ve Debug Sınıfları
      Bu sınıfların kullanımıyla dosyalama mekanizmasının (Log) oluşturulması ve
yönetilmesi işlemleri yapılmaktadır. Bu sınıfları kullanabilmek için using deyimiyle birlikte
System.Diagnostics namespace’inin projenin başına yazılması gerekir.

      Bu iki sınıf, proje geliştirme aşamasında hata mesajlarını, projenin uygulanması
aşamasında ise gerekli dosyalama bilgilerini gerekli yerlere yazdırmak açısından birçok
kolaylık sunar. Trace ve Debug sınıflarının tüm özellikleri aynıdır. Tek fark, Debug sınıfı
Release uygulaması içine derlenmemesidir.

      Örnek

      Formunuzun üzerinde çift tıklayarak Form’un Load metoduna aşağıdaki kod satırlarını
yazınız. Trace ve Debug sınıflarının çalışmasını basit olarak bu şekilde görebilirsiniz.




       Bu kod satırları yazıldığında projenizin                   modunda olmasına dikkat
ediniz.


                                             15
Output penceresinde yürütülen işlem resim 2.1’deki gibi yansıyacaktır.




                         Resim 2.1: Trace ve Debug sınıflarının işleyişi


       Eğer                        modundayken       programı     çalıştırırsanız   Debug   sınıfı
işletilmeyecek sadece Trace sınıfı işletilecektir.




                       Resim 2.2: Release modunda Trace sınıfı işletilir.

2.2. TraceListener Sınıfları
       Kendilerine gelen bilgiyi tutarak ilgili kaynaklara gönderebilen sınıflar Trace ve
Debug sınıflarıdır. Bu işlemleri yapabilmek için TraceListener nesneleri kullanılır. Trace ve
Debug sınıflarının Listeners (dinleyici) özelliği TraceListener tipinde koleksiyon referansı
tutar.




                                  Resim 2.3: Listeners özelliği


                                               16
Bu koleksiyona mevcut TraceListener nesneleri eklenebildiği gibi siz de bir
TraceListener sınıfı oluşturup ekleyebilirsiniz. Hem Trace hem de Debug sınıfı aynı
TraceListener koleksiyonunu paylaşır. Bu sınıflara bir Listener eklenirse bu Listener hem
Trace hem de Debug sınıfı için geçerli olur.

2.2.1. DefaultTraceListener

      Trace ve Debug sınıflarının TraceListener koleksiyonuna varsayılan olarak
eklenmiştir. Trace ve Debug’a gönderilen bilgi Output penceresinde gösterilmektedir.




            Resim 2.4: Trace ve Debug TraceListener’a default olarak eklenmiştir.

2.2.2. TextWriterTraceListener

       Bu listener sınıfı Trace ve Debug sınıflarına iletilen bilgiyi bir dosyaya (Log) yazmak
için kullanılır.

      Örnek

      Bu örnekte metin kutularından girilen iki sayı toplatılıp sonuç yine bir metin kutusuna
ve ayrıca, girilen sayılar ve sonuç TextWriterTraceListener ile bir dosyaya yazdırılmaktadır.
Bunun için formu resim 2.5’teki gibi tasarlayınız.




                             Resim 2.5: Formun tasarlanmış hali




                                             17
Form tasarımından sonra forma eklediğiniz butonun üzerinde çift tıklayarak Click
metoduna aşağıdaki kodları yazınız.




       Birinci metin kutusundan girilen sayıyı a değişkeni, ikinci metin kutusundan girilen
sayıyı b değişkeni tutacaktır. İkisinin toplamı da sonuc değişkenine aktarılacaktır. Girilen
sayıları ve sonucu dosyaya yazabilmek için FileStream sınıfından “dosya” adlı bir nesne
oluşturulur. TextWriterTraceListener sınıfından da “dinleyici” adında bir nesne oluşturularak
sonucun “dosya”ya yönlendirilmesi sağlanır. Oluşturulan dinleyici nesnesi Listener sınıfına
eklenir.




                    Resim 2.6: Programın çalıştırılıp sonuçların üretilmesi

                                              18
Program çalıştırılıp sonuçlar üretildikten sonra uygulamanızın varsayılan çalışma
klasöründeki “Bin” klasörü altındaki Debug klasörüne program kodunda adını verdiğiniz
dosya oluşturulur (Sonuc.txt).




                        Resim 2.7: Sonuçların dosyaya yazdırılması

      Dosya içeriğine bakacak olursanız, veriler iki defa dosyaya yazılmış durumdadır.
Bunun sebebi, projenizin Debug                  modundayken derlenmiş olmasıdır. Eğer
Debug modunda değil de Release modunda çalıştırmış olsaydınız resim 2.8’deki gibi bir
sonuç alırdınız. Oluşturulan “Sonuc.txt” dosyası da “Bin” klasörü altındaki “Release”
klasörü içine oluşturulurdu.




              Resim 2.8: Release modunda çalıştırılan projenin ürettiği sonuç

2.2.3. EventLogTraceListener

     Trace ve Debug sınıflarına gelen veriyi Windows Eventlog’una (olay dosyasına)
gönderir.

      Örnek

     Bu örnekte TextWriterTraceListener örneğinde olduğu gibi aynı işlemleri
yapmaktadır. Fark, sonuçların bir dosyaya değil de sistemin Event Log’una yazdırmasıdır.

                                            19
Yani, bir önceki örnekte tasarlamış olduğunuz formu bu örnek için de
kullanabilirsiniz. Yalnız, butona tıklandığında yapılacak işlemlerimiz değiştiği için
“buton1_Click” yordamını aşağıdaki gibi düzenleyiniz.




      Sayı girişleri ilgili yerlere yapıldıktan sonra EventLog sınıfından “olayim” adlı bir
nesne oluşturulmaktadır. EventLogTraceListener sınıfından da “olaydinleyici” adlı bir nesne
oluşturarak Listeners sınıfına eklenir. Program çalıştırıldığında elde edilen sonuçlar Trace ve
Debug sınıflarıyla EventLog’a yazdırılır.




                         Resim 2.9: Sonuçlar Event Log’a gönderilir.
                                              20
Event Logs’a gönderilen verileri Server Explorer penceresinden görülür. Her işlemin
ardından Event Logs üzerinde sağ tık yapıp Event Logs’u Refresh etmeniz gerekir.




                       Resim 2.10: Sonuçların Event Logs’a yazdırılması

      Dikkat edecek olursanız yine sonuçlar iki kez yazılmış durumdadır. Demek ki,
program Debug modunda çalıştırılmıştır.

2.3. App.Config Dosyası
       Projede kullanılan, örneğin kullanıcı adı ve şifresi, veri tabanının adı ve şifresi ya da
bir veri tabanı dosyasına bağlanıyorsanız, veri tabanının konumu gibi bilgiler değiştirilmek
istenebilir. Bu değişiklikler için App.Config dosyası kullanılır.

      App.Config dosyası bir XML dosyasıdır. XML dosyasının içeriği oluşturulurken
yazım kurallarına dikkat edilmelidir.

       Projenize bir App.Config dosyası eklemek için Project/Add New Item seçeneği
seçilip açılan Add New Item iletişim penceresinin Templates bölümünden Application
Configuration File seçilip Open düğmesine basılmalıdır.




                                              21
Resim 2.11: Add New Item iletişim penceresi

       Projeye eklenen App.Config dosyasının temel yapısı <Configuration> etiketiyle
başlar. </Configuration> etiketiyle biter.

      Örnek

       Bu örnekte, oluşturulmuş bir App.Config dosyasındaki verilerin formdaki ilgili yerlere
getirilmesi yapılacaktır. Verileri App.config dosyasından alabilmek için önce Solution
Explorer penceresinde sağ tık yaparak Add seçeneği üzerine gelince açılan menüden Add
New Item seçimini yapınız ve projenize bir “Application configuration file” ekleyiniz.
Eklediğiniz App.config dosyasının içeriğini aşağıdaki gibi düzenleyiniz.




                                             22
Bu konfigürasyon dosyasına göre kullanacağımız alan anahtarları “ad” ve “soyad”,
değerleri ise value ile verilen değerler olacaktır. Şimdi formu resim 2.12’deki gibi
tasarlayınız.




                             Resim 2.12: Formun tasarlanması

      Form tasarlandıktan sonra “OKU” düğmesinin üzerine çift tıklayıp Click() metoduna
aşağıdaki kodları yazınız.




     Burada AppSettingsReader sınıfı ile “oku” adında bir nesne üretilmiş ve
AppSettingsReader sınıfının tek metodu olan “GetValue” özelliği kullanılmıştır. Böylece
App.config dosyasındaki string veriler alınıp metin kutularına aktarılmış olacaktır.




      Resim 2.13: Verilerin App.config dosyasından alınıp metin kutularına aktarılması


                                            23
2.4. Trace ve Debug Sınıfıyla Kullanılan Komutlar
2.4.1. Write

      Bir şarta bağlı olmadan verilen metni Listener koleksiyonuna yazar.

2.4.2. WriteLine

       Bir şarta bağlı olmadan verilen metni Listener koleksiyonuna yazar ve bir sonraki
satıra geçer.

2.4.3. WriteIf

      Mantıksal şart doğru olduğunda yazılması verilen metni Listener koleksiyonuna yazar.

2.4.4. WriteLineIf

       Mantıksal şart doğru olduğunda verilen metni Listener koleksiyonuna yazar ve bir alt
satıra geçer.

2.4.5. Assert

      Koşulun yanlış olması durumunda Listener koleksiyonuna belirtilen mesajı yazdırır.

      Örnek

      Metin kutularından girilen iki sayı Trace ve Debug sınıfları kullanılarak çeşitli
mantıksal işlemlere tabi tutulacaktır. Bu işlem için formunuza iki metin kutusu ve bir buton
ekleyiniz. Butonun Click() metoduna aşağıdaki kodları yazınız. Trace ve Debug sınıflarının
aynı komutları kullandığını hatırlayınız.




                                            24
Projenizi çalıştırıp iki sayı girişi yapınız. Örnekte birinci sayı için 5 rakamı, ikinci sayı
için 3 rakamı girilmiştir.




                                  Resim 2.14: Verilerin girilmesi

       İşlemin sonuçlarını Output penceresinde göreceğiniz için Output pencereniz açık
değilse açınız. Programda ilk önce Trace.Write ve Trace.WriteLine ile verilen mesajlar
yazdırılmaktadır. Trace.Write ile imleç bir alt satıra geçmediğinden Trace.WriteLine ile
verilen mesaj yazdırıldıktan sonra imleç bir alt satıra geçmiştir. Daha sonra Trace.WriteIf ve
Trace.WriteLineIf ile girilen iki sayı mantıksal olarak karşılaştırılmış ve sonuç doğru olduğu
için bu iki komutla verilen mesajlar yazdırılmıştır. İmleç, Trace.WriteLineIf ile bir alt satıra
geçmiştir. Trace.Assert ile verilen mesaj, şart doğru olduğundan dolayı Output penceresine
yazdırılmamıştır.




          Resim 2.15: Programın çalışması esnasında Output penceresinin görünümü


      Programı yeniden çalıştırıp ilk değeri küçük, ikinci değeri büyük girdiğinizde
Trace.Assert ile verilen mesaj ekranda gösterilecektir. Şart yanlış olduğundan Trace.Assert
komutu devreye girmiştir.




                                                25
Resim 2.16: Yeniden değer girişi




                  Resim 2.17: Assert komutuyla verilen mesajın yazdırılması

2.4.6. Fail

       Olumsuz bir durum oluştuğunda otomatik olarak bir bildiri oluşturur. Bildiri mesajı
listener sınıfına yazdırılır ve bir mesaj kutusuyla ekrana gelir.

      Örnek

      Bu örnekte de yine iki sayı girişi yapılmakta ve if ile verilen şart kontrol edilmektedir.


                                              26
Formunuza üç adet metin kutusu ve bir buton ekleyiniz. Butonun Click() metoduna
aşağıdaki kod satırlarını yazınız.




      Şartta, birinci metin kutusuna girilen sayının sıfır ve sıfırdan küçük olması durumunda
Fail komutu ile verilen mesaj ekrana getirilecektir. Aksi taktirde birinci sayı ikinci sayıya
bölünecek ve sonuş üçüncü metin kutusuna yazdırılacaktır.




                               Resim 2.18: Verilerin girilmesi

       Örnek olarak birinci sayıya sıfır (0) değerini giriniz. Gönder düğmesine bastığınızda
Fail komutu ile verilen mesaj devreye girecektir.




                                             27
Resim 2.19: Fail mesajının ekranda gösterilmesi




                      28
UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ
       Bu uygulama, elde edilen bilgilerin dosyaya nasıl yazdırılacağını gösteren bir
uygulamadır. Elde edilen veriler bu şekilde dosyaya yazdırılabildiği gibi programda oluşan
hataların da dosyaya yazdırılması aynı şekilde olacaktır.

          İşlem Basamakları                                  Öneriler




 Yeni bir Windows Application
  oluşturarak formu resim 2.20’deki
  gibi tasarlayınız.




                                                  Resim 2.20: Formun tasarlanması

 Formdaki comboBox’ların
                                           Combobox1.Items.Add(“A”); şeklinde kod
  elemanlarını Properties Window’u
                                            satırlarıyla da eleman ekleyebilirsiniz.
  kullanarak Item özelliğinden giriniz.
 Girilen bilgiler butona tıklandığında
  dosyaya yazdırılacağı için program       “Dosyaya yazdır” butonuna çift tıklayınız.
  kodlarını Click() metoduna yazınız.
 Textbox ve comboBox’lardan girilen
  bilgileri aktaracağınız değişkenleri     string okulnu,ad,soyad,sinif,sube;
  string tipte tanımlayınız.
 Öğrencinin okul numarasını, adını ve
  soyadını textBox’tan, sınıfını ve
                                           sube=comboBox2.SelectedItem.ToString();
  şubesini comboBox’lardan ilgili
  değişkenlere aktarınız.
 FileStream sınıfından “dosya”
  adında bir dosya değişkeni               FileStream sınıfı kullanılacağından IO
  oluşturarak dosya adını “Bilgi.Log”       namespace’ini projenize ekleyiniz.
  olarak veriniz.
 Oluşturulan dosya değişkenini işaret
  ederek TextWriterTraceListener           Bu sınıfı kullanabilmek için de Diagnostics
  sınıfından yeni bir dinleyici             namespace’ini projenize ekleyiniz.
  oluşturunuz.
                                            29
 Oluşturduğunuz dinleyiciyi Listeners
                                        Trace.Listeners.Add(dinleyici);
  sınıfına ekleyiniz.
 Girilen bilgileri Trace sınıfını
  kullanarak dosyaya yazdırınız.




                                         Girilen bilgiler bir bütün olduğundan dosyada
                                          yan yana yazdırabilirsiniz.




     Resim 2.21: Bilgilerin girilmesi

 Belleği boşaltarak dosyayı kapatınız.  Flush() ve Close() fonksiyonlarını kullanınız.
                                         “Bilgi.Log” dosyasını açınız.



 Projenizin çalıştığı aktif klasörü
  açarak bilgilerin dosyaya yazılıp
  yazılmadığını kontrol ediniz.


                                            Resim 2.22: Bilgilerin dosyaya yazılmış hali




                                           30
UYGULAMA FAALİYETİ
 UYGULAMA FAALİYETİ

      Aşağıda uygulamaları yapınız. Sonuçları öğretmeninize sununuz. Eksikliklerinizi
öğretmeninizin rehberliğinde tamamlayınız.

          InputBox’tan girilen int tipte 10 adet sayının ortalamasını hesaplatarak Output
           penceresinde görüntüleyen programı yapınız.


          İki ayrı metin kutusundan girilen sayıların mod’u hesaplatılacaktır. Mod
           işleminin sonucunda kalan sıfır (0) ise sayıları ve kalanı Log dosyaya yazdıran
           programı yapınız.


          Aynı örneğin kalanı sıfır (0) olmayanları Windows Event Log’a yazdıran
           programı yapınız.




                                          31
ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME

      Aşağıdaki soruları dikkatlice okuyarak doğru/yanlış seçenekli sorularda uygun harfleri
yuvarlak içine alınız. Seçenekli sorularda ise uygun şıkkı işaretleyiniz. Boşlukları uygun
şekilde doldurunuz.


1.    Trace ve Debug sınıfını kullanabilmek için aşağıdaki namespace’lerden hangisi
      projeye eklenmelidir?
      A) IO
      B) Diagnostics
      C) Windows.Forms
      D) Data

2.    Aşağıdakilerden hangisi bir TraceListener sınıfı değildir?
      A) EventLog
      B) Default
      C) Config
      D) TextWriter

3.    Projenizle ilgili temel bilgiler değiştirilmek istendiğinde ………………            dosyası
      kullanılır.

4.    Trace ve Debug sınıfları ayrı TraceListener koleksiyonları kullanır. (D/Y)

5.    Bir proje Release modda çalıştırıldığında Debug sınıfıyla üretilen sonuçlar
      görüntülenmez. (D/Y)


DEĞERLENDİRME

      Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konulara geri dönerek tekrar inceleyiniz. Tüm sorulara doğru cevap
verdiyseniz diğer öğrenme faaliyetine geçiniz.




                                             32
ÖĞRENME FAALİYETİ–3

                   ÖĞRENME FAALİYETİ-3
   AMAÇ
       Hataların oluşumunu kontrol altına alarak oluşabilecek hatalara karşı tedbirler
alabileceksiniz.

  ARAŞTIRMA

           Programcılar isteğe göre program yazdıklarında, programa özel hataları
            önceden tespit edip ihtimalleri değerlendirerek ve uyarıcı hata mesajları yazarak
            kullanıcıları uyarabilirler mi? Araştırınız.


                      3. İSTİSNAİ OLAYLAR
      Bir programın hatasız yazılmış olması o programın hiç hata vermeyeceği anlamına
gelmez. Kullanıcıdan ve diğer durumlardan kaynaklanan sebeplerden dolayı doğru yazılmış
kodlar da hata verebilir. Bu durumda, hataların oluşumunu her zaman kontrol altında
tutamayabilirsiniz. Ancak, oluşabilecek hatalara karşı tedbirler alabilirsiniz. Yapacağınız bu
işleme İstisna Yönetimi denir.

3.1. System.Exception Sınıfı
       Nesne tabalı programlamada istisnai olaylar sınıflarla simgelenir. Tüm istisnai olay
sınıfları System namespace’inin Exception sınıfından türetilmelidir. Böylece tüm olaylar
Exception sınıfının birer alt sınıfıdır.

      SystemException ve ApplicationException, Exception sınıfından türetilir.

       Nesne tabanlı programlamanın çalışma zamanı sistemi (CLR) tarafından üretilen
sınıfları SystemException ve uygulama programları tarafından üretilen sınıfları da
ApplicationException sınıfından desteklenen sınıflardır.

       SystemException sınıfından türetilen standart istisnai olaylardan bazıları derleyicide
tanımlanmıştır. Örneğin, sıfıra bölme hatası için DivideByZeroException sınıfı derleyicinin
içerisinde varsayılan olarak vardır.

3.2. Try-Catch Kullanımı
      En sık kullanılan hata ayıklama kod bloğudur. Oluşabilecek hatalar try bloğunda, hata
durumunda işletilecek kodlar ise catch bloğunda yazılır. Hata olmaması durumunda catch
bloğundaki kodlar çalıştırılmaz. Hata olması durumunda ise, hata oluşan kod satırından catch
bloğuna kadar olan kod satırları işletilmez. Catch bloğundaki kod satırları işletilir.


                                             33
Try-Catch bloğu kullanım şekli şöyledir;

      Try
      {
      // Hata oluşturabilecek olan kodlar
      }
      catch
      {
      // Hata oluşursa işleyen kodlar
      }

      Örnek

      3 elemanlı bir int diziye eleman girişi yapılmaktadır. Eleman sayısından daha fazla
eleman girişi yapılmak istendiğinde hata oluşmaktadır. Oluşan hata sonucunda da uyarı
mesajı ekrana gelmektedir. Bir console uygulaması başlatarak aşağıdaki kodları yazınız.




                                            34
Başlangıçta tipi int olan “sayılar” adında 3 elemanlı bir dizi tanımlanmaktadır.
Elemanların girişi try bloğunda, hata mesajı da catch bloğunda yazılmıştır. Dizi 3 elemanlı
olarak tanımlanmasına rağmen for döngüsüyle diziye 10 eleman aktarılmak istenmektedir.
Dizi indisi sınırına kadar elemanlar diziye girişi yapıldığı için konsolda gösterilecektir.
Ancak, dizi indis sınırı aşıldığı anda catch bloğu devreye girecektir. Catch bloğu
IndexOutOfRangeException sınıfıyla kullanılmıştır. Böylece programın konsol görüntüsü
resim 3.1’deki gibi olur.




                         Resim 3.1: Uygulamanın konsol görüntüsü


      Oluşabilecek hatalarda sistemin içinde yer alan hata mesajlarını catch bloğunda
göstermek için catch ile birlikte Exception parametresi kullanılır.

      Örnek

       Bir öğrencinin üç notu text kutularından girilerek ortalaması hesaplanıp yine bir text
kutusuna yazdırılmak istenmektedir. Ancak kullanıcının not girişlerinde rakam yerine metin
girmesi hataya sebep olmaktadır. Bu örnek için önce formunuzu resim 3.2’deki gibi
tasarlayınız.




                              Resim 3.2: Formun tasarlanması


                                             35
Notlar girildikten sonra hesaplanması için “Ortalamayı hesapla” düğmesine
tıklanacaktır. Bunun için, tasarım anında düğme üzerine çift tıklayınız ve Click() metoduna
aşağıdaki kodları yazınız.




      Not girişleri try bloğunda yapılmaktadır. Rakam yerine harf olarak not girildiğinde
catch bloğu devreye girecektir. Catch bloğunda Exception sınıfının ürettiği hata mesajı
“hata” isimli bir değişkende tutulmaktadır. Oluşan hata MessageBox ile kullanıcıya
gösterilecektir.
      Veri girişinde notlar düzgün olarak girildiğinde hata meydana gelmez (Resim 3.3).




                                 Resim 3.3: Hata oluşmaz

       Ancak rakam yerine yazıyla not girişi yapılırsa hata oluşacaktır. Mesaj kutusundaki
ikinci satır sistemin hata mesajıdır (Resim 3.4).
                                            36
Resim 3.4: Hata oluşur

      Oluşabilecek birden fazla hata için farklı tipte catch bloğu kullanılabilir. Eğer hata
herhangi bir catch bloğunda yakalanırsa diğer catch blokları işletilmez.

      Örnek

     Aynı tipte iki dizi tanımlı elemanlarının birbirine bölünmesi uygulaması yapılacaktır.
Oluşabilecek hatalar göz önüne alınmalıdır. Program kodları aşağıdadır.




                                            37
Aynı tipte iki farklı dizi tanımlanarak ilk elemanları verilmiştir. Birinci dizinin eleman
sayısı 8, ikinci dizinin eleman sayısı 6’dır. Birinci dizi elemanlarının ikinci dizinin
elemanlarına bölmek suretiyle sonuçlar konsolda yazdırılacaktır. “for” döngüsü birinci
dizinin eleman sayısı kadar çalışacağı için ikinci dizinin eleman sayısını geçince program
hata verecektir. Daha öncesinde ikinci dizinin elemanlarında sıfır (0) olduğu için sıfıra bölme
hatası meydana gelir. İki tip hata olduğu için iki adet catch bloğu kullanılmıştır. Birinci catch
bloğu sıfıra bölme hatasıyla ilgili mesajı göstermekte, ikinci catch bloğu da dizi indis
sınırının aşılmasıyla ilgili mesajı göstermektedir. Bunun sonucunda konsol görüntüsü Resim
3.5’teki olur.




                           Resim 3.5: Uygulamanın konsol görüntüsü

3.3. Finally Kullanımı
      Hata oluşması durumunda işletilecek kod satırları yoksa programın kırılmasını
engellemek için finally bloğu kullanılmalıdır. Finally bloğu hata olsada olmasa da çalışan bir
bloktur.

      Finally bloğunun kullanım şekli şöyledir;

      Try
      {
      // Hata oluşturabilecek olan kodlar
      }
      finally
      {
      // Her koşulda çalışacak kodlar
      }

      Örnek

       Bir işçinin bir günde çalıştığı toplam saat ve bir saatlik ücreti text kutularından
girilerek alacağı parayı hesaplatan program için form tasarımı resim 3.6’daki gibidir.




                                               38
Resim 3.6:Formun tasarımı

      Hesapla düğmesine tıklanınca işçi maaşı hesaplatılacağı için düğmenin Click() metodu
aşağıdaki gibidir.




      Programda işlem yapan satırlar try bloğunda yazılmıştır. “finally” bloğunda yazılan
kod satırları her halde çalıştırılacağı için text kutuları boşaltılarak ve birinci text kutusu aktif
hale getirilerek yeni veri girişi sağlanmaktadır.

      Programın çalıştırılıp veri girişinin yapılması resim 3.7’deki gibi olur.




                                                39
Resim 3.7: Veri girişinin yapılması

       Veri girişi yapılıp “Hesapla” düğmesine tıklandığında işçinin maaşı hesaplanıp üçüncü
text kutusuna yazdırılır ve finally bloğu işletilir.




                      Resim 3.8: Hesaplama yapılıp finally bloğu işletilir.

      Örnek

      Bu örnekte sıfıra bölme hatası, dizi indis sınırlarına taşılmasıyla ilgili iki adet catch
bloğu ve işlemin bittiğini belirten bir finally bloğu kullanılmıştır. Uygulamada iki adet class
bulunmaktadır. “Class1” adlı sınıfta for döngüsüyle ikinci class’a yönlendirme
yapılmaktadır. Bu işlem üç defa gerçekleşecektir.

       “finallykullan” adlı sınıfta ana sınıftan gelen veri “deger” adlı değişken tarafından
karşılanmakta ve switch akış kontrol deyimiyle şartlar kontrol edilmektedir.




                                               40
41
“Case 0” şartında sayı sıfıra bölünmek istendiği için DivideByZeroException
sınıfından bir hata oluşur. Case 1 şartındaysa dizi 3 elemanlı olmasına rağmen dördüncü
eleman olarak sayı girişi yapılmak istenmekte ve IndexOutOfRangeException sınıfından bir
hata oluşur. İlgili hata mesajları konsola yazdırılır. Son bloğumuz olan finally bloğu ise her
halde çalışacaktır. Uygulama çalıştırıldığında resim 3.9’daki sonuçlar elde edilir.




                          Resim 3.9: Uygulamanın konsol görüntüsü

3.4. Throw Rethrow Kullanımı
3.4.1. Throw Kullanımı

      Throw hatayı fırlatma anlamına gelir. Bazı durumlarda hatalar bilerek oluşturulmak
istenebilir. Bunun için, “throw” komutu kullanılır. “throw” ifadesinin kullanıldığı noktada
program durarak istenilen istisnayı üretir.

      Şimdi throw’un kullanımına basit bir örnekle bakalım.

      Örnek

      Bu örnekte program akışının işleyişi gösterilmektedir.

        Try bloğunda önce fırlatmadan önceki mesaj yazdırılır. Sıfıra bölme hatası olan
DivideByZeroException sınıfı throw ile fırlatılarak program akışı catch bloğuna
yönlendirilmiştir. Try ve catch bloklarından sonra da bir mesaj yazdırılarak işlemin bittiği
belirtilmiştir.




                                             42
“throw”un kullanımı basit olarak bu şekilde gerçekleşmektedir.

      Uygulama çalıştırılırsa sonuç resim 3.10’daki gibidir.




                             Resim 3.10: Basit bir throw örneği

      Örnek

        Konsoldan girilen sayının bölünüp bölünemediğini test eden program kodu aşağıdaki
gibidir. Temel sınıftan girilen sayı yaz() sınıfına gönderilmektedir. Sayıyı göndermeden önce
sayının int tipinde olmaması durumunda da temel sınıfta Exception sınıfı kullanılarak
oluşabilecek hata bir mesajla gösterilmektedir. Girilen sayı sıfır ise yaz() metodunda throw
ile bir fırlatma gerçekleştirilerek işlemin sonucunda sıfıra bölme hatasının olduğu
belirtilmektedir.

      Program kodları aşağıdaki gibidir.



                                             43
Program çalıştırılıp sıfırdan farklı bir sayı girildiğinde hata oluşmayacak ve ekran
görüntüsü resim 3.11’deki gibi olacaktır.




                 Resim 3.11: Sıfırdan farklı sayı girilmesinde hata oluşmaz.




                                             44
Ancak, sayı girişinde sıfır(0) girilirse hata oluşacaktır.




                             Resim 3.12: Sıfır girilirse hata oluşur.

      Örnek

        Tasarlanan formdaki tüm text kutularının zorunlu olarak doldurulması gerektiğiyle
ilgili bir uygulamanız olsun. Tamam düğmesine tıklanınca tüm text kutularının doldurulup
doldurulmadığı test edilsin. İlgili düğmenin Click() metodu aşağıdaki gibidir.




       Eğer, “tckimliknu”,”annesoyad” veya “verginu” alanlarından biri girilmezse throw ile
hata fırlatılıp mesaj kutusunda da bu hata gösterilecektir. Bilgilerin tamamı eksiksiz
girildiğindeyse else yapısındaki mesaj kullanıcıya gösterilecektir.



                                               45
Resim 3.13: Bilgilerin eksik girilmesi durumu




                     Resim 3.14: Bilgilerin tamamının girilmesi durumu

3.4.2. Rethrow Kullanımı

      Rethrow hatayı yeniden fırlatma anlamına gelir. Rethrow kullanımı birden fazla catch
bloğu kullanıldığı zaman uygulanır. Bir catch bloğunda yakalanan istisnai olay diğer catch
bloğunda da yakalanabilsin diye yeniden fırlatılır.

     Bir istisnai olayı yeniden fırlatmak için açıkça bir istisnai durum belirtmeden yalnızca
throw; yazmak yeterli olacaktır.

      Örnek

     Aynı tipte ancak, eleman sayıları farklı olan iki dizi elemanlarının birbirlerine
bölünmesi durumunda oluşabilecek hataları gösteren program kodu aşağıdaki gibidir.




                                             46
Program birinci dizi elemanlarını ikinci dizi elemanlarına bölmektedir. İşleyiş, temel
sınıftaki try bloğundan rethrow_kullan sınıfının yürüt() metoduna yönlendirilmektedir. İkinci
dizinin tanımlı elemanlarında sıfır (0) olduğu için sıfıra bölme hatası meydana gelmektedir.
Ancak ikinci dizi elemanları birinci dizi elemanlarından az olduğu için birinci dizideki
elemanı bölecek sayı olmadığından dizi indisi sınır aşımı hatası meydana gelir. Birinci
dizinin bölünecek başka bir elemanı daha olmasından dolayı tekrar dizi sınır aşımı


                                             47
gerçekleşmesin diye yeniden fırlatma gerçekleştirilir. Böylece program akışı temel sınıftaki
catch bloğuna yönlendirilerek hata mesajıyla kullanıcı uyarılır.

     Uygulamanın çalıştırılması sonucunda ekran görüntüsü resim 3.15’teki gibi
olmaktadır.




                      Resim 3.15: Rethrow kullanımı ekran görüntüsü




                                            48
UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ
İşlem Basamakları                   Öneriler




 Yeni bir Windows Application
  oluşturarak formu Resim
  3.16’daki gibi tasarlayınız.




                                                 Resim 3.16: Formun tasarlanması

 Girilen bilgiler “HESAPLA”
  butonuna tıklandığında işleme
                                     “HESAPLA” butonunun üzerine fareyle çift
  tabi tutulacağından program
                                      tıklayınız.
  kodlarını Click() metoduna
  yazınız.

 Metin kutularından girilen
  bilgileri aktaracağınız
                                    int vize,final;
  değişkenleri int tipinde,
                                     double ort;
  ortalamaları için kullanacağınız
  değişkeni ise double tipte
  tanımlayınız.
                                    try
 Yapılacak işlemleri try bloğu     {
  içine yazınız.
                                     }

 Metin kutularından girilen
                                       vize=int.Parse(textBox1.Text);
  bilgileri int veri tipine çevirerek
                                        final=int.Parse(textBox2.Text);
  ilgili değişkenlere aktarınız.

                                     catch(DivideByZeroException)
                                      {
 Sıfıra bölme hatası için bir
  catch bloğu tanımlayınız.
                                        }


                                            49
 MessageBox.Show(“Sıfıra bölme hatası”);




 Sıfıra bölme hatası
  gerçekleştiğinde kullanıcıya
  verilecek mesajı mesaj
  kutusunda gösteriniz.




                                             Resim 3.17: Sıfıra bölme hatası

 Bilgilerin eksik girilmesine
                                  catch(Exception hata)
  karşı bir catch bloğu daha
                                   {
  tanımlayarak Exception
  parametresiyle bir hata
                                    }
  değişkeni belirtiniz.
                                  MessageBox.Show(“Bilgiler eksik girildin”
                                                +hata.Message,”Dikkat”);




 Eksik bilgi girilmesiyle
  oluşacak hatayı mesaj
  kutusuyla kullanıcıya
  gösteriniz.




                                         Resim 3.18: Bilgilerin eksik girilmesi


 try bloğunda iken eğer ilk
                                  if(vize==0)
  metin kutusuna sıfır girilirse
                                   {
  throw ile
                                        throw new DivideByZeroException;
  DivideByZeroException istisna
                                    }
  durumunu fırlatınız.


                                        50
 Metin kutularından herhangi       if ((vize.ToString()==””)||(final.ToString()==””))
  birine bilgi girilmemesi           {
  durumunda throw ile Exception           throw new Exception;
  istisna durumunu fırlatınız.        }
 Daha sonra vize ve final
  notlarını toplayıp ikiye bölerek  ort=(vize+final)/2;
  üçüncü metin kutusuna              textBox3.Text=ort.ToString();
  yazdırınız.
                                    MessageBox.Show(“İşlem bitti”);



 Her halde çalışacak bir finally
  bloğu oluşturunuz ve “İşlem
  bitti” mesajını verdiriniz.


                                          Resim 3.19: finally bloğuyla verilen mesaj




                                           51
UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ
   Aşağıdaki maddeleri dikkate alarak uygun projeyi hazırlayınız.

        Bir Windows Application başlatınız.
        Bu uygulamada öğrenciye ait ad soyad, T.C. kimlik numarası, okul numarası,
         baba adı ve bir dersten aldığı 3 not girilecektir.
        Bu notlara göre ortalaması hesaplatılıp başka bir metin kutusuna yazdırılacaktır.
        Her metin kutusunda Enter tuşuna basıldığında bir sonraki metin kutusuna
         geçilecektir.
        Oluşabilecek hatalara karşı şu önlemler alınmalıdır.
              Ad soyad alanı mutlaka doldurulmalıdır.
              T.C. kimlik numarası alanı 11 haneden küçük ve 11 haneden büyük
               olmamalıdır.
              Okul numarası alanı 1 haneden küçük ve 4 haneden büyük olamamalıdır.
              Baba adı alanı mutlaka doldurulmalıdır.
              Not 1, Not 2 ve Not 3 alanı mutlaka rakam olmalı ve notlar 0 ile 100
               arasında olmalıdır.
        Aşağıdaki ekran görüntülerini dikkate alarak programı yazınız.




                        Resim 3.20: Formun tasarlanmış hali




                                         52
Resim 3.21: Ad Soyad hata mesajı




Resim 3.22: T.C. kimlik numarası hata mesajı




   Resim 3.23: Okul numarası hata mesajı




      Resim 3.24: Baba adı hata mesajı




     Resim 3.25: Notlar için hata mesajı


                     53
Resim 3.26: Projenin çalışır hali




               54
ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME

      Aşağıdaki soruları dikkatlice okuyarak doğru/yanlış seçenekli sorularda uygun harfleri
yuvarlak içine alınız. Boşlukları uygun şekilde doldurunuz.

1.    Oluşabilecek hataları kontrol altına alma olayına …………… yönetimi denir.

2.    Tüm istisnai olay sınıfları System namespace’inin Exception sınıfından türetilmek
      zorundadır. (D/Y)

3.    try-catch bloğu oluşabilecek hatalar ve bu hatalara karşı çalıştırılacak kodların
      yazıldığı bir bloktur. (D/Y)

4.    Her koşulda çalışacak kod satırları …………….. bloğunda yazılır.

5.    Birden fazla catch bloğu kullanıldığında eğer hata herhangi bir catch bloğunda
      yakalanırsa diğer catch blokları hata yakalanmasına rağmen yine de çalışır (D/Y)




DEĞERLENDİRME

      Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konulara geri dönerek tekrar inceleyiniz. Tüm sorulara doğru cevap
verdiyseniz diğer öğrenme faaliyetine geçiniz.




                                            55
MODÜL DEĞERLENDİRME

PERFORMANS TESTİ (YETERLİK ÖLÇME)

      Modül ile kazandığınız yeterliği aşağıdaki kriterlere göre değerlendiriniz.

DEĞERLENDİRME ÖLÇÜTLERİ                                                       Evet   Hayır
   Bir Windows application formu tasarladınız mı?
   Sayıların değişken türlerini sınırlarına göre seçtiniz mi?
   Değişkenlerle işlem yaptınız mı?
   Döngü tiplerini kullanabildiniz mi?
   İşlem sonuçlarını metin kutusunda yazdırdınız mı?
   İşleyişi satır satır test ettiniz mi?
   comboBox’a eleman eklediniz mi?
   Bilgileri dosyaya yazdırdınız mı?
   Uygun namespace’leri projeye eklediniz mi?
   Dinleyici oluşturdunuz mu?
   Dinleyiciyi Listeners sınıfına eklediniz mi?
   Trace sınıfıyla dosyaya bilgi yazdırdınız mı?
   Belleği boşalttınız mı?
   Dosyayı kapattınız mı?
   Projenin çalıştığı klasörü tespit ettiniz mi?
   Hata ayıklama için try-catch bloğu kullandınız mı?
   Her halde çalışacak finally bloğu tanımladınız mı?
   Sıfıra bölme ahatsı için catch bloğu tanımladınız mı?
   Hataya göre uygun hata mesajları yazdırdınız mı?
   Oluşabilecek hatayı fırlattınız mı?




DEĞERLENDİRME

       Yaptığınız değerlendirme sonucunda eksikleriniz varsa öğrenme faaliyetlerini
tekrarlayınız.

      Modülü tamamladınız, tebrik ederiz. Öğretmeniniz size çeşitli ölçme araçları
uygulayacaktır, öğretmeninizle iletişime geçiniz.




                                               56
CEVAP ANAHTARLARI

CEVAP ANAHTARLARI
 ÖĞRENME FAALİYETİ–1 CEVAP ANAHTARI

          1        Doğru
          2        Yanlış
          3        Restart
          4     Run to Cursor
          5        Doğru
          6       TaskList
          7          F9
          8      immediate
          9           D
         10           C

 ÖĞRENME FAALİYETİ–2 CEVAP ANAHTARI

          1             B
          2             C
          3         app.config
          4           Yanlış
          5           Doğru

 ÖĞRENME FAALİYETİ–3 CEVAP ANAHTARI

          1          istisna
          2          Doğru
          3          Doğru
          4          finally
          5          Yanlış




               57
KAYNAKÇA

                      KAYNAKÇA
   SCHILDT Herbert, “Herkes için C#”, Alfa Basım Yayım Dağıtım Ltd.Şti,
    İstanbul 2005.

   DEMİRLİ Nihat, İNAN Yüksel, “Visual C#.NET 2005”, Palme Yayıncılık,
    Ankara 2006.

   Karagülle İHSAN, “Visual C#.Net Başlangıç Rehberi”, Türkmen Kitabevi,
    İstanbul 2004.

   YANIK Memik, “Microsoft Visual C#.NET”, Seçkin Yayıncılık, Ankara, 2004.

   ZENGİN Abdullah, “C# 2005”, Nirvana Yayınları, Ankara 2006.

   ZEKİ Yasemin, “Adım Adım C++ Uygulamaları”, Nirvana Yayınları, Ankara
    2006.

   www.csharpnedir.com

   www.msakademik.net




                                 58

More Related Content

What's hot

Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Erol Dizdar
 
Tasarımın temel ilkeleri
Tasarımın temel ilkeleriTasarımın temel ilkeleri
Tasarımın temel ilkeleriErol Dizdar
 
Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlıkErol Dizdar
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3Erol Dizdar
 
Resimlerle web araçları hazırlama
Resimlerle web araçları hazırlamaResimlerle web araçları hazırlama
Resimlerle web araçları hazırlamaErol Dizdar
 
Dış donanım birimleri
Dış donanım birimleriDış donanım birimleri
Dış donanım birimleriErol Dizdar
 
Sistem güvenliği
Sistem güvenliğiSistem güvenliği
Sistem güvenliğiOnur Şaner
 
BTT. Modül 10.Görüntü İşleme Cihazları
BTT. Modül 10.Görüntü İşleme CihazlarıBTT. Modül 10.Görüntü İşleme Cihazları
BTT. Modül 10.Görüntü İşleme Cihazlarıdeniz armutlu
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2major5
 
Internet programcılığı 4
Internet programcılığı 4Internet programcılığı 4
Internet programcılığı 4Erol Dizdar
 
Temel teknik resim
Temel teknik resimTemel teknik resim
Temel teknik resimErol Dizdar
 
Bilgisayar destekli çizim 482 bk0021 (1)
Bilgisayar destekli çizim 482 bk0021 (1)Bilgisayar destekli çizim 482 bk0021 (1)
Bilgisayar destekli çizim 482 bk0021 (1)Iklimlendirme Sogutma
 
BTT. Modül 18. Veri Yapıları
BTT. Modül 18. Veri YapılarıBTT. Modül 18. Veri Yapıları
BTT. Modül 18. Veri Yapılarıdeniz armutlu
 
Lehimleme ve baskı devre
Lehimleme ve baskı devreLehimleme ve baskı devre
Lehimleme ve baskı devreErol Dizdar
 
BTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep Modulu
BTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep ModuluBTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep Modulu
BTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep Moduludeniz armutlu
 

What's hot (19)

Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Sunucu işletim sistemi 6
Sunucu işletim sistemi 6
 
Tasarımın temel ilkeleri
Tasarımın temel ilkeleriTasarımın temel ilkeleri
Tasarımın temel ilkeleri
 
Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlık
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3
 
Resimlerle web araçları hazırlama
Resimlerle web araçları hazırlamaResimlerle web araçları hazırlama
Resimlerle web araçları hazırlama
 
213 gim191
213 gim191213 gim191
213 gim191
 
90 kg00013
90 kg0001390 kg00013
90 kg00013
 
Dış donanım birimleri
Dış donanım birimleriDış donanım birimleri
Dış donanım birimleri
 
Sistem güvenliği
Sistem güvenliğiSistem güvenliği
Sistem güvenliği
 
BTT. Modül 10.Görüntü İşleme Cihazları
BTT. Modül 10.Görüntü İşleme CihazlarıBTT. Modül 10.Görüntü İşleme Cihazları
BTT. Modül 10.Görüntü İşleme Cihazları
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2
 
Internet programcılığı 4
Internet programcılığı 4Internet programcılığı 4
Internet programcılığı 4
 
Temel teknik resim
Temel teknik resimTemel teknik resim
Temel teknik resim
 
Bilgisayar destekli çizim 482 bk0021 (1)
Bilgisayar destekli çizim 482 bk0021 (1)Bilgisayar destekli çizim 482 bk0021 (1)
Bilgisayar destekli çizim 482 bk0021 (1)
 
BTT. Modül 18. Veri Yapıları
BTT. Modül 18. Veri YapılarıBTT. Modül 18. Veri Yapıları
BTT. Modül 18. Veri Yapıları
 
Lehimleme ve baskı devre
Lehimleme ve baskı devreLehimleme ve baskı devre
Lehimleme ve baskı devre
 
213 gim082
213 gim082213 gim082
213 gim082
 
BTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep Modulu
BTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep ModuluBTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep Modulu
BTT. Modul 14. Isletim Sistemleri Gelismis Ozellikler Megep Modulu
 
213 gim298
213 gim298213 gim298
213 gim298
 

Similar to Nesne tabanlı programlama 4

Kontrol deyimleri
Kontrol deyimleriKontrol deyimleri
Kontrol deyimleriErol Dizdar
 
Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Erol Dizdar
 
Dış donanım birimleri
Dış donanım birimleriDış donanım birimleri
Dış donanım birimlerihekul38
 
Işletim sistemi kurulumu
Işletim sistemi kurulumuIşletim sistemi kurulumu
Işletim sistemi kurulumuErol Dizdar
 
Sunucu işletim sistemi 5
Sunucu işletim sistemi 5Sunucu işletim sistemi 5
Sunucu işletim sistemi 5Erol Dizdar
 
Veri tabanı planlama
Veri tabanı planlamaVeri tabanı planlama
Veri tabanı planlamakhan_27
 
Megep Veritabani Dersi Modul 2 Veritabaninda Tablolar
Megep  Veritabani Dersi Modul 2  Veritabaninda TablolarMegep  Veritabani Dersi Modul 2  Veritabaninda Tablolar
Megep Veritabani Dersi Modul 2 Veritabaninda Tablolardeniz armutlu
 
BTT. Modül 17. Yapısal Programlama Temelleri
BTT. Modül 17. Yapısal Programlama TemelleriBTT. Modül 17. Yapısal Programlama Temelleri
BTT. Modül 17. Yapısal Programlama Temellerideniz armutlu
 
Nesne tabanlı programlama 6
Nesne tabanlı programlama 6Nesne tabanlı programlama 6
Nesne tabanlı programlama 6Erol Dizdar
 
Işletim sistemi gelişmiş özellikleri
Işletim sistemi gelişmiş özellikleriIşletim sistemi gelişmiş özellikleri
Işletim sistemi gelişmiş özellikleriErol Dizdar
 
İleti̇şi̇m süreci̇ ve türleri̇
İleti̇şi̇m süreci̇ ve türleri̇İleti̇şi̇m süreci̇ ve türleri̇
İleti̇şi̇m süreci̇ ve türleri̇ayetullah
 
Sunucu işletim sistemi 2
Sunucu işletim sistemi 2Sunucu işletim sistemi 2
Sunucu işletim sistemi 2Erol Dizdar
 

Similar to Nesne tabanlı programlama 4 (20)

Kontrol deyimleri
Kontrol deyimleriKontrol deyimleri
Kontrol deyimleri
 
Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Sunucu işletim sistemi 1
Sunucu işletim sistemi 1
 
Dış donanım birimleri
Dış donanım birimleriDış donanım birimleri
Dış donanım birimleri
 
Işletim sistemi kurulumu
Işletim sistemi kurulumuIşletim sistemi kurulumu
Işletim sistemi kurulumu
 
Sunucu işletim sistemi 5
Sunucu işletim sistemi 5Sunucu işletim sistemi 5
Sunucu işletim sistemi 5
 
Veri tabanı planlama
Veri tabanı planlamaVeri tabanı planlama
Veri tabanı planlama
 
Megep Veritabani Dersi Modul 2 Veritabaninda Tablolar
Megep  Veritabani Dersi Modul 2  Veritabaninda TablolarMegep  Veritabani Dersi Modul 2  Veritabaninda Tablolar
Megep Veritabani Dersi Modul 2 Veritabaninda Tablolar
 
Coreldraw
CoreldrawCoreldraw
Coreldraw
 
Vektorel coreldraw
Vektorel coreldrawVektorel coreldraw
Vektorel coreldraw
 
213 gim068
213 gim068213 gim068
213 gim068
 
213 gim033
213 gim033213 gim033
213 gim033
 
BTT. Modül 17. Yapısal Programlama Temelleri
BTT. Modül 17. Yapısal Programlama TemelleriBTT. Modül 17. Yapısal Programlama Temelleri
BTT. Modül 17. Yapısal Programlama Temelleri
 
Nesne tabanlı programlama 6
Nesne tabanlı programlama 6Nesne tabanlı programlama 6
Nesne tabanlı programlama 6
 
Işletim sistemi gelişmiş özellikleri
Işletim sistemi gelişmiş özellikleriIşletim sistemi gelişmiş özellikleri
Işletim sistemi gelişmiş özellikleri
 
İleti̇şi̇m süreci̇ ve türleri̇
İleti̇şi̇m süreci̇ ve türleri̇İleti̇şi̇m süreci̇ ve türleri̇
İleti̇şi̇m süreci̇ ve türleri̇
 
Sunucu işletim sistemi 2
Sunucu işletim sistemi 2Sunucu işletim sistemi 2
Sunucu işletim sistemi 2
 
347 ch0013
347 ch0013347 ch0013
347 ch0013
 
3-Anakartlar ve Kasalar
3-Anakartlar ve Kasalar3-Anakartlar ve Kasalar
3-Anakartlar ve Kasalar
 
213 gim044
213 gim044213 gim044
213 gim044
 
213 gim044
213 gim044213 gim044
213 gim044
 

More from Erol Dizdar

Kardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem TerminolojisiKardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem TerminolojisiErol Dizdar
 
ENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLERENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLERErol Dizdar
 
KAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİKAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİErol Dizdar
 
SİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİSİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİErol Dizdar
 
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİSİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİErol Dizdar
 
ÜrinerSistem Terminolojisi
ÜrinerSistem TerminolojisiÜrinerSistem Terminolojisi
ÜrinerSistem TerminolojisiErol Dizdar
 
TIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİTIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİErol Dizdar
 
Anksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) BozukluklarıAnksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) BozukluklarıErol Dizdar
 
Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?Erol Dizdar
 
Yaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç KullanımıYaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç KullanımıErol Dizdar
 
GEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMIGEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMIErol Dizdar
 
Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?Erol Dizdar
 
AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2Erol Dizdar
 
AKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMIAKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMIErol Dizdar
 
COVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma RehberiCOVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma RehberiErol Dizdar
 
Kendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmakKendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmakErol Dizdar
 
Bilgisayar İlk Yardım
Bilgisayar İlk YardımBilgisayar İlk Yardım
Bilgisayar İlk YardımErol Dizdar
 
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...Erol Dizdar
 
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...Erol Dizdar
 
Mazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmakMazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmakErol Dizdar
 

More from Erol Dizdar (20)

Kardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem TerminolojisiKardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem Terminolojisi
 
ENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLERENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLER
 
KAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİKAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİ
 
SİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİSİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİ
 
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİSİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
 
ÜrinerSistem Terminolojisi
ÜrinerSistem TerminolojisiÜrinerSistem Terminolojisi
ÜrinerSistem Terminolojisi
 
TIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİTIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİ
 
Anksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) BozukluklarıAnksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) Bozuklukları
 
Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?
 
Yaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç KullanımıYaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç Kullanımı
 
GEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMIGEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMI
 
Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?
 
AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2
 
AKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMIAKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMI
 
COVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma RehberiCOVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma Rehberi
 
Kendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmakKendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmak
 
Bilgisayar İlk Yardım
Bilgisayar İlk YardımBilgisayar İlk Yardım
Bilgisayar İlk Yardım
 
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
 
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
 
Mazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmakMazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmak
 

Nesne tabanlı programlama 4

  • 1. T.C. MİLLİ EĞİTİM BAKANLIĞI BİLİŞİM TEKNOLOJİLERİ NESNE TABANLI PROGRAMLAMA 4 482BK0077 Ankara 2011
  • 2. Bu modül, mesleki ve teknik eğitim okul/kurumlarında uygulanan Çerçeve Öğretim Programlarında yer alan yeterlikleri kazandırmaya yönelik olarak öğrencilere rehberlik etmek amacıyla hazırlanmış bireysel öğrenme materyalidir.  Millî Eğitim Bakanlığınca ücretsiz olarak verilmiştir.  PARA İLE SATILMAZ.
  • 3. İÇİNDEKİLER AÇIKLAMALAR ...................................................................................................................iii GİRİŞ ....................................................................................................................................... 1 ÖĞRENME FAALİYETİ-1 ..................................................................................................... 3 1. HATA AYIKLAMA ARAÇLARI....................................................................................... 3 1.1. Hata Türleri................................................................................................................... 3 1.2. Debug Menüsü Elemanları............................................................................................ 4 1.2.1. Start........................................................................................................................ 4 1.2.2. Restart.................................................................................................................... 4 1.2.3. Stop Debugging ..................................................................................................... 4 1.2.4. Step Into................................................................................................................. 4 1.2.5. Step Over ............................................................................................................... 4 1.2.6. Step Out ................................................................................................................. 4 1.2.7. Run to Cursor......................................................................................................... 4 1.2.8. Watch..................................................................................................................... 5 1.3. TaskList (Görev Listesi Penceresi) ............................................................................... 7 1.4. Breakpoint ve Breakpoints Penceresi ........................................................................... 8 1.5. Output Penceresi ........................................................................................................... 9 1.6. Command Window (Komut Penceresi) ...................................................................... 10 UYGULAMA FAALİYETİ .............................................................................................. 12 ÖLÇME VE DEĞERLENDİRME .................................................................................... 14 ÖĞRENME FAALİYETİ-2 ................................................................................................... 15 2. HATA AYIKLAMA VE İZ BULMA SINIFLARI ........................................................... 15 2.1. Trace ve Debug Sınıfları ............................................................................................. 15 2.2. TraceListener Sınıfları ................................................................................................ 16 2.2.1. DefaultTraceListener ........................................................................................... 17 2.2.2. TextWriterTraceListener ..................................................................................... 17 2.2.3. EventLogTraceListener ....................................................................................... 19 2.3. App.Config Dosyası.................................................................................................... 21 2.4. Trace ve Debug Sınıfıyla Kullanılan Komutlar .......................................................... 24 2.4.1. Write .................................................................................................................... 24 2.4.2. WriteLine............................................................................................................. 24 2.4.3. WriteIf ................................................................................................................. 24 2.4.4. WriteLineIf .......................................................................................................... 24 2.4.5. Assert ................................................................................................................... 24 2.4.6. Fail ....................................................................................................................... 26 UYGULAMA FAALİYETİ .............................................................................................. 29 ÖLÇME VE DEĞERLENDİRME .................................................................................... 32 ÖĞRENME FAALİYETİ-3 ................................................................................................... 33 3. İSTİSNAİ OLAYLAR ....................................................................................................... 33 3.1. System.Exception Sınıfı.............................................................................................. 33 3.2. Try-Catch Kullanımı ................................................................................................... 33 3.3. Finally Kullanımı ........................................................................................................ 38 3.4. Throw Rethrow Kullanımı .......................................................................................... 42 3.4.1. Throw Kullanımı ................................................................................................. 42 3.4.2. Rethrow Kullanımı .............................................................................................. 46 UYGULAMA FAALİYETİ .............................................................................................. 49 i
  • 4. UYGULAMA FAALİYETİ .............................................................................................. 52 ÖLÇME VE DEĞERLENDİRME .................................................................................... 55 CEVAP ANAHTARLARI ..................................................................................................... 57 KAYNAKÇA ......................................................................................................................... 58 ii
  • 5. AÇIKLAMALAR AÇIKLAMALAR KOD 482BK0077 ALAN Bilişim Teknolojileri DAL/MESLEK Veritabanı Programcılığı MODÜLÜN ADI Nesne Tabanlı Programlama 4 Nesne tabanlı programlamada hata ayıklama araçlarını kullanabilme, hata ayıklama sınıflarını oluşturabilme ve MODÜLÜN TANIMI istisnai olayları kontrol edebilmeyle ilgili öğrenme materyalidir. SÜRE 40/32 ÖN KOŞUL Nesne Tabanlı Programlama 3 modülünü bitirmiş olmak YETERLİK Nesne tabanlı programdaki hataları gidermek Genel Amaç Gerekli ortam sağlandığında, programdaki hataları giderebilecek ve istisnai olayları kontrol altına alabileceksiniz. MODÜLÜN AMACI Amaçlar 1. Hata ayıklama araçlarını kullanabileceksiniz. 2. Hata ayıklama ve iz bulma sınıflarını kullanabileceksiniz. 3. İstisnai olayları kontrol edebileceksiniz. Ortam Atölye, laboratuvar, ev, bilgi teknolojileri ortamı ( İnternet ) vb, kendi kendinize veya grupla çalışabileceğiniz EĞİTİM ÖĞRETİM tüm ortamlar. ORTAMLARI VE Donanım DONANIMLARI Programlama dilini çalıştırabilecek yeterlikte bilgisayar, yedekleme için gerekli donanım ( cd yazıcı, flash bellek), raporlama için yazıcı, sayfa için internet bağlantısı, kâğıt ve kalem. Modülün içinde yer alan her öğrenme faaliyetinden sonra verilen ölçme araçları ile kendinizi değerlendireceksiniz. ÖLÇME VE Modül sonunda ise, bilgi ve beceriyi belirlemek amacıyla, DEĞERLENDİRME öğretmeniniz tarafından belirlenecek ölçme aracıyla değerlendirileceksiniz. iii
  • 6. iv
  • 7. GİRİŞ GİRİŞ Sevgili Öğrenci, Okul yaşantınızda öğreneceğiniz her konu, yaptığınız uygulama ve tamamladığınız her modül bilgi dağarcığınızı geliştirecek ve ilerde atılacağınız iş yaşantınızda size başarı olarak geri dönecektir. Eğitim sürecinde daha öz verili çalışır ve çalışma disiplinini kazanırsanız; başarılı olmamanız için hiçbir neden yoktur. Günümüzde Windows tabanlı görsel programlama dillerinin hızla gelişmekte olduğu ve kullanımının oldukça yaygınlaştığı görülmektedir. Bu programlama dilleri ile sizler programlama mantığını ve becerisini çok daha kolay kavrayacaksınız. Bu modülle, programın çalışması esnasında ortaya çıkan kullanıcı kaynaklı hataları kontrol altına alabilecek, hataların nasıl denetlenebileceğiyle ilgili düzenlemeleri editör menülerinden yapabilecek ve istisnai olaylarla ilgili bilgileri öğreneceksiniz. Bu modülde anlatılan konuların tümünü öğrendiğinizde, Nesne Tabanlı Programlama dilinde yazmış olduğunuz programların hata oluşumunu en asgari seviyeye çekmiş olacak ve hatasız, kırılmayan programlar yazabileceksiniz. 1
  • 8. 2
  • 9. ÖĞRENME FAALİYETİ-1 ÖĞRENME FAALİYETİ-1 AMAÇ Hata türlerini ve hata ayıklama araçlarını kullanarak program kod satırlarını kontrol altında tutabileceksiniz. Oluşabilecek hatalara karşı önlemler alabileceksiniz. ARAŞTIRMA  Bitirmiş olduğunuz modüllerde ne tür hatalarla karşılaştınız?  Hataları gidermek için ne tür çözümler uyguladınız? 1. HATA AYIKLAMA ARAÇLARI Hata, programın çalışması sırasında ortaya çıkan bir durumdur. Hatalar çoğunlukla kullanıcı kaynaklıdır. Örneğin, kullanıcı programda sayı girilmesi gereken alanda metin bilgisi girerse hata meydana gelir. Programcı bu nedenle oluşabilecek durumlar için hataları kontrol edebilen program kod satırları yazarak programın kırılmasını önler. Hata ayıklamanın avantajı, bir hata oluştuğunda otomatik olarak çalıştırılan ExceptionHandler (İstisna Durum Yöneticisi) adında bir kod bloğu tanımlamanıza imkan vererek hata yönetimi verimliliğini artırmaktır. Bir diğer avantajı ise, çok sık oluşan program hataları için nesne tabanlı programlamada standart istisnai durumların tanımlanmış olmasıdır. 1.1. Hata Türleri Hatalar üç çeşittir.  Yazım hataları Program içinde kullanılan fonksiyon adları, değişken adları, yapı isimleri ve komutların karakterlerinin yanlış yazımından meydana gelen hatalardır. Örneğin, MessageBox.Show yazılması gerekirken MessageBoxShow yazılırsa yazım hatası oluşur. Oluşan bu hata görev listesi (TaskList) penceresinde görüntülenir.  Çalışma zamanı hataları Uygulamanın çalışması icra edilirken bir işlem çalışmayabilir. Örneğin, sıfıra bölme hatası bu tür hatalara bir örnektir.  Mantıksal hatalar Bu hatalar uygulama derlenirken ve yürütülürken oluşur. Bu durumda program çalışsa bile yanlış sonuç üretir. Örneğin, yaş bilgisi girilmesi istenen bir alana negatif değer girilemez ya da bir işçinin maaşı hesaplanırken haftada 50 saat yazılması gereken yere 150 saat yazılırsa program çalışır ancak sonuç doğru olmaz. Bu hata bir mantık hatasıdır. 3
  • 10. 1.2. Debug Menüsü Elemanları 1.2.1. Start Uygulamayı çalıştırmak için kullanılır. Klavye kısayol tuşu F5’tir. 1.2.2. Restart Debug modunda iken çalışmakta olan uygulamayı sonlandırır ve uygulamanın yürütülmesini yeniden başlatır. Kısayol tuşu Ctrl+Shift+F5’tir. 1.2.3. Stop Debugging Hata ayıklama işlemini sonlandırır ve tasarım moduna geri döner. Kısayol tuşu Shift+F5’tir. 1.2.4. Step Into Program kodlarını satır satır çalıştırmak için kullanılır. Kısayol tuşu F11’dir. Eğer bir sonraki satır, bir metodu çağırırsa Step Into, o metodun başlangıcında durur. Yani, sadece bulunduğu metot içinde çalışır. 1.2.5. Step Over Program satırlarını adım adım çalıştırmak için kullanılır. Bir sonraki satırda çağrılan bir metotsa çağrılan metodun içine girmeden metodu çalıştırır ve bir sonraki satırdan itibaren çalışmaya devam eder. Kısayol tuşu F10’dur. 1.2.6. Step Out Çalıştırılan metodun içindeki belirtilen bütün komutlar işletilir. Eğer metot içerisinden bir başka metot çağrılıyorsa, çağrılan metot işletilerek metodun işleyişi bir sonraki satırdan devam eder. 1.2.7. Run to Cursor İmlecin bulunduğu satırdan itibaren programın çalışmasını yürütür. 4
  • 11. 1.2.8. Watch Bir değişken ya da ifadenin programın icrası esnasında hangi değerleri aldığını görmenizi sağlar. Görmek istediğiniz değişkenin üzerinde iken sağ tıkla açılan menüden Add Watch komutu tıklanarak değişken Watch penceresine aktarılır ve burada değerleri izlenir. Burada dikkat edilmesi gereken husus, program debug modunda olmalı ve adım adım çalıştırılmalıdır. Bu şartlarda değişkenlerin değerleri izlenebilir. Resim 1.1: Watch penceresi Watch penceresinde bulunan değişkeni çıkarmak için değişken üzerinde sağ tık yapılır ve Delete Watch komutu çalıştırılır. Resim 1.2: Watch penceresinden değişken silmek 5
  • 12. Çalışma zamanında debug menüsünden QuickWatch komutu çalıştırılırsa ekrana gelen pencerede public olan tüm değişkenler ve işletilen metot içindeki diğer değişkenler izlenir. Resim 1.3: QuickWatch iletişim kutusu Recalculate düğmesiyle seçilen değişkenin değeri tekrar hesaplatılabilir. Seçilen değişken istenirse Add Watch düğmesiyle Watch penceresine de aktarılabilir. Resim 1.4: Seçilen değişkenin Watch penceresine aktarılması 6
  • 13. 1.3. TaskList (Görev Listesi Penceresi) Program içinde tanımlanmayan değişken, metot ya da yazım hatalarını gösteren penceredir. TaskList penceresini açmak için Project menüsünden Other Windows seçeneği üzerine gelip açılan menüden Task List komutu seçilmelidir. Resim 1.5: Project menüsünden TaskList pencersini açmak Diğer bir yöntem olarak ise, klavye kısayol tuşu Ctrl+Alt+K’yı kullanmaktır. Resim 1.6: Programın derlenmesinde hatanın Tasklist’te gösterilmesi 7
  • 14. 1.4. Breakpoint ve Breakpoints Penceresi Programın işleyişini istediğiniz bir noktada durdurmak için kod satırına Breakpoint (kesme noktası) ekleyebilirsiniz. Böylece program sizin işaret ettiğiniz kesme noktasında duracaktır. Bir kod satırına Breakpoint eklemek için F9 kısayol tuşu veya sağ tıkla açılan menüden “Insert Breakpoint” komutunu vermeniz gerekir. Böylece kesme noktası eklenen program satırı şekildeki gibidir. Resim 1.7: Programa Breakpoint eklenmesi Kesme noktası eklenmiş satır Breakpoints penceresinde gösterilir. Resim 1.8: Breakpoints penceresi Program çalıştırılıp kesme noktası eklenen satıra geldiğinde programın çalışması durur. Kırmızı zemin rengi sarıya dönüşür. Breakpoint’i silmek için Breakpoints penceresindeki kesme noktası üzerine sağ tık yapılıp açılan menüden Delete komutu seçilir. Resim 1.9: Breakpoints penceresinden kesme noktasının silinmesi 8
  • 15. 1.5. Output Penceresi Programın derlenmesi aşamalarının gösterildiği penceredir. Kısayol tuşu Ctrl+Alt+O’dur. Output penceresinde bulunan açılır liste kutusunda iki seçenek vardır. Bunlar Build ve Debug’dır. Resim 1.10: Output penceresinde Build ve Debug seçenekleri Açılır liste kutusundan Build seçildiğinde derlemeyle ilgili bilgiler görüntülenir. Resim 1.11: Output penceresinde Build seçimi Debug seçildiğinde ise programı EXE haline dönüştürürken kullanılan dosyalar görüntülenir. 9
  • 16. Resim 1.12: Output penceresinde Debug seçimi 1.6. Command Window (Komut Penceresi) Uygulamanızı çalışma zamanında takip etme işlemine Trace denir. Trace anında, kod satırlarında yer alan değişkenlerin o anki değerlerini görmenizi ve bu değerlerle matematiksel işlem yapmanızı sağlayan pencere komut penceresidir. Kısayol tuşu Ctrl+Alt+A’dır. Komut penceresi ilk açıldığında Command Window penceresi ekrana gelir Resim 1.13: Command Window penceresi Kod satırlarıyla ilgili işlem ve hesaplamalar yapabilmek için Command Window’da iken immed yazılarak Command Window’un Immediate moduna geçilir. Resim 1.14: Immediate modu Bu moda değişkenlerle ilgili işlem yapabilmek için ilk önce ? (soru işareti) yazılır. 10
  • 17. Resim 1.15: Immediate modunda işlem yapılması Tekrar Command Window’a geçmek istenirse > cmd satırı yazılır. 11
  • 18. UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ İşlem Basamakları Öneriler  Bir Windows Application oluşturarak formu aşağıdaki gibi tasarlayınız.  2 metin kutusu, 2 Label ve 1 buton olduğundan formun boyutunu küçük tasarlayınız.  Girilen sayının faktöriyeli “HESAPLA”  “HESAPLA” düğmesinin üzerinde düğmesine tıklandığında bulunacağı için çift tıklayınız. program kodlarını Click() metoduna yazınız.  “int” tipinde bir değişken tanımlayınız.  int sayi;  Metin kutusundan girilen bilgi string  Metin kutusundan girilen sayıyı değişkene tipte olduğu için “Parse” metoduyla aktarınız. int tipine çeviriniz.  sayi=int.Parse(textBox1.Text);  int faktor=1;  Sonucu aktaracağınız değişkeni int tipinde  Çarpma işleminde 0 (sıfır) yutan tanımlayarak 1 (bir) değerini atayınız. eleman olduğu için faktor değişkeni 1 ile başlamalıdır.  for (int i=0;i<=sayi;i++)  1’den başlayarak faktoriyeli bulunacak { sayıdan küçük ve eşit olacak şekilde bir for döngüsü bloğu oluşturunuz. }  Faktoriyel hesabı 1’den başlayarak belirtilen sayıya kadar bu sayıların  for bloğu içine faktoriyel hesabını yapacak birbiriyle çarpımıdır. Buna girilen kodları yazınız. sayı da dâhildir. faktor=faktor*i;  Sonucu ikinci metin kutusuna string tipe  textBox2.Text=faktor.ToString(); kod çevirerek yazdırınız. satırını yazınız.  Sayi=int.Parse(textBox1.Text);  Sayı girişi yapıldığı satırdan itibaren işleyişi satırının başında sağ tık yapıp Run to test ediniz. Corsor komutunu veriniz. ve F11 (Step Over) tuşunu kullanınız.  Programı tekrar çalıştırınız. Çalışma  Değişken üzerinde sağ tık yaparak 12
  • 19. zamanında bir Watch penceresi açarak “i” Add Watch komutunu kullanınız. değişkeninin aldığı değerleri görünüz.  Bu işlem bir kere gerçekleştiğinde faktor  Add Watch komutunu değişkenini de Watch penceresine ekleyiniz. kullanabilirsiniz.  Command Window’u açarak faktor değişkeninin aldığı son değeri ikiye bölünüz.  Command Window’da immed yazarak işlem yapabilirsiniz.  Uygulamanın sonuç görüntüsünü yandaki resimle karşılaştırınız. 13
  • 20. ÖLÇME VE DEĞERLENDİRME ÖLÇME VE DEĞERLENDİRME Aşağıdaki soruları dikkatlice okuyarak doğru/yanlış seçenekli sorularda uygun harfleri yuvarlak içine alınız. Seçenekli sorularda ise uygun şıkkı işaretleyiniz. Boşluk doldurmalı sorularda boşluklara uygun cevapları yazınız. 1. ExceptionHandler (İstisna durum yöneticisi) hata yönetiminin verimliliğini artırır. (D/Y) 2. Mantıksal hata oluştuğunda program çalışmaz. (D/Y) 3. Uygulamaya yeni kod satırları eklendiğinde program ………….edilmelidir. 4. Uygulamayı imlecin bulunduğu satırdan itibaren çalıştırmak için ………..………. komutu kullanılır. 5. Program Debug modunda iken ve adım adım çalıştırıldığında değişkenler Watch penceresinden izlenebilir. (D/Y) 6. Program yazımında hata oluştuğunda bu hatalar …………………… penceresinde görüntülenir. 7. Programda istediğiniz bir satıra kesme noktası (Breakpoint) eklemek için ………… kısa yol tuşu kullanılır. 8. Komut penceresinde işlem yapabilmek için …………… moduna geçilmelidir. 9. Hata ayıklama işlemini sonlandıran komut aşağıdakilerden hangisidir? A) Step Into B) Step Out C) Step Over D) Stop Debugging 10. Programı adım adım çalıştırırken çağrılan metodun içini işletmeden çalıştıran Step komutu aşağıdakilerden hangisidir? A) Step Into B) Step Out C) Step Over D) Stop Debugging DEĞERLENDİRME Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız sorularla ilgili konulara geri dönerek tekrar inceleyiniz. Tüm sorulara doğru cevap verdiyseniz diğer öğrenme faaliyetine geçiniz. 14
  • 21. ÖĞRENME FAALİYETİ-2 ÖĞRENME FAALİYETİ-2 AMAÇ Programda oluşabilecek hataları çeşitli yöntemlerle önceden tespit edebilmeyi ve bu yöntemlerin neler olduğunu kavrayabileceksiniz. ARAŞTIRMA  Nesne tabanlı programlamanın derleyicisi hataları nasıl tespit etmektedir? Araştırınız. 2. HATA AYIKLAMA VE İZ BULMA SINIFLARI 2.1. Trace ve Debug Sınıfları Bu sınıfların kullanımıyla dosyalama mekanizmasının (Log) oluşturulması ve yönetilmesi işlemleri yapılmaktadır. Bu sınıfları kullanabilmek için using deyimiyle birlikte System.Diagnostics namespace’inin projenin başına yazılması gerekir. Bu iki sınıf, proje geliştirme aşamasında hata mesajlarını, projenin uygulanması aşamasında ise gerekli dosyalama bilgilerini gerekli yerlere yazdırmak açısından birçok kolaylık sunar. Trace ve Debug sınıflarının tüm özellikleri aynıdır. Tek fark, Debug sınıfı Release uygulaması içine derlenmemesidir. Örnek Formunuzun üzerinde çift tıklayarak Form’un Load metoduna aşağıdaki kod satırlarını yazınız. Trace ve Debug sınıflarının çalışmasını basit olarak bu şekilde görebilirsiniz. Bu kod satırları yazıldığında projenizin modunda olmasına dikkat ediniz. 15
  • 22. Output penceresinde yürütülen işlem resim 2.1’deki gibi yansıyacaktır. Resim 2.1: Trace ve Debug sınıflarının işleyişi Eğer modundayken programı çalıştırırsanız Debug sınıfı işletilmeyecek sadece Trace sınıfı işletilecektir. Resim 2.2: Release modunda Trace sınıfı işletilir. 2.2. TraceListener Sınıfları Kendilerine gelen bilgiyi tutarak ilgili kaynaklara gönderebilen sınıflar Trace ve Debug sınıflarıdır. Bu işlemleri yapabilmek için TraceListener nesneleri kullanılır. Trace ve Debug sınıflarının Listeners (dinleyici) özelliği TraceListener tipinde koleksiyon referansı tutar. Resim 2.3: Listeners özelliği 16
  • 23. Bu koleksiyona mevcut TraceListener nesneleri eklenebildiği gibi siz de bir TraceListener sınıfı oluşturup ekleyebilirsiniz. Hem Trace hem de Debug sınıfı aynı TraceListener koleksiyonunu paylaşır. Bu sınıflara bir Listener eklenirse bu Listener hem Trace hem de Debug sınıfı için geçerli olur. 2.2.1. DefaultTraceListener Trace ve Debug sınıflarının TraceListener koleksiyonuna varsayılan olarak eklenmiştir. Trace ve Debug’a gönderilen bilgi Output penceresinde gösterilmektedir. Resim 2.4: Trace ve Debug TraceListener’a default olarak eklenmiştir. 2.2.2. TextWriterTraceListener Bu listener sınıfı Trace ve Debug sınıflarına iletilen bilgiyi bir dosyaya (Log) yazmak için kullanılır. Örnek Bu örnekte metin kutularından girilen iki sayı toplatılıp sonuç yine bir metin kutusuna ve ayrıca, girilen sayılar ve sonuç TextWriterTraceListener ile bir dosyaya yazdırılmaktadır. Bunun için formu resim 2.5’teki gibi tasarlayınız. Resim 2.5: Formun tasarlanmış hali 17
  • 24. Form tasarımından sonra forma eklediğiniz butonun üzerinde çift tıklayarak Click metoduna aşağıdaki kodları yazınız. Birinci metin kutusundan girilen sayıyı a değişkeni, ikinci metin kutusundan girilen sayıyı b değişkeni tutacaktır. İkisinin toplamı da sonuc değişkenine aktarılacaktır. Girilen sayıları ve sonucu dosyaya yazabilmek için FileStream sınıfından “dosya” adlı bir nesne oluşturulur. TextWriterTraceListener sınıfından da “dinleyici” adında bir nesne oluşturularak sonucun “dosya”ya yönlendirilmesi sağlanır. Oluşturulan dinleyici nesnesi Listener sınıfına eklenir. Resim 2.6: Programın çalıştırılıp sonuçların üretilmesi 18
  • 25. Program çalıştırılıp sonuçlar üretildikten sonra uygulamanızın varsayılan çalışma klasöründeki “Bin” klasörü altındaki Debug klasörüne program kodunda adını verdiğiniz dosya oluşturulur (Sonuc.txt). Resim 2.7: Sonuçların dosyaya yazdırılması Dosya içeriğine bakacak olursanız, veriler iki defa dosyaya yazılmış durumdadır. Bunun sebebi, projenizin Debug modundayken derlenmiş olmasıdır. Eğer Debug modunda değil de Release modunda çalıştırmış olsaydınız resim 2.8’deki gibi bir sonuç alırdınız. Oluşturulan “Sonuc.txt” dosyası da “Bin” klasörü altındaki “Release” klasörü içine oluşturulurdu. Resim 2.8: Release modunda çalıştırılan projenin ürettiği sonuç 2.2.3. EventLogTraceListener Trace ve Debug sınıflarına gelen veriyi Windows Eventlog’una (olay dosyasına) gönderir. Örnek Bu örnekte TextWriterTraceListener örneğinde olduğu gibi aynı işlemleri yapmaktadır. Fark, sonuçların bir dosyaya değil de sistemin Event Log’una yazdırmasıdır. 19
  • 26. Yani, bir önceki örnekte tasarlamış olduğunuz formu bu örnek için de kullanabilirsiniz. Yalnız, butona tıklandığında yapılacak işlemlerimiz değiştiği için “buton1_Click” yordamını aşağıdaki gibi düzenleyiniz. Sayı girişleri ilgili yerlere yapıldıktan sonra EventLog sınıfından “olayim” adlı bir nesne oluşturulmaktadır. EventLogTraceListener sınıfından da “olaydinleyici” adlı bir nesne oluşturarak Listeners sınıfına eklenir. Program çalıştırıldığında elde edilen sonuçlar Trace ve Debug sınıflarıyla EventLog’a yazdırılır. Resim 2.9: Sonuçlar Event Log’a gönderilir. 20
  • 27. Event Logs’a gönderilen verileri Server Explorer penceresinden görülür. Her işlemin ardından Event Logs üzerinde sağ tık yapıp Event Logs’u Refresh etmeniz gerekir. Resim 2.10: Sonuçların Event Logs’a yazdırılması Dikkat edecek olursanız yine sonuçlar iki kez yazılmış durumdadır. Demek ki, program Debug modunda çalıştırılmıştır. 2.3. App.Config Dosyası Projede kullanılan, örneğin kullanıcı adı ve şifresi, veri tabanının adı ve şifresi ya da bir veri tabanı dosyasına bağlanıyorsanız, veri tabanının konumu gibi bilgiler değiştirilmek istenebilir. Bu değişiklikler için App.Config dosyası kullanılır. App.Config dosyası bir XML dosyasıdır. XML dosyasının içeriği oluşturulurken yazım kurallarına dikkat edilmelidir. Projenize bir App.Config dosyası eklemek için Project/Add New Item seçeneği seçilip açılan Add New Item iletişim penceresinin Templates bölümünden Application Configuration File seçilip Open düğmesine basılmalıdır. 21
  • 28. Resim 2.11: Add New Item iletişim penceresi Projeye eklenen App.Config dosyasının temel yapısı <Configuration> etiketiyle başlar. </Configuration> etiketiyle biter. Örnek Bu örnekte, oluşturulmuş bir App.Config dosyasındaki verilerin formdaki ilgili yerlere getirilmesi yapılacaktır. Verileri App.config dosyasından alabilmek için önce Solution Explorer penceresinde sağ tık yaparak Add seçeneği üzerine gelince açılan menüden Add New Item seçimini yapınız ve projenize bir “Application configuration file” ekleyiniz. Eklediğiniz App.config dosyasının içeriğini aşağıdaki gibi düzenleyiniz. 22
  • 29. Bu konfigürasyon dosyasına göre kullanacağımız alan anahtarları “ad” ve “soyad”, değerleri ise value ile verilen değerler olacaktır. Şimdi formu resim 2.12’deki gibi tasarlayınız. Resim 2.12: Formun tasarlanması Form tasarlandıktan sonra “OKU” düğmesinin üzerine çift tıklayıp Click() metoduna aşağıdaki kodları yazınız. Burada AppSettingsReader sınıfı ile “oku” adında bir nesne üretilmiş ve AppSettingsReader sınıfının tek metodu olan “GetValue” özelliği kullanılmıştır. Böylece App.config dosyasındaki string veriler alınıp metin kutularına aktarılmış olacaktır. Resim 2.13: Verilerin App.config dosyasından alınıp metin kutularına aktarılması 23
  • 30. 2.4. Trace ve Debug Sınıfıyla Kullanılan Komutlar 2.4.1. Write Bir şarta bağlı olmadan verilen metni Listener koleksiyonuna yazar. 2.4.2. WriteLine Bir şarta bağlı olmadan verilen metni Listener koleksiyonuna yazar ve bir sonraki satıra geçer. 2.4.3. WriteIf Mantıksal şart doğru olduğunda yazılması verilen metni Listener koleksiyonuna yazar. 2.4.4. WriteLineIf Mantıksal şart doğru olduğunda verilen metni Listener koleksiyonuna yazar ve bir alt satıra geçer. 2.4.5. Assert Koşulun yanlış olması durumunda Listener koleksiyonuna belirtilen mesajı yazdırır. Örnek Metin kutularından girilen iki sayı Trace ve Debug sınıfları kullanılarak çeşitli mantıksal işlemlere tabi tutulacaktır. Bu işlem için formunuza iki metin kutusu ve bir buton ekleyiniz. Butonun Click() metoduna aşağıdaki kodları yazınız. Trace ve Debug sınıflarının aynı komutları kullandığını hatırlayınız. 24
  • 31. Projenizi çalıştırıp iki sayı girişi yapınız. Örnekte birinci sayı için 5 rakamı, ikinci sayı için 3 rakamı girilmiştir. Resim 2.14: Verilerin girilmesi İşlemin sonuçlarını Output penceresinde göreceğiniz için Output pencereniz açık değilse açınız. Programda ilk önce Trace.Write ve Trace.WriteLine ile verilen mesajlar yazdırılmaktadır. Trace.Write ile imleç bir alt satıra geçmediğinden Trace.WriteLine ile verilen mesaj yazdırıldıktan sonra imleç bir alt satıra geçmiştir. Daha sonra Trace.WriteIf ve Trace.WriteLineIf ile girilen iki sayı mantıksal olarak karşılaştırılmış ve sonuç doğru olduğu için bu iki komutla verilen mesajlar yazdırılmıştır. İmleç, Trace.WriteLineIf ile bir alt satıra geçmiştir. Trace.Assert ile verilen mesaj, şart doğru olduğundan dolayı Output penceresine yazdırılmamıştır. Resim 2.15: Programın çalışması esnasında Output penceresinin görünümü Programı yeniden çalıştırıp ilk değeri küçük, ikinci değeri büyük girdiğinizde Trace.Assert ile verilen mesaj ekranda gösterilecektir. Şart yanlış olduğundan Trace.Assert komutu devreye girmiştir. 25
  • 32. Resim 2.16: Yeniden değer girişi Resim 2.17: Assert komutuyla verilen mesajın yazdırılması 2.4.6. Fail Olumsuz bir durum oluştuğunda otomatik olarak bir bildiri oluşturur. Bildiri mesajı listener sınıfına yazdırılır ve bir mesaj kutusuyla ekrana gelir. Örnek Bu örnekte de yine iki sayı girişi yapılmakta ve if ile verilen şart kontrol edilmektedir. 26
  • 33. Formunuza üç adet metin kutusu ve bir buton ekleyiniz. Butonun Click() metoduna aşağıdaki kod satırlarını yazınız. Şartta, birinci metin kutusuna girilen sayının sıfır ve sıfırdan küçük olması durumunda Fail komutu ile verilen mesaj ekrana getirilecektir. Aksi taktirde birinci sayı ikinci sayıya bölünecek ve sonuş üçüncü metin kutusuna yazdırılacaktır. Resim 2.18: Verilerin girilmesi Örnek olarak birinci sayıya sıfır (0) değerini giriniz. Gönder düğmesine bastığınızda Fail komutu ile verilen mesaj devreye girecektir. 27
  • 34. Resim 2.19: Fail mesajının ekranda gösterilmesi 28
  • 35. UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ Bu uygulama, elde edilen bilgilerin dosyaya nasıl yazdırılacağını gösteren bir uygulamadır. Elde edilen veriler bu şekilde dosyaya yazdırılabildiği gibi programda oluşan hataların da dosyaya yazdırılması aynı şekilde olacaktır. İşlem Basamakları Öneriler  Yeni bir Windows Application oluşturarak formu resim 2.20’deki gibi tasarlayınız. Resim 2.20: Formun tasarlanması  Formdaki comboBox’ların  Combobox1.Items.Add(“A”); şeklinde kod elemanlarını Properties Window’u satırlarıyla da eleman ekleyebilirsiniz. kullanarak Item özelliğinden giriniz.  Girilen bilgiler butona tıklandığında dosyaya yazdırılacağı için program  “Dosyaya yazdır” butonuna çift tıklayınız. kodlarını Click() metoduna yazınız.  Textbox ve comboBox’lardan girilen bilgileri aktaracağınız değişkenleri  string okulnu,ad,soyad,sinif,sube; string tipte tanımlayınız.  Öğrencinin okul numarasını, adını ve soyadını textBox’tan, sınıfını ve  sube=comboBox2.SelectedItem.ToString(); şubesini comboBox’lardan ilgili değişkenlere aktarınız.  FileStream sınıfından “dosya” adında bir dosya değişkeni  FileStream sınıfı kullanılacağından IO oluşturarak dosya adını “Bilgi.Log” namespace’ini projenize ekleyiniz. olarak veriniz.  Oluşturulan dosya değişkenini işaret ederek TextWriterTraceListener  Bu sınıfı kullanabilmek için de Diagnostics sınıfından yeni bir dinleyici namespace’ini projenize ekleyiniz. oluşturunuz. 29
  • 36.  Oluşturduğunuz dinleyiciyi Listeners  Trace.Listeners.Add(dinleyici); sınıfına ekleyiniz.  Girilen bilgileri Trace sınıfını kullanarak dosyaya yazdırınız.  Girilen bilgiler bir bütün olduğundan dosyada yan yana yazdırabilirsiniz. Resim 2.21: Bilgilerin girilmesi  Belleği boşaltarak dosyayı kapatınız.  Flush() ve Close() fonksiyonlarını kullanınız.  “Bilgi.Log” dosyasını açınız.  Projenizin çalıştığı aktif klasörü açarak bilgilerin dosyaya yazılıp yazılmadığını kontrol ediniz. Resim 2.22: Bilgilerin dosyaya yazılmış hali 30
  • 37. UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ Aşağıda uygulamaları yapınız. Sonuçları öğretmeninize sununuz. Eksikliklerinizi öğretmeninizin rehberliğinde tamamlayınız.  InputBox’tan girilen int tipte 10 adet sayının ortalamasını hesaplatarak Output penceresinde görüntüleyen programı yapınız.  İki ayrı metin kutusundan girilen sayıların mod’u hesaplatılacaktır. Mod işleminin sonucunda kalan sıfır (0) ise sayıları ve kalanı Log dosyaya yazdıran programı yapınız.  Aynı örneğin kalanı sıfır (0) olmayanları Windows Event Log’a yazdıran programı yapınız. 31
  • 38. ÖLÇME VE DEĞERLENDİRME ÖLÇME VE DEĞERLENDİRME Aşağıdaki soruları dikkatlice okuyarak doğru/yanlış seçenekli sorularda uygun harfleri yuvarlak içine alınız. Seçenekli sorularda ise uygun şıkkı işaretleyiniz. Boşlukları uygun şekilde doldurunuz. 1. Trace ve Debug sınıfını kullanabilmek için aşağıdaki namespace’lerden hangisi projeye eklenmelidir? A) IO B) Diagnostics C) Windows.Forms D) Data 2. Aşağıdakilerden hangisi bir TraceListener sınıfı değildir? A) EventLog B) Default C) Config D) TextWriter 3. Projenizle ilgili temel bilgiler değiştirilmek istendiğinde ……………… dosyası kullanılır. 4. Trace ve Debug sınıfları ayrı TraceListener koleksiyonları kullanır. (D/Y) 5. Bir proje Release modda çalıştırıldığında Debug sınıfıyla üretilen sonuçlar görüntülenmez. (D/Y) DEĞERLENDİRME Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız sorularla ilgili konulara geri dönerek tekrar inceleyiniz. Tüm sorulara doğru cevap verdiyseniz diğer öğrenme faaliyetine geçiniz. 32
  • 39. ÖĞRENME FAALİYETİ–3 ÖĞRENME FAALİYETİ-3 AMAÇ Hataların oluşumunu kontrol altına alarak oluşabilecek hatalara karşı tedbirler alabileceksiniz. ARAŞTIRMA  Programcılar isteğe göre program yazdıklarında, programa özel hataları önceden tespit edip ihtimalleri değerlendirerek ve uyarıcı hata mesajları yazarak kullanıcıları uyarabilirler mi? Araştırınız. 3. İSTİSNAİ OLAYLAR Bir programın hatasız yazılmış olması o programın hiç hata vermeyeceği anlamına gelmez. Kullanıcıdan ve diğer durumlardan kaynaklanan sebeplerden dolayı doğru yazılmış kodlar da hata verebilir. Bu durumda, hataların oluşumunu her zaman kontrol altında tutamayabilirsiniz. Ancak, oluşabilecek hatalara karşı tedbirler alabilirsiniz. Yapacağınız bu işleme İstisna Yönetimi denir. 3.1. System.Exception Sınıfı Nesne tabalı programlamada istisnai olaylar sınıflarla simgelenir. Tüm istisnai olay sınıfları System namespace’inin Exception sınıfından türetilmelidir. Böylece tüm olaylar Exception sınıfının birer alt sınıfıdır. SystemException ve ApplicationException, Exception sınıfından türetilir. Nesne tabanlı programlamanın çalışma zamanı sistemi (CLR) tarafından üretilen sınıfları SystemException ve uygulama programları tarafından üretilen sınıfları da ApplicationException sınıfından desteklenen sınıflardır. SystemException sınıfından türetilen standart istisnai olaylardan bazıları derleyicide tanımlanmıştır. Örneğin, sıfıra bölme hatası için DivideByZeroException sınıfı derleyicinin içerisinde varsayılan olarak vardır. 3.2. Try-Catch Kullanımı En sık kullanılan hata ayıklama kod bloğudur. Oluşabilecek hatalar try bloğunda, hata durumunda işletilecek kodlar ise catch bloğunda yazılır. Hata olmaması durumunda catch bloğundaki kodlar çalıştırılmaz. Hata olması durumunda ise, hata oluşan kod satırından catch bloğuna kadar olan kod satırları işletilmez. Catch bloğundaki kod satırları işletilir. 33
  • 40. Try-Catch bloğu kullanım şekli şöyledir; Try { // Hata oluşturabilecek olan kodlar } catch { // Hata oluşursa işleyen kodlar } Örnek 3 elemanlı bir int diziye eleman girişi yapılmaktadır. Eleman sayısından daha fazla eleman girişi yapılmak istendiğinde hata oluşmaktadır. Oluşan hata sonucunda da uyarı mesajı ekrana gelmektedir. Bir console uygulaması başlatarak aşağıdaki kodları yazınız. 34
  • 41. Başlangıçta tipi int olan “sayılar” adında 3 elemanlı bir dizi tanımlanmaktadır. Elemanların girişi try bloğunda, hata mesajı da catch bloğunda yazılmıştır. Dizi 3 elemanlı olarak tanımlanmasına rağmen for döngüsüyle diziye 10 eleman aktarılmak istenmektedir. Dizi indisi sınırına kadar elemanlar diziye girişi yapıldığı için konsolda gösterilecektir. Ancak, dizi indis sınırı aşıldığı anda catch bloğu devreye girecektir. Catch bloğu IndexOutOfRangeException sınıfıyla kullanılmıştır. Böylece programın konsol görüntüsü resim 3.1’deki gibi olur. Resim 3.1: Uygulamanın konsol görüntüsü Oluşabilecek hatalarda sistemin içinde yer alan hata mesajlarını catch bloğunda göstermek için catch ile birlikte Exception parametresi kullanılır. Örnek Bir öğrencinin üç notu text kutularından girilerek ortalaması hesaplanıp yine bir text kutusuna yazdırılmak istenmektedir. Ancak kullanıcının not girişlerinde rakam yerine metin girmesi hataya sebep olmaktadır. Bu örnek için önce formunuzu resim 3.2’deki gibi tasarlayınız. Resim 3.2: Formun tasarlanması 35
  • 42. Notlar girildikten sonra hesaplanması için “Ortalamayı hesapla” düğmesine tıklanacaktır. Bunun için, tasarım anında düğme üzerine çift tıklayınız ve Click() metoduna aşağıdaki kodları yazınız. Not girişleri try bloğunda yapılmaktadır. Rakam yerine harf olarak not girildiğinde catch bloğu devreye girecektir. Catch bloğunda Exception sınıfının ürettiği hata mesajı “hata” isimli bir değişkende tutulmaktadır. Oluşan hata MessageBox ile kullanıcıya gösterilecektir. Veri girişinde notlar düzgün olarak girildiğinde hata meydana gelmez (Resim 3.3). Resim 3.3: Hata oluşmaz Ancak rakam yerine yazıyla not girişi yapılırsa hata oluşacaktır. Mesaj kutusundaki ikinci satır sistemin hata mesajıdır (Resim 3.4). 36
  • 43. Resim 3.4: Hata oluşur Oluşabilecek birden fazla hata için farklı tipte catch bloğu kullanılabilir. Eğer hata herhangi bir catch bloğunda yakalanırsa diğer catch blokları işletilmez. Örnek Aynı tipte iki dizi tanımlı elemanlarının birbirine bölünmesi uygulaması yapılacaktır. Oluşabilecek hatalar göz önüne alınmalıdır. Program kodları aşağıdadır. 37
  • 44. Aynı tipte iki farklı dizi tanımlanarak ilk elemanları verilmiştir. Birinci dizinin eleman sayısı 8, ikinci dizinin eleman sayısı 6’dır. Birinci dizi elemanlarının ikinci dizinin elemanlarına bölmek suretiyle sonuçlar konsolda yazdırılacaktır. “for” döngüsü birinci dizinin eleman sayısı kadar çalışacağı için ikinci dizinin eleman sayısını geçince program hata verecektir. Daha öncesinde ikinci dizinin elemanlarında sıfır (0) olduğu için sıfıra bölme hatası meydana gelir. İki tip hata olduğu için iki adet catch bloğu kullanılmıştır. Birinci catch bloğu sıfıra bölme hatasıyla ilgili mesajı göstermekte, ikinci catch bloğu da dizi indis sınırının aşılmasıyla ilgili mesajı göstermektedir. Bunun sonucunda konsol görüntüsü Resim 3.5’teki olur. Resim 3.5: Uygulamanın konsol görüntüsü 3.3. Finally Kullanımı Hata oluşması durumunda işletilecek kod satırları yoksa programın kırılmasını engellemek için finally bloğu kullanılmalıdır. Finally bloğu hata olsada olmasa da çalışan bir bloktur. Finally bloğunun kullanım şekli şöyledir; Try { // Hata oluşturabilecek olan kodlar } finally { // Her koşulda çalışacak kodlar } Örnek Bir işçinin bir günde çalıştığı toplam saat ve bir saatlik ücreti text kutularından girilerek alacağı parayı hesaplatan program için form tasarımı resim 3.6’daki gibidir. 38
  • 45. Resim 3.6:Formun tasarımı Hesapla düğmesine tıklanınca işçi maaşı hesaplatılacağı için düğmenin Click() metodu aşağıdaki gibidir. Programda işlem yapan satırlar try bloğunda yazılmıştır. “finally” bloğunda yazılan kod satırları her halde çalıştırılacağı için text kutuları boşaltılarak ve birinci text kutusu aktif hale getirilerek yeni veri girişi sağlanmaktadır. Programın çalıştırılıp veri girişinin yapılması resim 3.7’deki gibi olur. 39
  • 46. Resim 3.7: Veri girişinin yapılması Veri girişi yapılıp “Hesapla” düğmesine tıklandığında işçinin maaşı hesaplanıp üçüncü text kutusuna yazdırılır ve finally bloğu işletilir. Resim 3.8: Hesaplama yapılıp finally bloğu işletilir. Örnek Bu örnekte sıfıra bölme hatası, dizi indis sınırlarına taşılmasıyla ilgili iki adet catch bloğu ve işlemin bittiğini belirten bir finally bloğu kullanılmıştır. Uygulamada iki adet class bulunmaktadır. “Class1” adlı sınıfta for döngüsüyle ikinci class’a yönlendirme yapılmaktadır. Bu işlem üç defa gerçekleşecektir. “finallykullan” adlı sınıfta ana sınıftan gelen veri “deger” adlı değişken tarafından karşılanmakta ve switch akış kontrol deyimiyle şartlar kontrol edilmektedir. 40
  • 47. 41
  • 48. “Case 0” şartında sayı sıfıra bölünmek istendiği için DivideByZeroException sınıfından bir hata oluşur. Case 1 şartındaysa dizi 3 elemanlı olmasına rağmen dördüncü eleman olarak sayı girişi yapılmak istenmekte ve IndexOutOfRangeException sınıfından bir hata oluşur. İlgili hata mesajları konsola yazdırılır. Son bloğumuz olan finally bloğu ise her halde çalışacaktır. Uygulama çalıştırıldığında resim 3.9’daki sonuçlar elde edilir. Resim 3.9: Uygulamanın konsol görüntüsü 3.4. Throw Rethrow Kullanımı 3.4.1. Throw Kullanımı Throw hatayı fırlatma anlamına gelir. Bazı durumlarda hatalar bilerek oluşturulmak istenebilir. Bunun için, “throw” komutu kullanılır. “throw” ifadesinin kullanıldığı noktada program durarak istenilen istisnayı üretir. Şimdi throw’un kullanımına basit bir örnekle bakalım. Örnek Bu örnekte program akışının işleyişi gösterilmektedir. Try bloğunda önce fırlatmadan önceki mesaj yazdırılır. Sıfıra bölme hatası olan DivideByZeroException sınıfı throw ile fırlatılarak program akışı catch bloğuna yönlendirilmiştir. Try ve catch bloklarından sonra da bir mesaj yazdırılarak işlemin bittiği belirtilmiştir. 42
  • 49. “throw”un kullanımı basit olarak bu şekilde gerçekleşmektedir. Uygulama çalıştırılırsa sonuç resim 3.10’daki gibidir. Resim 3.10: Basit bir throw örneği Örnek Konsoldan girilen sayının bölünüp bölünemediğini test eden program kodu aşağıdaki gibidir. Temel sınıftan girilen sayı yaz() sınıfına gönderilmektedir. Sayıyı göndermeden önce sayının int tipinde olmaması durumunda da temel sınıfta Exception sınıfı kullanılarak oluşabilecek hata bir mesajla gösterilmektedir. Girilen sayı sıfır ise yaz() metodunda throw ile bir fırlatma gerçekleştirilerek işlemin sonucunda sıfıra bölme hatasının olduğu belirtilmektedir. Program kodları aşağıdaki gibidir. 43
  • 50. Program çalıştırılıp sıfırdan farklı bir sayı girildiğinde hata oluşmayacak ve ekran görüntüsü resim 3.11’deki gibi olacaktır. Resim 3.11: Sıfırdan farklı sayı girilmesinde hata oluşmaz. 44
  • 51. Ancak, sayı girişinde sıfır(0) girilirse hata oluşacaktır. Resim 3.12: Sıfır girilirse hata oluşur. Örnek Tasarlanan formdaki tüm text kutularının zorunlu olarak doldurulması gerektiğiyle ilgili bir uygulamanız olsun. Tamam düğmesine tıklanınca tüm text kutularının doldurulup doldurulmadığı test edilsin. İlgili düğmenin Click() metodu aşağıdaki gibidir. Eğer, “tckimliknu”,”annesoyad” veya “verginu” alanlarından biri girilmezse throw ile hata fırlatılıp mesaj kutusunda da bu hata gösterilecektir. Bilgilerin tamamı eksiksiz girildiğindeyse else yapısındaki mesaj kullanıcıya gösterilecektir. 45
  • 52. Resim 3.13: Bilgilerin eksik girilmesi durumu Resim 3.14: Bilgilerin tamamının girilmesi durumu 3.4.2. Rethrow Kullanımı Rethrow hatayı yeniden fırlatma anlamına gelir. Rethrow kullanımı birden fazla catch bloğu kullanıldığı zaman uygulanır. Bir catch bloğunda yakalanan istisnai olay diğer catch bloğunda da yakalanabilsin diye yeniden fırlatılır. Bir istisnai olayı yeniden fırlatmak için açıkça bir istisnai durum belirtmeden yalnızca throw; yazmak yeterli olacaktır. Örnek Aynı tipte ancak, eleman sayıları farklı olan iki dizi elemanlarının birbirlerine bölünmesi durumunda oluşabilecek hataları gösteren program kodu aşağıdaki gibidir. 46
  • 53. Program birinci dizi elemanlarını ikinci dizi elemanlarına bölmektedir. İşleyiş, temel sınıftaki try bloğundan rethrow_kullan sınıfının yürüt() metoduna yönlendirilmektedir. İkinci dizinin tanımlı elemanlarında sıfır (0) olduğu için sıfıra bölme hatası meydana gelmektedir. Ancak ikinci dizi elemanları birinci dizi elemanlarından az olduğu için birinci dizideki elemanı bölecek sayı olmadığından dizi indisi sınır aşımı hatası meydana gelir. Birinci dizinin bölünecek başka bir elemanı daha olmasından dolayı tekrar dizi sınır aşımı 47
  • 54. gerçekleşmesin diye yeniden fırlatma gerçekleştirilir. Böylece program akışı temel sınıftaki catch bloğuna yönlendirilerek hata mesajıyla kullanıcı uyarılır. Uygulamanın çalıştırılması sonucunda ekran görüntüsü resim 3.15’teki gibi olmaktadır. Resim 3.15: Rethrow kullanımı ekran görüntüsü 48
  • 55. UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ İşlem Basamakları Öneriler  Yeni bir Windows Application oluşturarak formu Resim 3.16’daki gibi tasarlayınız. Resim 3.16: Formun tasarlanması  Girilen bilgiler “HESAPLA” butonuna tıklandığında işleme  “HESAPLA” butonunun üzerine fareyle çift tabi tutulacağından program tıklayınız. kodlarını Click() metoduna yazınız.  Metin kutularından girilen bilgileri aktaracağınız  int vize,final; değişkenleri int tipinde, double ort; ortalamaları için kullanacağınız değişkeni ise double tipte tanımlayınız.  try  Yapılacak işlemleri try bloğu { içine yazınız. }  Metin kutularından girilen  vize=int.Parse(textBox1.Text); bilgileri int veri tipine çevirerek final=int.Parse(textBox2.Text); ilgili değişkenlere aktarınız.  catch(DivideByZeroException) {  Sıfıra bölme hatası için bir catch bloğu tanımlayınız. } 49
  • 56.  MessageBox.Show(“Sıfıra bölme hatası”);  Sıfıra bölme hatası gerçekleştiğinde kullanıcıya verilecek mesajı mesaj kutusunda gösteriniz. Resim 3.17: Sıfıra bölme hatası  Bilgilerin eksik girilmesine  catch(Exception hata) karşı bir catch bloğu daha { tanımlayarak Exception parametresiyle bir hata } değişkeni belirtiniz.  MessageBox.Show(“Bilgiler eksik girildin” +hata.Message,”Dikkat”);  Eksik bilgi girilmesiyle oluşacak hatayı mesaj kutusuyla kullanıcıya gösteriniz. Resim 3.18: Bilgilerin eksik girilmesi  try bloğunda iken eğer ilk  if(vize==0) metin kutusuna sıfır girilirse { throw ile throw new DivideByZeroException; DivideByZeroException istisna } durumunu fırlatınız. 50
  • 57.  Metin kutularından herhangi  if ((vize.ToString()==””)||(final.ToString()==””)) birine bilgi girilmemesi { durumunda throw ile Exception throw new Exception; istisna durumunu fırlatınız. }  Daha sonra vize ve final notlarını toplayıp ikiye bölerek  ort=(vize+final)/2; üçüncü metin kutusuna textBox3.Text=ort.ToString(); yazdırınız.  MessageBox.Show(“İşlem bitti”);  Her halde çalışacak bir finally bloğu oluşturunuz ve “İşlem bitti” mesajını verdiriniz. Resim 3.19: finally bloğuyla verilen mesaj 51
  • 58. UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ Aşağıdaki maddeleri dikkate alarak uygun projeyi hazırlayınız.  Bir Windows Application başlatınız.  Bu uygulamada öğrenciye ait ad soyad, T.C. kimlik numarası, okul numarası, baba adı ve bir dersten aldığı 3 not girilecektir.  Bu notlara göre ortalaması hesaplatılıp başka bir metin kutusuna yazdırılacaktır.  Her metin kutusunda Enter tuşuna basıldığında bir sonraki metin kutusuna geçilecektir.  Oluşabilecek hatalara karşı şu önlemler alınmalıdır.  Ad soyad alanı mutlaka doldurulmalıdır.  T.C. kimlik numarası alanı 11 haneden küçük ve 11 haneden büyük olmamalıdır.  Okul numarası alanı 1 haneden küçük ve 4 haneden büyük olamamalıdır.  Baba adı alanı mutlaka doldurulmalıdır.  Not 1, Not 2 ve Not 3 alanı mutlaka rakam olmalı ve notlar 0 ile 100 arasında olmalıdır.  Aşağıdaki ekran görüntülerini dikkate alarak programı yazınız. Resim 3.20: Formun tasarlanmış hali 52
  • 59. Resim 3.21: Ad Soyad hata mesajı Resim 3.22: T.C. kimlik numarası hata mesajı Resim 3.23: Okul numarası hata mesajı Resim 3.24: Baba adı hata mesajı Resim 3.25: Notlar için hata mesajı 53
  • 60. Resim 3.26: Projenin çalışır hali 54
  • 61. ÖLÇME VE DEĞERLENDİRME ÖLÇME VE DEĞERLENDİRME Aşağıdaki soruları dikkatlice okuyarak doğru/yanlış seçenekli sorularda uygun harfleri yuvarlak içine alınız. Boşlukları uygun şekilde doldurunuz. 1. Oluşabilecek hataları kontrol altına alma olayına …………… yönetimi denir. 2. Tüm istisnai olay sınıfları System namespace’inin Exception sınıfından türetilmek zorundadır. (D/Y) 3. try-catch bloğu oluşabilecek hatalar ve bu hatalara karşı çalıştırılacak kodların yazıldığı bir bloktur. (D/Y) 4. Her koşulda çalışacak kod satırları …………….. bloğunda yazılır. 5. Birden fazla catch bloğu kullanıldığında eğer hata herhangi bir catch bloğunda yakalanırsa diğer catch blokları hata yakalanmasına rağmen yine de çalışır (D/Y) DEĞERLENDİRME Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız sorularla ilgili konulara geri dönerek tekrar inceleyiniz. Tüm sorulara doğru cevap verdiyseniz diğer öğrenme faaliyetine geçiniz. 55
  • 62. MODÜL DEĞERLENDİRME PERFORMANS TESTİ (YETERLİK ÖLÇME) Modül ile kazandığınız yeterliği aşağıdaki kriterlere göre değerlendiriniz. DEĞERLENDİRME ÖLÇÜTLERİ Evet Hayır  Bir Windows application formu tasarladınız mı?  Sayıların değişken türlerini sınırlarına göre seçtiniz mi?  Değişkenlerle işlem yaptınız mı?  Döngü tiplerini kullanabildiniz mi?  İşlem sonuçlarını metin kutusunda yazdırdınız mı?  İşleyişi satır satır test ettiniz mi?  comboBox’a eleman eklediniz mi?  Bilgileri dosyaya yazdırdınız mı?  Uygun namespace’leri projeye eklediniz mi?  Dinleyici oluşturdunuz mu?  Dinleyiciyi Listeners sınıfına eklediniz mi?  Trace sınıfıyla dosyaya bilgi yazdırdınız mı?  Belleği boşalttınız mı?  Dosyayı kapattınız mı?  Projenin çalıştığı klasörü tespit ettiniz mi?  Hata ayıklama için try-catch bloğu kullandınız mı?  Her halde çalışacak finally bloğu tanımladınız mı?  Sıfıra bölme ahatsı için catch bloğu tanımladınız mı?  Hataya göre uygun hata mesajları yazdırdınız mı?  Oluşabilecek hatayı fırlattınız mı? DEĞERLENDİRME Yaptığınız değerlendirme sonucunda eksikleriniz varsa öğrenme faaliyetlerini tekrarlayınız. Modülü tamamladınız, tebrik ederiz. Öğretmeniniz size çeşitli ölçme araçları uygulayacaktır, öğretmeninizle iletişime geçiniz. 56
  • 63. CEVAP ANAHTARLARI CEVAP ANAHTARLARI ÖĞRENME FAALİYETİ–1 CEVAP ANAHTARI 1 Doğru 2 Yanlış 3 Restart 4 Run to Cursor 5 Doğru 6 TaskList 7 F9 8 immediate 9 D 10 C ÖĞRENME FAALİYETİ–2 CEVAP ANAHTARI 1 B 2 C 3 app.config 4 Yanlış 5 Doğru ÖĞRENME FAALİYETİ–3 CEVAP ANAHTARI 1 istisna 2 Doğru 3 Doğru 4 finally 5 Yanlış 57
  • 64. KAYNAKÇA KAYNAKÇA  SCHILDT Herbert, “Herkes için C#”, Alfa Basım Yayım Dağıtım Ltd.Şti, İstanbul 2005.  DEMİRLİ Nihat, İNAN Yüksel, “Visual C#.NET 2005”, Palme Yayıncılık, Ankara 2006.  Karagülle İHSAN, “Visual C#.Net Başlangıç Rehberi”, Türkmen Kitabevi, İstanbul 2004.  YANIK Memik, “Microsoft Visual C#.NET”, Seçkin Yayıncılık, Ankara, 2004.  ZENGİN Abdullah, “C# 2005”, Nirvana Yayınları, Ankara 2006.  ZEKİ Yasemin, “Adım Adım C++ Uygulamaları”, Nirvana Yayınları, Ankara 2006.  www.csharpnedir.com  www.msakademik.net 58