p Önemli bir konu: önşartlar and hedefşartlar. p Bir metodun neyi netice vereceğinin belirlenmesinin yöntemleridirler. Önşartlar ve Hedefşartlar Java Kullanarak Veri Yapıları ve Diğer Nesneler
Önşartlar ve Hedefşartlar Bir programcı sık sık bir metodun nasıl çalıştığını belirtmeden kesin olarak neyle neticeleneceğinden haberdar etmelidir. Bunun oluşabileceiği bir durum düşünebiliyor musunuz ?
Örnek p Bir programlama takımının başkanısınız ve projenin bir parçası olarak programcılarınızdan birinden bir metod yazmasını istiyorsunuz. BURADA SİZDEN YAZMANIZI İSTEDİĞİM BİR METOD İÇİN GEREKENLER VAR. GEREKENLERİ YAPTIĞI SÜRECE BU METODUN NASIL ÇALIŞTIĞI BENİ İLGİLENDİRMİYOR.
Önşartlar ve Hedefşartlar nelerdir? p Bu tür gereklilikleri belirtmenin bir yolu da metod hakkında bilgi veren ifadeler kullanmaktır. p Önşart ifadeleri metod çağrılmadan önce sağlanması gereken şartları belirtir. p Hedefşartlar ifadeleri metod işini bitirdikten sonra neyin doğru olması gerektiğini belirtir.
Örnek // Önşart: x >= 0. // Hedefşart: x in karekökü çıktı olarak yazılacak public void writeSqrt( double x)...
Örnek // Önşart: x >= 0. // Hedefşart: x in karekökü // çıktı olarak yazılacak. public void writeSqrt( double x)... } p Önşart ve hedefşart programınızda açıklama olarak görünecektir. p Genellikle metodun uygulamasından önce gelirler.
Örnek // Önşart: x >= 0. // Hedefşart: x in karekökü çıktı olarak // yazılacak. public void writeSqrt( double x)... } p Bu örnekteki önşart metod çağrıldığında, x >= 0 ın doğru olmasını gerektirir. x >= 0 ın doğru olmasını gerektirir.
Örnek writeSqrt( -10 ); writeSqrt( 0 ); writeSqrt( 5.6 ); Aşağıdaki metodların hangileri önşartı sağlar ?
Örnek Aşağıdaki metodların hangisi önşartı sağlar? İkinci ve üçüncü çağırmalarda değişken sıfırdan büyük ya da eşit olduğu için önşart sağlanmaktadır. büyük ya da eşit olduğu için önşart sağlanmaktadır. writeSqrt( -10 ); writeSqrt( 0 ); writeSqrt( 5.6 );
Örnek Fakat ilk ifadede değişken sıfırdan küçük olduğu için önşart ihlal edilmiştir. writeSqrt( -10 ); writeSqrt( 0 ); writeSqrt( 5.6 ); Aşağıdaki metodların hangisi önşartı sağlar?
Örnek // Önşart: x >= 0. // Hedefşart: x in karekökü çıktı olarak // yazılacak. public void writeSqrt( double x)... } p Hedefşart her zaman metodu neyi netice vereceğini belirler. Bu durumda, metodun geri dönüşümü x in karekökünün yazılması olacaktır.
Başka Bir Örnek // Önşart: Harf büyükharf ya da küçük harf olacak // ve ( 'A'... 'Z' veya 'a'... 'z‘) aralığında olacak. // Hedefşart: Harf; sesli bir harfse metod true // döndürecek, değilse false döndürecek public boolean isVowel( char letter )...
Başka Bir Örnek isVowel( 'A' ); isVowel(' Z' ); isVowel( '?' ); Bu metodlar çağrılınca döndürülecek değerler nelerdir?
Başka Bir Örnek isVowel( 'A' ); isVowel(' Z' ); isVowel( '?' ); true false Bilemeyiz, çünki önşart ihlal edilmiştir. Bu metodlar çağrılınca döndürülecek değerler nelerdir?
Başka Bir Örnek isVowel( '?' ); Önşartın ihlal edilmesi programın çökmesine bile sebep olabilir. çökmesine bile sebep olabilir. Bu metodlar çağrılınca döndürülecek değerler nelerdir?
Herzaman önşartın sağlandığından emin olunuz. p Metodu çağıran programcı, metod çağrıldığında önşartın sağlanmasını teminat altına almaktan sorumludur. BU NOKTADA PROGRAMIM SİZİN METODUNUZU ÇAĞIRIYOR, VE BEN ÖNŞARTIN SAĞLANMASINI TEMİNAT ALTINA ALIYORUM.
... böylece hedefşart doğru olur ve metod sona erer. p Metodu yazan programcı önşartın sağlandığına güvenerek, metodun sonunda hedefşartın sağlanmasını teminat altına alır. SONRA BENİM METODUM ÇALIŞACAK VE BİTTİĞİNDE HEDEFŞART DOĞRU OLACAK GARANTİSİNİ VERİYORUM.
Quiz Diyelim ki bir metod çağırdınız ve önşartı sağlaması hususunu ihmal ettiniz. Bu durum istemeyerek 40 günlük bir sele veya başka bir felakete yol açacak olsa bunun sorumlusu kimdir? ¬Siz Sele dair metodu yazan programcı Hz. Nuh(as)
Quiz Diyelim ki bir metod çağırdınız ve önşartı sağlaması hususunu ihmal ettiniz. Bu durum istemeyerek 40 günlük bir sele veya başka bir felakete yol açacak olsa bunun sorumlusu kimdir? ¬Siz Metodu çağıran programcı önşartın sağlanmasını teminat almakla yükümlüdür. Metodu çağıran programcı önşartın sağlanmasını teminat almakla yükümlüdür.
Diğer taraftan dikkatli programcılar bu kurallara da uymalıdır p Bir metod yazarken önşart ihlalini tespit edecek hertürlü eforu sarfetmelisiniz. p Önşartın ihlal edildiğini tespit ettiğiniz zaman hata mesajı yazdırıp programı durdurmalısınız.
Diğer taraftan dikkatli programcılar bu kurallara da uymalıdır: p Bir metod yazarken önşart ihlalini tespit edecek hertürlü eforu sarfetmelisiniz. p Önşartın ihlal edildiğini tespit ettiğiniz zaman hata mesajı yazdırıp programı durdurmalısınız... p Bir felakete sebep olmaktansa
Örnek // Önşart: x >= 0. // Hedefşart: X in karekökü çıktı olarak yazılacak public void writeSqrt( double x) { if (x < 0) throw new IllegalArgumentException(“Negative x”);... p Hata verme ( Bölüm 1.1 de açıklanan) faydalıdır.
Önşart and Hedefşart Kullanmanın Avantajları p Kısaca metodun davranışını tanımlar... p... metodun çalışmasıyla ilgili detaylarla kafanızı karıştırmadan p Daha sonra, metodu yeni bir yöntemle tekrar uygulayabilirsiniz... p... fakat programlar (önşart/hedefşarta dayalı olan) hiçbir değişiklik olmadan çalışmaya devam edecek.
Önşart p Metodu çağıran programcı, önşartın doğruluğunu sağlamalıdır. p Metodu yazan programcı metod çalışmaya başladığında önşartın doğru olduğunu düşünmelidir. Hedefşart p Metodu yazan programcı, metodun çalışması bittikten sonra hedef şartın sağlanacağına emin olmalıdır. Özet
SON Presentation copyright 1999, Addison Wesley Longman For use with Data Structures and Other Objects Using Java by Michael Main. Some artwork in the presentation is used with permission from Presentation Task Force (copyright New Vision Technologies Inc.) and Corel Gallery Clipart Catalog (copyright Corel Corporation, 3G Graphics Inc., Archive Arts, Cartesia Software, Image Club Graphics Inc., One Mile Up Inc., TechPool Studios, Totem Graphics Inc.). Students and instructors who use Data Structures and Other Objects Using Java are welcome to use this presentation however they see fit, so long as this copyright notice remains intact.