Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
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ışan Gönüllü SaatÜcretli Aylı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
Alt Sınıflar Hayvan (Köpek, Hayvandan türer Köpek Kedi İnek
Ö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
Örneğin: “Kedi bir hayvandır” ya da “Bütün kediler hayvandır”)
Köpek Kedi İ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
Örneğin: “İnek bir hayvandır” ya da “Bütün inekler hayvandır”)
Köpek Kedi İ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ım Sarı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ü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;
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ı
Hayvan Köpek Kedi İ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); (“Benim hayvan adım " + super.ad); Güzel bir fikir mi?
14
Super kullanımı Hayvan Köpek Kedi İnek Burada şu anlama geliyor:
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) Eğer kullanılmasaydı???
15
Geometri örneği Şekil Daire Dikdörtgen
class Sekil { public String ad; public String adAl () { return (this.ad); } // adAl public int alan () { return (0); } // alan } // Sekil Şekil Daire Dikdörtgen Her yeni türeyen sınıf alan() metodunu yeniden tanımlaması gerekir.
16
Daire sınıfının tanımlanması alıştırma olsun diye size bırakıldı.
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; 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
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) Üstü kapalı olarak Animal() yapılandırıcısı çağırılır.
18
Burada bir Sekil yapıcısı çağırmak istersem ne olur?
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”); Dikdortgen (int l, int w, String n) { uzunluk = l; genislik = l; ad = n; public int alan () { return (uzunluk * genislik); } // alan Burada bir Sekil yapı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ı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 <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) { 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) { 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 Ya da buna ne dersiniz... Object
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
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 Ö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.
27
Wrapper Sınıfları Boolean boolean sınıf ait olduğu temel tür
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?
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.