Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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.

Benzer bir sunumlar


... konulu sunumlar: "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."— Sunum transkripti:

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: Eleman Çalışan Gönüllü SaatÜcretli AylıkMaaşlı Danışman İ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. SaatÜcretli sınıfının alt sınıfı Çalışan sınıfının alt sınıfı Eleman sınıfının alt sınıfı süper sınıf (superclass)

4 Sınıflar ve Alt Sınıflar 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 “private” ve “public” konularına daha sonra geleceğiz Ö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 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” Hayvan Köpek Kedi İnek

6 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” Hayvan Köpek Kedi İnek

7 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ım Sarıkız” // “Ben bir ineğim” // “mö” Hayvan Köpek Kedi İnek

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) Kalıtım ve Görünürlük alanı (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 Super ve this kullanımı 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: ses = “hav”; ve this.ses = “hav”; Hayvan Köpek Kedi İnek Buradaki durumda aşağıdaki ifadeler ile aynı anlamdadır: identifySelf(); or this.identifySelf(); (ama neden??)

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); }

14 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 Hayvan Köpek Kedi İnek 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) Eğer kullanılmasaydı???

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

16 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 Yapılandırıcı zinciri Daire sınıfının tanımlanması alıştırma olsun diye size bırakıldı.

17 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) Yapılandırıcılar ve Kalıtım Üstü kapalı olarak Animal() yapılandırıcısı çağırılır.

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 Sekil(); Eğer Sekil() yoksa??? Burada bir Sekil yapıcısı çağırmak istersem ne olur? 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ın metodu ç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 (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ğlanan toString( ) metodunu yeniden tanımlamış oluyorsunuz.

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

25 Sorular?

26 Temel türler sınıf değildir (örneğin., int) Ancak bazen temel türleri nesne olarak kullanmamız gereken durumlar olabilir Örnek Toplama 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. Sarmalayıcı(Wrapper) Sınıflar

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 ‘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 Wrapper Sınıfları

29 Sorular?


"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." indir ppt

Benzer bir sunumlar


Google Reklamları