1 / 29

Kalıtım

Kalıtım. Kalıtım. Önceleri programcılar, var olan program kodlarına benzer kodlar yazarlardı. Örneğin : Bir insan kaynakları sistemi değişik çeşitlerde personelin bilgisini tutabilir. Ancak, bu değişik çeşitlerdeki personel aslında ortak birçok özelliğe de sahiptir.

sef
Download Presentation

Kalıtım

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kalıtım

  2. Kalıtım • Önceleri programcılar, var olan program kodlarına benzer kodlar yazarlardı. • Örneğin: Bir insan kaynakları sistemi değişik çeşitlerde personelin bilgisini tutabilir. Ancak, bu değişik çeşitlerdeki personel aslında ortak birçok özelliğe de sahiptir. • Bu, daha önceleri aynı program kodunu değişik yerlere kopyalama, yapıştırma ve üzerinde değişiklik yapma şeklinde yapılıyordu.

  3. Kalıtım Doğal olarak , herhangi birşeyi organize etmede kullanılan hiyerarşi şu şekildedir: süper sınıf (superclass) Eleman ÇalışanGönüllü SaatÜcretliAylıkMaaşlı Danışman Eleman sınıfının alt sınıfı Çalışan sınıfının alt sınıfı SaatÜcretli sınıfının alt sınıfı İlişkileri “olmak” (is a) şeklinde düşünebilirsiniz. Bir çalışan aynı zamanda elemandır. Bir gönüllü de elamandır. Saat ücretli bir kişi aynı zamanda çalışandır. Bir danışman saat ücretli çalışan birisidir.

  4. Sınıflar ve Alt Sınıflar “private” ve “public” konularına daha sonra geleceğiz class Hayvan { public String ad = ""; public String ses = ""; public int numTimesPerformed = 0; // constructors, accessors & modifiers go here public void identifySelf( ) { System.out.println(“Bemim adım “ + ad); } // of identifySelf public void perform( ) { doYourThing( ); numTimesPerformed++; } // of perform public void doYourThing( ) { ; // ‘no-op’ method } // of doYourThing } // of Animal Öyleyse hayvanlar, bir isme, sese sahiplerdir ve kendilerini tanımlayabilirler ve bunun yanında herhangi birşeyi yapabilirler. Hayvan harpo = new Hayvan(); harpo.setName(“Harpo”); harpo.doYourThing(); // hiçbir şey söylemez

  5. Hayvan KöpekKediİnek Alt Sınıflar (Köpek, Hayvandan türer Örneğin: “Köpek bir hayvandır” ya da “Bütün köpekler hayvandır”) class Kopek extends Hayvan { public Kopek() { ses = “Hav”; } // yapılandırıcı sonu public void doYourThing ( ) { identifySelf(); System.out.println(“Ben bir köpeğim”); System.out.println(ses); } // of doYourThing } // Kopek sınıfının sonu Hayvan sınıfı hiç bir şey yapmayan doYourThing() metoduna sahiptir. Kopek pickles = new Kopek(); pickles.setName(“Pickles”); pickles.doYourThing(); // çıktı: // “Benim adım Pickles” // “Ben bir köpeğim” // “Hav”

  6. Hayvan KöpekKediİnek Alt Sınıflar (Kedi, Hayvandan türer. Örneğin: “Kedi bir hayvandır” ya da “Bütün kediler hayvandır”) class Kedi extends Hayvan { public Kedi() { ses = “miyav”; } // yapılandırıcı sonu public void doYourThing ( ) { identifySelf(); System.out.println(“Ben bir kediyim”); System.out.println(ses); } // of doYourThing } // Kedi sınıfının sonu Kedi abby = Kedi Cat(); abby.setName(“Abby”); abby.doYourThing(); // çıktı: // “Benim adım Abby” // “Ben bir kediyim” // “miyav”

  7. Hayvan KöpekKediİnek Alt Sınıflar (İnek, Hayvandan türer. Örneğin: “İnek bir hayvandır” ya da “Bütün inekler hayvandır”) class Inek extends Hayvan { public Inek() { ses = “mö”; } // yapılandırıcı sonu public void doYourThing ( ) { identifySelf(); System.out.println(“Ben bir ineğim”); System.out.println(ses); } // of doYourThing } // Inek sınıfının sonu Inek descartes = new Inek(); descartes.setName(“Sarıkız”); descartes.doYourThing(); // çıktı: // “Benim adımSarıkız” // “Ben bir ineğim” // “mö”

  8. Sorular?

  9. Kalıtım ve Görünürlük Alanı (scope) Super ve this kullanımı

  10. Kalıtım ve Görünürlükalanı (Scope) • Değişkenler (örneğin:ses): • Java ilk önce, o anki metodu inceler, yerel değişkenleri ve parametreleri kontrol eder; • Java daha sonra, o anki sınıfı inceler(örneğin:Kopek); • Java daha sonra, süper sınıfı inceler (örneğin:Hayvan); • Java hiyerarşi boyunca ilerleyerek hiç bir süper sınıf kalmayıncaya kadar incelemeye devam eder. • Metodlar (örneğin:doYourThing() ya da identifySelf()): • Java ilk önce o anki sınıfı inceler; • Java daha sonra, süper sınıfı inceler; • Java hiyerarşi boyunca ilerleyerek hiç bir süper sınıf kalmayıncaya kadar incelemeye devam eder.

  11. Görünürlük alanının belirlenmesi Java size, görünürlük alanıyla ilgili kuralları yeniden belirlemenize izin verir. Hangi değişkene ya da metoda hitap ettiğinizi söyleyebilirsiniz: super deyimi: Süper sınıftan bir metoda ya da değişkene erişirken kullanılır. Örneğin, super.doYourThing( ) this deyimi: O anki aktif nesneye ait bir değişkene ya da metoda ulaşmak için kullanılır. Örneğin, this.doYourThing( )

  12. Hayvan KöpekKediİnek Super ve this kullanımı (ama neden??) Buradaki durumda aşağıdaki ifadeler ile aynı anlamdadır: ses = “hav”; ve this.ses = “hav”; class Kopek extends Hayvan { public Kopek() { super.ses= “hav”; } // yapılandırıcı sonu public void doYourThing ( ) { super.identifySelf(); System.out.println(“Ben bir köpeğim”); System.out.println(ses); } // of doYourThing } // Kopek sınıfının sonu Buradaki durumda aşağıdaki ifadeler ile aynı anlamdadır: identifySelf(); or this.identifySelf();

  13. Super ve this kullanımı class Hayvan { String ad; } class Kopek extends Hayvan { String ad; /* Just so I don't forget! */ void ikiAd() { System.out.println (“Benim köpek adım " + ad); System.out.println (“Benim hayvan adım " + super.ad); } } Güzel bir fikir mi?

  14. Hayvan KöpekKediİnek Eğer kullanılmasaydı??? Super kullanımı class Kopek extends Hayvan { // burada yapılandırıcı olduğunu // farzedin public void doYourThing() { identifySelf(); System.out.println(ses); } // of doYourThing public void identifySelf() { super.identifySelf(); System.out.println(“Ben bir köpeğim”); } // of identifySelf } // Kopek sınıfının sonu Burada şu anlama geliyor: this.identifySelf() (aşağıda tanımlanan şekilde) Burada şu anlama geliyor: identifySelf() (Hayvan sınıfında tanımlanan şekilde)

  15. Geometri örneği Şekil Dikdörtgen Daire class Sekil { public String ad; public String adAl () { return (this.ad); } // adAl public int alan () { return (0); } // alan } // Sekil Her yeni türeyen sınıf alan() metodunu yeniden tanımlaması gerekir.

  16. Yapılandırıcı zinciri class Dikdortgen extends Sekil { private int uzunluk, genislik; Dikdortgen () { this(0, 0); } // yapılandırıcı sonu Dikdortgen (int l, int w) { this( l, w, “dikdörtgen”); } // yapılandrıcı sonu Dikdortgen (int l, int w, String n) { uzunluk = l; genislik = l; ad = n; } // yapılandırıcı sonu public int alan () { return (uzunluk * genislik); } // alan public String adAl () { if (uzunluk == genislik) return “kare"; else return super.adAl()); } // adAl public String toString () { String s; s = new String (“Bir " + adAl() + " uzunluğu: " + uzunluk + " ve genişliği " + genislik); return (s); } } // toString } // Dikdortgen sınıfının sonu Daire sınıfının tanımlanması alıştırma olsun diye size bırakıldı.

  17. Üstü kapalı olarak Animal() yapılandırıcısı çağırılır. Yapılandırıcılar ve Kalıtım • Java kuralı: • Eğer yapılandırıcının ilk satırında açıkça bir üst sınıfın yapılandırıcısı çağrılmamışsa Java, üstü kapalı olarak alt tarafta super() metodunu işletir ve süper sınıfın yapılandırıcısını çağırır.public Kopek() { • strSes = “hav”; • } // yapılandırıcı sonu • Bunun bir istisnası: zincirleme yapıcı çağırma: • this(parametreler) super( ) çağırımını erteler • Süper sınıf yapılandırıcısını parametreleriyle birlikte çağırmak için açık olarak çağırma işlemini yapmalısınız: super(strAd)

  18. Yakın bakış... class Dikdortgen extends Sekil { private int uzunluk, genislik; Dikdortgen () { this(0, 0); } // yapılandırıcı Dikdortgen (int l, int w) { this( l, w, “Dikdörtgen”); } // yapılandırıcı Dikdortgen (int l, int w, String n) { uzunluk = l; genislik = l; ad = n; } // yapılandırıcı public int alan () { return (uzunluk * genislik); } // alan Burada bir Sekilyapıcısı çağırmak istersem ne olur? Sekil(); Eğer Sekil() yoksa??? Hata

  19. Kalıtım ve Faaliyet Alanları Örnekler super(xxx) // süper sınıfın yapılandırıcısını çağırır super.xxx // süper sınıfın değişkenine erişir super.xxx( ) // süper sınıfınmetodu çağırılır this(xxx) // aktif haldeki sınıfın yapılandırıcısı // çağırılır this.xxx // aktif haldeki sınıfın değişkenine // erişilir this.xxx( ) // aktif haldeki sınıfın metodu çağırılır Not: Bunu yapamazsınız: super.super <herhangi birşey> (bunu aslında casting dediğimiz yöntemle yapabilirsniz ancak bu da çok nadir olur, zorunlu olmadıkça yapmamalısınız.)

  20. Zincirleme (Chaining), süper sınıf örneği

  21. class Parent { String name; public Parent() { setName("NONE"); cp(1); } public Parent(String name) { setName(name); cp(2); } public void setName(String name) { this.name = name; cp(3); } public void cp(int n) { System.out.println("At checkpoint "+n+" "+name); } public static void main(String args[]) { Child c = new Child(); } } // Parent class Child extends Parent { public Child() { this("NONAME"); cp(4); } public Child(String name) { this.name = name; cp(5); } } // Child Çıktı: At checkpoint 3 NONE At checkpoint 1 NONE At checkpoint 5 NONAME At checkpoint 4 NONAME

  22. class Parent { String name; public Parent() { setName("NONE"); cp(1); } public Parent(String name) { setName(name); cp(2); } public void setName(String name) { this.name = name; cp(3); } public void cp(int n) { System.out.println("At checkpoint "+n+" "+name); } public static void main(String args[]) { Child c = new Child("Bob"); } } // Parent class Child extends Parent { public Child() { this("NONAME"); cp(4); } public Child(String name) { this.name = name; cp(5); } } // Child Çıktı: At checkpoint 3 NONE At checkpoint 1 NONE At checkpoint 5 Bob

  23. Object Sınıfına geri dönüş • Java Object adında temel bir tür sunar • extends ifadesine sahip olamayan bütün sınıflar üstü kapalı olarak java.lang.Object sınıfından türerler. • Bu gerçeğe ilişkin örnekler: • public boolean equals (Object o); • public boolean String toString (); • Her ne zaman bir sınıfa ait kendi toString() metodunuzu yazsanız aslında Object sınıfı tarafından sağlanantoString( ) metodunu yeniden tanımlamış oluyorsunuz.

  24. Object Hayvan KöpekKediİnek Çalışan AylıkMaaşlıSaatlikÜcretli Object Hayvan KöpekKediİnek Melez Ağır Hafif Nesne Hiyerarşisi • Object sınfınınmetodları: • String toString() • boolean equals(Object obj) • ve diğerleri... Ya da buna ne dersiniz...

  25. Sorular?

  26. Sarmalayıcı(Wrapper)Sınıflar Temel türler sınıf değildir (örneğin., int) Ancak bazen temel türleri nesne olarak kullanmamız gereken durumlar olabilir ÖrnekToplama sınıfların (collection classes) çoğu Nesnelerden oluşur ve Object sınıfın alt sınıflarıdır Java, temel türlere nesne gibi davranmak için bir takım wrapper sınıfları sağlar (alternatif isimler: a.k.a.(also known as)type wrappers, a.k.a. envelope classes). Bu şöyle sağlanmaktadır: her temel türe ait, özel bir sınıf Bunlar java.lang paketinin içerisindedir, böylece isimler evrenseldir. İsimleri temel türlerin aynısıdır ancak tek farkı ilk harflerinin büyük olmasıdır.

  27. Wrapper Sınıfları sınıf ait olduğu temel tür Boolean boolean Character char Byte byte Short short Integer int Long long Float float Double double • Her biri: • temel türlere nesne gibi davranmamızı sağlar • yararlı çevirici (conversion) metodları içermektedir.Örneğin: Integer sınıfının içerdikleri arasında • static Integer valueOf(String s) Integer.valueOf("27")tamsayı 27 ‘ye ait nesne • yararlıutility metodlara sahiptir (örneğin, hashing amaçlı)

  28. Wrapper Sınıfları Wrapper ‘ların nesneler ve temel türler arasında bağlantı oluştururken kullanımı // int oluşturma ve ilk değer atama int i = 7; // Bir Integer nesnesi oluşturma ve bir int temel türünü bu nesneye dönüştürme Integer intObject = new Integer( i ); // int temel türünü bu nesneden unwrapping yoluyla çıkarma System.out.println( intObject.intValue() ); // bir string ‘i Integer nesnesine dönüştürmek String strS = "27"; Integer intObject intObject = new Integer (strS); // sonra int temel türüne int a = intObject.intValue(); // birinci yol int b = Integer.parseInt(strS); // ikinci yol

  29. Sorular?

More Related