4)POLYMORPHISM
Polymorphism (Coksekillilik) Nedir ?
Polymorphism nesneye yonelik programlamanin kalitimdan sonra ikinci temel yapitasidir. Polymorphism sayesinde kolaylikla genisleyebilen sistemler tasarlamak ve uygulamak mumkundur. Programlar hierarside var olan ve eklenecek tum nesneleri isleyecek tarzda genel olarak yazilir. Bunu saglamanin yolu tum nesnelere ortak bir referansi uzerinden erismektir. Bu referans tum nesneler icin ortak olan superclass nesnesi referansidir. Sisteme bu hierarsi icinde yeni siniflar eklemek kod icinde sadece yeni sinifi direkt olarak bilen bolumlerde degisiklige yol acacaktir.
Polymorphism ve Switch Mantigi :
Birden fazla nesneyi ayni referansla ele almak icin polymorphismin tersi olan mantiga switch mantigi adi verilir. Bu mantik sinif icinde bir switch veya if ifadesinin bulunmasini ve ele alinmak istenen nesnenin bir sekilde belli edilerek uygun case bloguna girmesini gerektirir. Hangi nesnenin ele alinmak istendigi cogu kez sinif icinde bulunan public bir saha araciligiyla belirlenir. Ornegin bir nokta sinifina ait tip sahasina bakilarak bu sinifa ait nesnenin bir kare mi, yoksa bir dikdortgeni mi refer ettigine karar verilir.
Ancak, switch mantiginin bir cok sorunu vardir. Programci sinifin kastettigi her turlu tipin kontrolunu unutabilir , sisteme yeni tipler eklenmesi kod uzerinde buyuk degisikliklere yol acar.
Polymorphism switch mantiginin alternatifidir ve onun yol actigi bir cok sorunu onler. Polymorphism'de asagida anlatilan dinamik baglama(dynamic binding) sayesinde ayni isimle cagrilan bir metod nesne referansinin o an gosterdigi nesneye gore farkli islemler yapabilir, bu da switch mantigina olan gereksinimi ortadan kaldirir.
Polymorphism programlarin daha basit bir gorunuse kavusmasini saglar, bu da programlarin test, debug ve maintanance gibi islemlerini basitlestirir.
Dinamik Metod Baglama(Dynamic Method Binding) Kavrami :
Nesneye yonelik programlamada bir superclass'i miras alan butun subclasslar o superclass'a ait metodlara sahip olurlar. Polymorphism sayesinde ise subclass nesnelerine superclass nesnesi uzerinden erisim saglanabilir. Ancak bu nesne uzerinden bir metoda erismek istedigimiz zaman ortaya bir sorun cikar, ayni metod superclass'ta da oldugu icin hangisinin metoduna erisilecektir. Iste dinamik metod baglama burda ortaya cikar ve metodlarin nesnelere derleme zamaninda degil, isletim zamaninda baglanmasini saglar. Bu sayede metodlar nesne referanslarinin o an gosterdigi nesneye uygun olarak calisir.
Bu kavrami daha iyi anlamak icin bir ornek verelim. Kare, dikdortgen, ucgen ve daire subclass'larinin sekil superclass'indan meydana geldigini dusunelim. Sekil sinifinda olan ciz metodu her alt sinifa gececek ve bu siniflarda farklilastirilacaktir. Eger tum siniflara ait nesneleri sadece sekil sinifindan olusturulmus bir nesneyle ele alirsak, bu nesnenin ciz metodunu kullandigimiz zaman program otomatik olarak bu nesne referansi uzerinde o an baglanmis nesneyi tespit edecek ve ona ait ciz metodunu calistiracaktir.
Abstract ve Concrete Siniflar :
Sinifi bir tip olarak dusundugumuz zaman, bu tipe ait nesneler turetilecegini varsayariz. Oysa, bazi durumlarda programcinin asla nesne turetmeyecegi siniflar yazmak gerekli olabilir. Bu tip siniflara soyut(abstract) sinif adi verilir. Abstract siniflardan nesne turetilemez. Abstract siniflarin amaci, diger siniflarin miras alabilecegi bir superclass yaratmaktir. Java dilinde bir sinif basina abstract sozcugunun gelmesiyle abstract hale gelir.
Abstract siniflarin tam tersine uzerinden nesnelerin turetilebilecegi siniflara concrete siniflar denir.
Asagida abstract bir sinif ornegi verilmektedir.
public abstract class ogrenci
{
private String ad;
private String soyad;public ogrenci(String ilk, String son)
{
ad=ilk;
son=soyad;
}public String alAd()
{
return ad;
}public String alSoyad()
{
return soyad;
}
abstract int notlar();
}Ornek-1 : Abstract Sinif ve Metodlar
Ornek-1 soyut bir siniftir. Sinifin en altinda yer alan notlar metodu abstract bir metod olup ogrenci sinifini miras alan her alt sinif tarafindan tamamlanmak zorundadir.
Polymorphism Ornekleri Icin Tiklayiniz !
&nb sp;Index