Genişleyebilirlik

CorsaiR

Emektar
27 Ara 2005
1,228
18
Çekirdekten
DenemeSurusu2.java programına geri dönersek . Bu örnekte programa her yeni türetilmiş tip class eklediğimizde , bu class ın sur() methodunu cağırmak için ayrı bir method yazmak zorundaydık . Bu zor ve hataya açık bir işdir.
Aşağıdaki şemada epey bir türetme yaptık :

sema4.gif


Araba.class ından ilk etapda 3 adet class türetiyoruz : YarisArabasi.class , YukArabasi.class , AileArabasi.class ve daha sonradan AileAraba.class ından GencArabasi.class ını türettik . Aslında GencArabasi.class ınıda Araba.class ından türetilmiş diyebiliriz .

Yukarıdaki şemayı koda dökelim :


// Genisleyebilirlik
class Araba
{

private int i = 0 ;
public **** sur() {
System.out.println("Araba sur");
}

public **** dur() {
System.out.println("Araba dur");
}

}

class YarisArabasi extends Araba
{
public **** sur() {
System.out.println("YarisArabasi sur");
}

public **** dur() {
System.out.println("YarisArabasi dur");
}

public **** hizYap() {
System.out.println("Hizzzz Yapp");
}
}

class AileArabasi extends Araba {

public **** sur() {
System.out.println("AileArabasi sur");
}

public **** dur() {
System.out.println("AileArabasi dur");
}

public **** konforOlustur() {
System.out.println(" AileArabasi KonforOlustur( )");
}
}


class YukArabasi extends Araba {

public **** sur() {
System.out.println("YukArabasi sur");
}

public **** dur() {
System.out.println("YukArabasi dur");
}

public **** frenABS() {
System.out.println(" YukArabasi frenABS() ");
}
}

class GencArabasi extends AileArabasi
{
public **** sur() {
System.out.println("GencArabasi sur ");
}

public **** kontrolSistemi() {
System.out.println(" GencArabasi kontrolSistemi() ");
}
}

public class DenemeSurusu3 {


public **** hepsiniSur(Araba[] ar) {

for (int i = 0 ; i < ar.length ; i ++ )
{
ar[ i ].sur();
}
}


public static **** main(String args[]) {
DenemeSurusu3 ds3 = new DenemeSurusu3();
Araba[] ara_ar = new Araba[4] ;
int sayac = 0 ;
// Array e eklerken upcasting oluyor
ara_ar[sayac++] = new AileArabasi();
ara_ar[sayac++] = new YarisArabasi();
ara_ar[sayac++] = new YukArabasi();
ara_ar[sayac++] = new GencArabasi();
ds3.hepsiniSur( ara_ar );
}
} //^



main() methodunun içinde , Araba tipinde bir Array değişkenini tanımladık ve daha sonra Araba sınıfından türeyen diğer sınıfları bu Arrayın içine attık . Array içine atma sırasında herhangi bir hata söz konusu değildir sebebi ise türeyen tiplerin otomotik olarak ana tiplerine dönüşebilmesidir (upcasting , yukari doğru değişim).
Daha sonra bu array in değişkenini hepsiniSur(Araba[] ar) methoduna yolladık ve array içindeki tiplerin sur() methodlarını çagırdık .

Programın çıktısı :

AileArabasi sur
YarisArabasi sur
YukArabasi sur
GencArabasi sur


Array ın içindeki sınıfların hepsinin kendilerine has olan sur() methodları cağrıldı. Polimorfizm in size tam olarak sağlandığı şey budur . Kodunuzu istediğiniz kadar genişletebilirsiniz fakat kodunuzdaki diğer tarafları etkilemez . Polimofizm hakkında şöylede diyebiliriz :” Değişen şeyleri , sabit kalan şeylerden ayırmak“.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.