Polymorphism ve Inheritance beraber kullanılan iki önemli nesneye dayalı(Object-Oriented) programlama unsurudur. Bunlar program kodlarının yeniden kullanılabilmesi veya var olan kodun geliştirilebilmesi açısından çok önemlidir. Günümüzde yaygın olarak kullanılan diller de nesneye dayalı programlamaya elverişlidir. Bunlara örnek verecek olursak JAVA ve C++ başta gelen nesneye dayalı programlama dilleri olarak gösterilebilir. Inheritance ve Polymorphism i ayrı ayrı aşağıda tartışalım.
Inheritance adında da anlaşılacağı gibi kalıtım anlamına geliyor. Tabi bunun programlama dillerinde anladığımız şekli farklı. Bunu bir örnekle açıklamak istiyorum. Mesela, bir okulda bilgisayar sistemi olsun ve bu sistemin değişik kullanıcıları olsun. Bunlar lisans öğrencileri, akademisyenler,yüksek lisans öğrencileri, asistanlar ve benzeri kişiler olduğunu varsayalım. Şimdi bu insanların hepsi sistemin kullanıcısı. Biz buna karşılık olarak User(Kullanıcı) adında bir sınıf(class) yaratalım. Şimdi bu sınıf bizim ata sınıfımız olacaktır. Bununda türevlerini şu şekilde oluşturabiliriz. Mezun olmamış öğrenciler ve yüksek lisans öğrencilerini bir sınıfa toplayacak olursak bunlara genel olarak öğrenci(Student) diyebiliriz. Çünkü ortak olarak öğrenci paydasında buluşuyorlar. Öğrencileri de yüksek lisans(Master) ve lisans öğrencisi(Undergraduate) olarak ayrı iki sınıfta toplayalım. Akademisyenler(Professor) de sistemin kullanıcısı olduğunu düşünürsek onlarında atası yine User sınıfı olacaktır. Aşağıda buna ilişkin uml şeması bulunmaktadır.
Polymorphism aslında Inheritance bağlı bir nesneye bağlı programlama unsurudur. Polymorphism ‘in programlamadaki manasına geçmeden önce, kelime anlamına bir bakmak programlamadaki anlamını daha kolay kavramamıza yardımcı olacaktır. Poly birden fazla manasına gelmektedir. Morph ise şekil veya görüntü anlamına gelmektedir. İkisini bir araya getirirsek birden fazla görüntüsü olan olarak ifade edebiliriz. Anlamını öğrendikten sonra programlamada nasıl kullanıldığını ve ne anlama geldiğine bakalım. Yine bunu da bir örnek ile açıklayalım. Mesela hayvan(Animal) adlı bir sınıf oluşturalım ve bunun çocukları olan Kedi (Cat) ve Köpek(Dog) adında iki tane sınıf tanımlayalım. Şimdi bu iki sınıfta da birer talk() metodu olsa ve kedi ve köpeğin çıkardığı sesleri döndürürse polymorphism’i sağlamış oluruz. Bu şu demek hayvan sınıfında olan talk() metodunu her iki sınıfta method overriding yapıyor. Bu şekilde kedi ve köpek sınıfı birbirinden farklı özelliklerde talk() metoduna sahip oluyor. Bu sadece metodlarda değil aynı zamanda Constructorlarda da geçerlidir. Aşağıda konuyla ilgili kod örnekleri vardır.
abstract public class Animal{
//Her iki hayvan objesinde olan talk metodu.
//Abstract sınıflarda metodu tanımlamak zorunda değiliz
//ancak eğer metodu aşağıdaki şekilde yazarsak
//java derleyicileri bu sınıfın çocuklarında metod yazılmassa
//hata verecektir.
public abstract String talk();
}
public class Cat extends Animal{
//Kedi sınıfı kediye has olan miyavlama
//sesini döndürüyor bu şekilde farklı
//bir görünüme sahip oluyor.
public String talk(){
return "Miyav";
}
}
public class Dog extends Animal{
//Kedi sınıfı köpeğe has olan havlama
//sesini döndürüyor bu şekilde farklı
//bir görünüme sahip oluyor.
public String talk(){
return "Hav hav";
}
}
Yazımın sonuna doğru Abstract sınıfları ve Interface leri anlatacağım. Abstract sınıf ve Interface ler genel olarak aynı işe yarar. Ama yerine göre birbirine göre daha uygun olabilirler. Bunlar aynı proje üzerinde çalışan farklı yazılımcı gruplarının birbirlerinin metotlarını görebilmeleri için aracılık eden veya sağlayan yazılım unsurlarıdır.
Inheritance ve Polymorphism nesneye dayalı yazılımın temel taşlarından bir kaçıdır. Bu tür yazılımlarda geliştiricinin kodları anlaması ve yeniden kullanabilmesi için bu tür özelliklere sahip olması gerekmektedir. Ayrıca çok büyük yazılım projelerinde -bir bilgisayar oyunu gibi- projeyi parçalara ayırmanız gerekir ve bu durumda polymorphism ve inheritance kompleksliğin düşmesi açısından yani parçalanma bakımından önemli bir yer tutar. Kısacası Polymorphism ve Inheritance geliştiricinin ileride daha rahat kullanabileceği bir yazılım ortamı sağlar.
güzel anlatım emeğinize sağlık.
Şu ana kadar okuduklarım arasında en açık olanı.
Teşekkürler.
Örneklerinizle çok net açıkladığınız için çok te$ekkürler
Çok açık , anlaşılabilr bir makale yazmışsınız. Örneklerinize bayıldım. Çok faydalı olmuş.Teşekkürler 🙂
ÇOK GÜZEL OLMUŞ YALNIZ BU SADECE KALITIM DEĞİL Mİ?
LÜTFEN CVP YAZINIZ
Polymorphism ADIN DA YAZI VAR YUKARIDA O DEĞİL SADECE KALITIM ÖRNEĞİ BU DİME
Tekrar okursaniz, her ikisininde oldugunu gorursunuz. Ozellikle farkli hayvanlarin ayni methodlar sonucunda farkli aksiyonlarda bulunmasi gibi. Yukarida anlattigima ozel olarak talk methodu.
Teşekkürler okuduğum en güzel anlatım…devamını bekliyoruz
“Yazımın sonuna doğru Abstract sınıfları ve Interface leri anlatacağım” demişsiniz ama nerede anlatmışsınz göremedim..?? Ayrıca polymorphism örneğida çok kısa ve yetersiz. polymorphism asıl kullanıldığı referenas type lara hiç değinilmemiş bile 🙂
teşekkür ederim 🙂
Teşekkürler. Çok güzel anlatım