Sınıfların Tekrardan Kullanılması Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1
İki Yöntem Komposizyon (Composition) Kalıtım (Inheritance) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 2
Komposizyon(Composition) class Meyva { } //... class Elma { } private Meyva m = new Meyva(); //... Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 3
Komposizyon - UML Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 4
Örnek Motor.java AileArabasi.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 5
Şekil Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 6
Kuş Bakışı Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 7
Örnek Voltran.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 8
Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 9
Kalıtım (Inheritance) class Kedi { //.. } class Kaplan extends Kedi { //.. } Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 10
Kalıtım - UML Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 11
Örnek KediKaplan.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 12
Gizli Kalıtım YeniBirSinif.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 13
Gizli Nokta public class YeniBirSinif extends Object { Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 14
Nesne yordamları (methods) clone() : Bu nesnenin aynısını klonlar. equals(object obj) : obj nesnesi, bu nesneye eşit mi kontrolü yapar. finalize() : İlgili nesne bellekten silinmeden hemen önce çağrılan yordam. getclass() : Bu nesnenin çalışma anında sınıf bilgilerini geri döner. hashcode() : Bu nesnenin hash kodunu geri döner. notify() : Bu nesnenin bekleme havuzunda olan tek iş parçacığını (thread) uyandırır. (ilerleyen bölümlerde inceleyeceğiz) notifyall() : Bu nesnenin bekleme havuzundaki tüm iş parçacıklarını uyandırır. (ilerleyen bölümlerde inceliyeceğiz) tostring() : Bu nesnenin String tipinden ifadesini geri döner. wait() : O andaki iş parçacığının (thread) beklemesini sağlar; bu bekleme notify() veya notifyall() yordamları sayesinde sona erer. wait (long timeout) : O andaki iş parçacığının belirtilen süre kadar beklemesini sağlar; bu bekleme notify()veya notifyall() yordamları sayesinde de sona erebilir. wait (long timeout, int nanos) : O andaki iş parçacığının belirtilen gerçek süre kadar beklemesini sağlar ; bu bekleme notify() veya notifyall() yordamları sayesinde de sona erebilir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 15
Kalıtım-UML Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 16
Kalıtım ve ilk değer alma sırası IlkDegerVermeSirasi.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 17
Kalıtım-UML Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 18
Paremetre alan yapılandırıcılar ve kalıtım IlkDegerVermeSirasiParametreli.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 19
IlkDegerVermeSirasiParametreli.java-hatalı class Insan { public Insan(int par) { System.out.println("Insan Yapilandiricisi " + par); } } class ZekiInsan extends Insan { public ZekiInsan(int par) { System.out.println("ZekiInsan Yapilandiricisi " + par); super(par+1); //! hatalı!this gibi ilk olmali } } class Hacker extends ZekiInsan{ public Hacker(int par) { System.out.println("Hacker Yapilandiricisi " + par); super(par+1); //! hatalı!this gibi ilk olmali } public static void main(string args[]) { Hacker hck = new Hacker(5); } } Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 20
Kompozisyon mu? Kalıtım mı? Hangi yöntemi ne zaman tercih etmeliyiz? Kompozisyon(Composition) Kalıtım (Inheritance) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 21
Komposizyon Araba.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 22
Kalıtım Sınıflar arasında bir ilişkisi olmalıdır. UçanYarasa bir Yarasadır. Yarasabir Hayvandır. O zaman UçanYarasa da bir Hayvandır. Hayvan da bir Nesnedir. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 23
Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 24
İptal etmek (Overriding) Türemiş sınıfların, ana sınıflar içerisindeki yordamları (methods) iptal edilebilir. KitapEvi.java (düz) KitapEvi2.java (iptal eden) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 25
Erişim Belirleyiciler ve İptal etme (Override) public protected friendly private Telefonlar.java (Yanlış) Hesap.java (Doğru) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 26
İptal etmek(overriding) ve adaş yordamların(overload) birbirlerine karıştırılması Bu iki kavram birbirlerine kolaylıkla karıştırılabilir. CalisanMudur.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 27
Yukarı Çevirim (Upcasting) Spor.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 28
Yukarı Çevirim (Upcasting)-UML Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 29
Final Kavramı Final kelimesinin sözlük anlamı "son" demektir. Java programlama dilinde final anahtar kelimesi değiştirilemezliği simgeler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 30
Global Alanlar ve Final Kavramı Derleme anında değerlerini bilebildiğimiz final global alanlar. Çalışma anında değerlerini bilebildiğimiz final global alanlar. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 31
Örnek FinalOrnek.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 32
Final parametreler FinalParametre.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 33
Boş (Blank) Final BosFinal.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 34
Final Yordamlar final yordamlar türetilmiş sınıflar tarafından iptal edilemezler (override). FinalMetod.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 35
private ve final final ve private erişim belirleyicisine sahip olan bir yordam, başka bir yordam tarafından iptal ediliyormuş gibi gözükebilir. SivilPolis.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 36
Final Sınıflar final sınıflardan türetilme yapılamaz! Tv.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 37
Kalıtım (Inheritance ) ve ilk değer alma sırası Bocekcik.java Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 38
Sorular... Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 39