Inheritance ve Polymorphism

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. Örnekler Java üzerinden gidecek. Inheritance ve Polymorphism’i ayrı ayrı aşağıda tartışalım.

Inheritance

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. Amaç ortak alanları tek yerde toplamak. 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.

inheritance

Polymorphism

Polymorphism aslında Inheritance bağlı bir nesneye bağlı programlama unsurudur. Polymorphism çoğu zaman inheritance ile gelir, ama interface ile de sağlanabilir. 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";
	}
}

Abstract ve Interface Notu

Yazımın sonuna doğru Abstract sınıfları ve Interface leri anlatacağım. Bu yazıda detayına girilmiyor, ama şunu akılda tutmak yeterli. 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. Sözleşme tanımlarlar.

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. Bakım maliyeti düşer, genişletmek kolaylaşır.

Stay updated

Receive insights on tech, leadership, and growth.

Subscribe if you want to read posts like this

No spam. One email a month.

11 thoughts on “Inheritance ve Polymorphism

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.