Hata Ayıklamanın Ötesi... (Assertion) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 1

Benzer belgeler
Nesne Yönelimli Programlama

Nesne Yönelimli Programlama

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Nesne Yönelimli Programlama

Nesne Yönelimli Programlama

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Sunum İçeriği. Programlamaya Giriş

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

BİL-142 Bilgisayar Programlama II

BİL-141 Bilgisayar Programlama I (Java)

Programlama Dili Prensipleri. Lab Notları 4

İstisnalar (Exceptions) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 8 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

11.DERS Yazılım Testi

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Erişim konusunda iki taraf vardır:

Java da Program Denetimi ve Operatörler

Öğr. Gör. Serkan AKSU 1

Bilgisayarda Programlama. Temel Kavramlar

HSancak Nesne Tabanlı Programlama I Ders Notları

Üst Düzey Programlama

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

7. HAFTA. Erişim Belirleyiciler

Programlama Dillerinde Kullanılan Veri Tipleri

J A V A D A P R O G R A M D E N E T İ M İ V E O P E R A T Ö R L E R

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

HSancak Nesne Tabanlı Programlama I Ders Notları

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

Spring Giriş Eğitimi

Java Dersi. Altuğ Bilgin Altıntaş

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

ALGORİTMA VE PROGRAMLAMA I

Yazılım Kodlama ve İ simlendirme Standartları v1.0

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Java String İşlemleri

3.Hafta. . Kontrol Deyimleri/İfadeler

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Balon & Banka Teslim tarihi: 17 Kasım 2008

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

HATA YAKALAMAK VE AYIKLAMAK GİRİŞ HATA AYIKLAMA. Hata Yakalamak ve Ayıklamak

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Nesneye Yönelik Programlama (OOP) 7.Hafta

MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

10.DERS Yazılım Gerçekleştirme

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

Fatura Dinamik Kodlama İyileştirmeleri

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

Matematiksel Operatörler

Java da İşleçler, Ders #3 (4 Kasım 2009)

Bitirme Ödevi Sunumu PLATFORM BAĞIMSIZ BENZETİM PROGRAMI. Danışman : Yrd.Doç.Dr. D Feza BUZLUCA Gökhan Akın ŞEKER

Karşılaştırma İşlemleri ve Koşullu İfadeler

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Lambda İfadeleri (Lambda Expressions)

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

C#(Sharp) Programlama Dili

JAL IN İNTERNET TEN İNDİRİLMESİ VE KURULMASI

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

PROGRAMLAMA DİLLERİ. Programlama Dilleri Programlama Dillerinin Önemi Dilleri Sınıflandırılması Anlambilim BNF Notasyonu Kontrol Deyimleri

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Akış Kontrol Mekanizmaları

COM API v.1.1 BELGE SÜRÜMÜ : 1.1

Üst Düzey Programlama

Data Structures Lab Güz

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

Java Temel Özellikleri

Bölüm 10: PHP ile Veritabanı Uygulamaları

Diziler İndisli Değişkenler

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir?

BİL BİLGİSAYAR PROGRAMLAMA (JAVA)

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 9

BBS515 Nesneye Yönelik Programlama. Ders 3 Zümra Kavafoğlu

ÜNİT E ÜNİTE KONTROL DEYİMLERİ KARAR YAPILARI. IF Deyimi GİRİŞ

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Transkript:

Hata Ayıklamanın Ötesi... (Assertion) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 1

Assertion Assertion kelimesinin Türkçe karşılığı iddia, birşeylerin doğruluğunu ispat etmek anlamlarına gelir. Assertion özelliği, J2SE 1.4 versiyonu ile birlikte gelen yeni bir özelliktir. Bu yeni gelen özellik sayesinde hata ayıklama (debugging) ve yazılan kodların doğruluğunu ispat etme süreçleri çok daha basite indirgenmektedir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 2

Hata Ayıklama (Dubugging) - I Hata ayıklamak (debugging) ne demek? Hata ayıklama işlemi, hatanın algılanmasından sonra gelen bir süreçtir ve süreci uygulamak için bir çok yöntem bulunur. En bilindik yöntemlerden biri hatalı olduğuna inanılan kod yığınlarının arasına System.out.println() komutları serpiştirilerek uygulamanın akışı takip edilmeye çalışılır. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 3

Hata Ayıklama (Dubugging) - II Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 4

Hata Ayıklama (Dubugging) - III Diğer yöntem ise "Java Platform Debugger Architecture" mimarisini kendi içerisine entegre etmiş bir editör ile çalışmaktır. Eclipse VisualSlickEdit JBuilder CodeGuide gibi... Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 5

Assertion özelliğini kullanmak Assertion özelliğini yazılan kodların içerisine yerleştirmek çok kolaydır. Assertion, koşullar gerçekleşmediği zaman hata fırlatan bir mekanizmadır. Assertion özelliğini kullanmanın iki yolu vardır. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 6

Assertion özelliğini kullanmak Birinci Yol Birinci yol sadece basit bir ifadeden oluşur. assert ifade ; Yukarıda belirtilen ifade true ise sorun çıkmaz ama şayet bu ifade false ise sorun var demektir ve hata (AssertionError) fırlatılır. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 7

Örnek - Birinci Yol Yukarıdaki assert ifadesinin kullanılmasındaki amaç, Asinifi sınıfı tipindeki a referasının acaba Asinifi sınıfına ait bir nesneye mi bağlandığını kontrol etmekdir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 8

Assertion özelliğini kullanmak İkinci Yol assert ifade_1 : ifade_2; Yukarıdaki ifadenin anlamı şudur: Eğer ifade_1 false değeri geri dönerse, ifade_2 deki değeri hata olarak fırlat. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 9

Örnek - İkinci Yol Bu gösterimimizde a referansı eğer Asinifi tipinde bir nesneye bağlanmamış ise yeni bir AssertionError tipinde bir hata fırlatılacaktır. Yanlız buradaki fark, bu AssertionError sınıfının yapılandırıcısına bizim bazı bilgiler gönderiyor olmamızdır. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 10

Assertion ve derleme (compile) - I Assertion özelliği Java programlama diline yeni bir anahtar kelime kazandırmıştır. Java programlama dili daha evvelden yazılmış diğer uygulamalar için bir tehlike oluşturabilir. Bu tehlike geriye doğru uyumluluğun kalkması (backwards compatibility) yönündedir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 11

Assertion ve derleme (compile) - II Yukarıdaki örneğimiz henüz assertion özelliği ortalarda yokken yazılmış olsun. Bu uygulamamızda, kullanıcıdan gelen ilk değeri String tipinde olan ve assert isimli bir referansa bağlanmaktadır. Yazılan Java kodlarının içerisinde assert anahtar kelimesi referans adı olarak geçiyorsa ve assertion özelliğini kullanmak istemiyorsanız, kısacası ben eski usül çalışmak istiyorum diyorsanız bazı ayrıntılara dikkat etmeniz gerekir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 12

Assertion ve derleme (compile) - III Assertion özelliğini kullanmamak için... > javac -source 1.3 Assertion özelliğini kullanmak için... > javac -source 1.4 Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 13

Assertion özelliğini nasıl kontrol ederim? - I Assertion özelliğinin kıymetli kılan en önemli faktör, bu özelliğin çalışma esnasında kapatılıp açılabiliyor olmasıdır. Örneğin bir uygulamanın geliştirilmesi esnasında assertion özelliği açık tutulabilir. Tahmin edilebileceği üzere assertion özelliğin açık tutulması belli bir performans kaybına sebebiyet verecektir. Fakat uygulamanın gelişimi tamamlandığı zaman assertion özelliği çalışma anında kapıtılarak (biraz sonra gösterilecek) bu performans kaybı engellenmiş olur. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 14

Assertion özelliğini nasıl kontrol ederim? - II AssertTestBir.java uygulamasını javac -source 1.4 komutu ile derledikten sonra aşağıdaki gibi çalıştırılırsa... > java AssertTestBir > java -ea AssertTestBir Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 15

Assertion özelliğini nasıl kontrol ederim? - III Önce derleme (compile) aşaması > javac -source 1.4 AssertTestIki.java Sonra çalıştırma (run) aşaması > javac -ea AssertTestIki 5 Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 16

Paket kontrolleri Şimdi aşağıdaki gibi bir yapımız olsun. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 17

Tüm paketler için assertion özelliği açık AssertPaketTest sınıfının içerisindeki tüm paket ve bunlar içerisindeki sınıflar için assertion özelliğinin açık (etkin) olması isteniyorsa aşağıdaki komutun yazılması yeterli olacaktır. > java -ea AssertPaketTest Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 18

Toplama işlemlerinde bir hata var sanki... Assertion özelliğinin sadece com.kodcu.math.toplama sınıfı için açılmak istenirse. > java -ea:com.kodcu.math.toplama AssertPaketTest Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 19

Sadece com.kodcu.math.* altındaki tüm sınıflar için assertion özelliği açmak istersek... > java -ea:com.kodcu.math AssertPaketTest > java -ea:com.kodcu.math... AssertPaketTest Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 20

Assertion özelliği açık mı? Kapalı mı? Yukarıdaki sınıfımızın yapılandırıcısındaki assert anahtar kelimesinin olduğu satıra yakından bakacak olursak, burada bir karşılaştırma değil bir atama olduğunu görürüz. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 21

AssertionError istisnalarını yakalamak Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 22

Kural : Komut satırından girilmiş olan verilerin kontrolü için assertion özelliği kullanılmamalıdır. Assertion özelliği, uygulamanın kendi içerisinde tutarlılığını sağlamak için kullanılmalıdır; kullanıcının uygulama ile olan tutarlılığını sağlamakiçindeğil. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 23

Kural : Assertion özelliği, if ( koşul )... kullanılmamalıdır. yerine Kritik nokta, çalışma anında assertion özelliğinin kapatılması ile göz ardı edilir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 24

Kural : public erişim belirliyicisine sahip olan yordamlara gönderilen parametreleri düz şekilde kontrol etmek amacıyla assertion özelliği kullanılmamalıdır. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 25

Kural : Kullanıcıdan gelen verilerin mantık çercevesinde olup olmadığı assertion özelliği ile kontrol edilmemelidir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 26

Kural : Uygulamanın genel akışında assertion özelliğinin bir rolü olmamalıdır. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 27

Kural : private erişim belirliyicisine sahip olan yordamlara gönderilen parametrelerin kontrolünde assertion özelliği kullanılabilir. private erişim belirleyicisine sahip olan yordamlar dışarıdan ulaşılamaz. Bu tip yordamlar işlerin esas yapıldığı ve yanlış parametre gelmesinin affedilemeyeceği yerlerdir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 28

Kural : Olmaz ise olmaz durumlarını yakalamak için assertion özelliği kullanılabilir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 29

Sorular... Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 30