Yeni Başlayanlar için OOP Kavramları: Çok Biçimliliğin Açıklaması

Yayınlanan: 2021-12-10

Python ve Java gibi üst düzey dillerde, OOP veya Nesne yönelimli programlama, mantık ve işlevlerden ziyade veri ve nesneler etrafında yazılım tasarım organizasyonu anlamına gelir. Bir nesne, benzersiz niteliklere ve davranışa sahip bir veri alanı olarak tanımlanır. Başka bir deyişle, OOP mantıktan çok nesnelere odaklanır. Böyle bir programlama modeli, aktif güncellemeler ve bakım gerektiren büyük ve karmaşık programlar için idealdir. Ayrıca, ölçeklenebilirlik, verimlilik ve kodun yeniden kullanılabilirliğinin ek faydalarını masaya yatırır.

OOP'nin dört temel yapı taşı vardır - polimorfizm, kapsülleme, soyutlama ve kalıtım. Makalemizin kapsamı OOP'lerde polimorfizm ile sınırlı olduğundan, Java'daki polimorfizm ve Python'daki polimorfizm örnekleri de dahil olmak üzere polimorfizmi ayrıntılı olarak tartışacağız.

Dünyanın En İyi Üniversitelerinden Online Yazılım Kursları Öğrenin. Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

İçindekiler

Polimorfizm Tanımı

En basit polimorfizm tanımı, polimorfizmin çeşitli biçimlerde var olmak anlamına gelmesidir. Kökleri iki Yunanca terime sahiptir - 'sayısız' anlamına gelen 'poli' ve 'biçimler' anlamına gelen 'morf'.

Konsepti daha iyi anlamak için önce basit bir örnek alalım. Her fare veya izleme dörtgeni kullandığınızda ekranda hareket ettiğini gördüğünüz imlecin aynısı olan imleç davranışı örneğini alın. Kullanıcının eylemlerine veya program moduna bağlı olarak, imleç ok, çarpı işareti, çizgi veya işaret parmağı gibi farklı biçimler alabilir.

Polimorfizm, OOP'nin en önemli özelliklerinden biridir. Java ve Python'da değişkenler, nesneler ve işlevler birçok biçimde var olabilir. Polimorfizmde, bir alt sınıf veya yöntem, ana sınıfının bazı işlevlerini korurken niteliklerini ve davranışlarını tanımlar. Bu bizi, bir temel sınıfın özniteliklerini ve davranışını türetilmiş bir sınıfa verdiği sınıf hiyerarşileri oluşturmanıza izin veren kalıtım konusuna getiriyor. Daha sonra, türetilmiş sınıfın işlevleri gerektiği gibi serbestçe değiştirilebilir veya genişletilebilir. Bu amaçla, polimorfizm, çağıran nesnenin türüne göre doğru yöntemin yürütülmesini sağlar.

Perspektife koymak için, tarih ve saati gösteren bir sınıfınız olduğunu varsayalım. Şimdi, sınıfı miras alan ve “Merhaba!” mesajını görüntüleyen bir yöntem oluşturuyorsunuz. tarih ve saat ile birlikte.

Java'da Polimorfizm Örneği

“Alan()” yöntemine sahip “Şekiller” üst sınıfını düşünün. "Shape" altındaki alt sınıflar "Dikdörtgen", "Daire", "Üçgen" vb. olabilir ve her alt sınıfın alan hesaplama yöntemi vardır. Kalıtım ve polimorfizm kavramlarını uygulayan alt sınıflar, ilgili şeklin alanını hesaplamak için formülü bulmak için “area()” yöntemini kullanır.

sınıf Şekiller {

genel boşluk alanı() {

System.out.println(“Alan formülü”);

}

}

class Üçgen Şekilleri genişletir {

genel boşluk alanı() {

System.out.println(“Üçgen 1/2 * taban * yüksekliktir”);

}

}

sınıf Çember Şekilleri genişletir {

genel boşluk alanı() {

System.out.println(“Daire 3.14 * yarıçap * yarıçaptır “);

}

}

sınıf Ana {

public static void main(String[] args) {

Şekiller myShape = yeni Şekiller(); // Shapes nesnesi oluştur

Şekiller myTriangle = new Triangle(); // Bir Üçgen nesnesi oluştur

Şekiller myCircle = new Circle(); // Bir Circle nesnesi oluşturun

myShape.area();

myTriangle.area();

myShape.area();

myCircle.area();

}

}

Yukarıdaki program kodunun çıktısı aşağıdaki gibi olacaktır:

Üçgenin alan formülü 1/2 * taban * yüksekliktir.

Dairenin alanı için formül 3.14 * yarıçap * yarıçaptır

OOP'lerde Polimorfizm Türleri

OOP'lerdeki polimorfizm iki tiptir - statik (derleme zamanı polimorfizmi) ve dinamik (çalışma zamanı polimorfizmi).

1. Statik polimorfizm

Java'da yöntem aşırı yüklemesi, en yaygın statik polimorfizm türüdür. Aynı sınıf içinde, ancak farklı parametrelerle aynı isimde birkaç yöntem oluşturabilir. Parametre kümeleri, aşağıdaki üç kriterden en az birinde farklılık göstermelidir:

  • Yöntemlerin farklı sayıda parametreye sahip olması gerekir.
  • Parametre türlerinin farklı olması gerekir. Örneğin, bir yöntem bir Uzun'u kabul ederse, diğeri bir Dize'yi kabul eder.
  • Metotlar, parametreleri farklı sıralarda kabul etmelidir. Örneğin, 1. yöntem bir Uzun ve bir Dize'yi kabul ederse, ikinci yöntem bir Dize ve ardından bir Uzun'u kabul etmelidir.

Yöntem aşırı yüklemesinde, yöntem çağrılırken, derleyici çağrı sırasında geçirilen parametrelere göre hangi yöntemin çağrılacağını seçer. Bu, derleme zamanında gerçekleşir ve bu nedenle bu tür polimorfizm, derleme zamanı polimorfizmi olarak da adlandırılır.

Aşağıda derleme zamanı polimorfizmini gösteren bir Java kodu örneği verilmiştir. Bu örnekte, adds() yöntemi iki farklı parametre türüyle aşırı yüklenmiştir.

paket statikPolimorfizm;

genel sınıf Ekleme

{

geçersiz toplam(int x, int y)

{

int c = x+y;

System.out.println(“ İki sayının toplanması :” +c); }

geçersiz toplam(int x, int y, int z)

{

int c = x+y+z;

System.out.println(“Üç sayının eklenmesi :” +c); }

public static void main(String[] args)

{

Ekleme nesnesi = yeni Ekleme();

obj.sum ( 45,34);

obj.sum(60, 32, 11);

}

}

Yukarıdaki programın çıktısı şöyle olacaktır:

İki sayının eklenmesi:79

Üç sayının eklenmesi:103

2. Dinamik polimorfizm

Dinamik veya çalışma zamanı polimorfizmi, yöntemi geçersiz kılma yoluyla elde edilir. Burada yöntemler, farklı sınıflarda (yöntem geçersiz kılma) farklı biçimlerdedir ve derleme zamanı yerine, geçersiz kılınan bir yönteme yapılan çağrı çalışma zamanında çözülür. Şimdi, bir sınıf başvurusuna bir nesne atandığında ve bir yöntem çağrıldığında, nesnenin sınıfındaki yöntem yürütülür. Nesne çalışma zamanında oluşturulduğundan, yürütülmesi gereken yöntemin (nesnedeki) biçimine yalnızca çalışma zamanında karar verilir.

Aşağıda, çalışma zamanı polimorfizmini gösteren bir Java kodu örneği verilmiştir . Örnekte, bir "Hayvan" üst sınıfı ve "kanguru", "kaplan" ve "balık" olmak üzere üç alt sınıf vardır. Alt sınıflar üst sınıfı genişletir ve "move()" yöntemini geçersiz kılar. "move()" yöntemi, "Animal" üst sınıfının referans değişkeni tarafından çağrılır.

sınıf Hayvan{

geçersiz hareket(){

System.out.println(“Hayvanların Hareket Etmesi”);

}

}

sınıf kanguru Animal{'ı genişletir

geçersiz hareket(){

System.out.println(“Kanguru zıplaması”);

}

}

sınıf kaplan Animal{'ı uzatır

geçersiz hareket(){

System.out.println(“Kaplanlar yürür”);

}

}

sınıf balık Hayvanı uzatır{

geçersiz hareket(){

System.out.println(“Balık yüzer”);

}

}

ana sınıf{

public static void main(String args[]){

Hayvan A = yeni Hayvan();

Hayvan k = yeni kanguru(); //yükseltme

Hayvan t = yeni kaplan(); //yükseltme

Hayvan f = yeni balık(); //yükseltme

Hareket();

k.hareket();

t.hareket();

f.hareket();

}

}

Yukarıdaki programın çıktısı şöyle olacaktır:

Hayvanlar hareket

Kanguru atlama

Kaplanlar yürümek

Balığın yüzmesi

Python'da Polimorfizm

Python'daki polimorfizm üç tiptir - operatör polimorfizmi, fonksiyon polimorfizmi ve sınıf polimorfizmi. Python ayrıca yöntem geçersiz kılmaya izin verir, ancak yöntem aşırı yüklemesine izin vermez.

1. Operatör polimorfizmi

Python'da '+' operatörünün ikili kullanımı vardır. Tamsayı veri türleri durumunda aritmetik toplama işlemleri için kullanılır ve dizeler için '+' operatörü birleştirme gerçekleştirir.

Aşağıda, '+' operatörünün tamsayı veri türlerine ekleme yaptığı bir Python kodu örneği verilmiştir:

sayı1 = 4

sayı2 = 5

yazdır(sayı1+sayı2)

Yukarıdaki program kodunun çıktısı '9'dur.

Aşağıda, '+' operatörünün dize veri türleri üzerinde birleştirme gerçekleştirdiği bir Python kodu örneği verilmiştir:

str1 = “İyi”

str2 = "Akşam"

yazdır(str1+” “+str2)

Yukarıdaki programın çıktısı 'İyi Akşamlar' olacaktır.

2. Fonksiyon polimorfizmi

Python'daki 'len()' işlevi, liste, dize, demet, sözlük ve küme gibi farklı veri türleri ile uyumludur, ancak her veri türü için belirli bilgiler döndürür. İşte bir örnek:

print(len(“Programcı”))

print(len([“Python”, “Java”, “C”]))

print(len({“Ad”: “Kathy”, “Adres”: “Teksas”}))

Yukarıdaki program aşağıdaki çıktıya sahip olacaktır:

9

3

2

3. Sınıf Polimorfizmi

Polimorfizm kavramını genişleten Python, birden çok sınıfın aynı ada sahip yöntemlere sahip olmasına izin verir. Aşağıda, Python'daki sınıf yöntemlerinde polimorfizmi gösteren bir örnek verilmiştir. Örnekte, 'Cat' ve 'Dog' olmak üzere iki sınıf vardır. Benzer bir yapıya sahiptirler ve aynı yöntem adlarına sahiptirler' make_sound(),' ve 'info().'

sınıf Kedi:

def __init__(kendi, isim, yaş):

self.name = isim

self.age = yaş

tanım bilgisi(kendi):

print(f”Ben bir kediyim. Adım {self.name}. {self.age} yaşındayım.”)

def make_sound(self):

print(“Miyav”)

sınıf Köpek:

def __init__(kendi, isim, yaş):

self.name = isim

self.age = yaş

tanım bilgisi(kendi):

print(f”Ben bir köpeğim. Adım {self.name}. {self.age} yaşındayım.”)

def make_sound(self):

print(“Kabuk”)

cat1 = Kedi(“Minnie”, 3)

dog1 = Köpek(“Tom”, 6)

(cat1, dog1) içindeki hayvan için:

hayvan.make_sound()

hayvan.bilgi()

hayvan.make_sound()

Çıktı aşağıdaki gibi olacaktır:

miyav

Ben bir kediyim. Benim adım Minnie. 3 yaşındayım.

miyav

Havlamak

Ben bir köpeğim. Benim adım Tom. Ben 6 yaşındayım.

Havlamak

4. Yöntem Geçersiz Kılma

Python ayrıca alt sınıfların üst sınıftan öznitelikleri ve yöntemleri devralmasına izin verir. Belirli yöntemler ve nitelikler, alt sınıfa uyacak şekilde yeniden tanımlanabilir (yöntem geçersiz kılma). Polimorfizm daha sonra, üst sınıfla aynı ada sahip geçersiz kılınan yöntemlere ve niteliklere erişime izin verir.

Yöntem geçersiz kılmayı gösteren bir Python kod örneği aşağıdadır:

matematikten içe aktar pi

sınıf Şekli:

def __init__(kendi, isim):

self.name = isim

def alanı(kendi):

geçmek

def fact(self):

dön “Ben kapalı bir figürüm.”

tanım __str__(kendi):

öz.adını döndür

sınıf Kare(Şekil):

def __init__(kendi, uzunluk):

super().__init__(“Kare”)

self.length = uzunluk

def alanı(kendi):

dönüş self.length**2

def fact(self):

return "Bir karedeki her açı 90 dereceye eşittir."

sınıf Daire(Şekil):

def __init__(kendi, yarıçap):

super().__init__(“Daire”)

self.radius = yarıçap

def alanı(kendi):

dönüş pi*self.radius**2

a = Kare(4)

b = Daire(7)

yazdır(b)

yazdır(b.fact())

yazdır(a.fact())

yazdır(b.alan())

Yukarıdaki program aşağıdaki çıktıya sahip olacaktır:

Daire

Ben kapalı bir figürüm.

Karedeki her açı 90 dereceye eşittir.

153.93804002589985

Yöntem geçersiz kılma hakkında daha fazla bilgi edinin.

OOP'lerde Polimorfizmin Avantajları

OOP'lerdeki polimorfizmin üç önemli avantajı vardır. Bunlar aşağıdaki gibidir:

  • Polimorfizm, kodun yeniden kullanılabilirliğini sağlar. Bu nedenle, sınıflar yazıldıktan, test edildikten ve uygulandıktan sonra onları tekrar tekrar kullanabilirsiniz. Ayrıca, orijinal kodu etkilemeden kod değiştirilebilir. Tüm bunlar kodlayıcı için önemli ölçüde zaman kazandırır.
  • Polimorfizmde, tek bir değişkende birden fazla veri değeri saklanabilir. Ayrıca, bir üst sınıftan bir alt sınıfa miras alınan bir değişkenin değeri, değişkenin üst sınıftaki veya herhangi bir alt sınıftaki değeri değiştirilmeden değiştirilebilir.
  • Son olarak, polimorfizm daha az kod satırıyla çalışır ve bu da programcı için hata ayıklamayı kolaylaştırır.

İleriye Doğru

upGrad, prestijli Liverpool John Moores Üniversitesi ile ortaklaşa olarak, Veri Biliminde titiz bir çevrimiçi Bilim Yüksek Lisans programı sunmaktadır. veri biliminde kariyer yapmak isteyen çalışan profesyoneller için. Kurs, LJMU'dan bir Yüksek Lisans derecesi ve IIIT Bangalore'den bir Yönetici PG Programı sertifikası ile sona erer.

Programın Öne Çıkanları:

  • 500+ saat içerik, 60+ vaka çalışması ve proje, 20+ canlı oturum
  • Python, AWS, MySQL ve daha fazlası gibi 14'ten fazla araç ve yazılımın kapsamlı kapsamı
  • Sektör uzmanlarıyla koçluk seansları
  • Akran öğrenimi ve endüstri ağı
  • 360 derece kariyer yardımı

Günümüzün en iyi yüksek EdTech platformlarından biri olan upGrad, en son teknoloji, en son pedagoji, endüstri ortaklıkları ve birinci sınıf bir fakülte kombinasyonu ile öğrencilere ilham vermeye ve hazırlamaya devam ediyor.

Dünyanın en iyi Üniversitelerinden çevrimiçi veri bilimi kurslarını öğrenin. Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

OOP'lerde neden polimorfizm kullanılır?

OOP'lerde polimorfizm, nesnenin onu çağıran sınıfına göre farklı görevleri gerçekleştiren yöntemdir. Böylece birden çok sınıfın nesnelerine bir mesaj gönderilir ve her nesne sınıfın özelliklerine göre yanıt verir.

Java'da yöntem aşırı yüklemesi nedir?

Java'da, aynı ada sahip iki veya daha fazla yöntem, parametrelerinde farklılık gösterebilir (farklı türde parametreler, farklı sayıda parametre veya her ikisi). Bu tür yöntemlere aşırı yüklenmiş yöntemler, özelliğe ise yöntem aşırı yüklemesi adı verilir.

Aşırı yükleme ve geçersiz kılma arasındaki fark nedir?

Aynı sınıftaki iki veya daha fazla yöntemin farklı parametreleri ancak aynı adı taşımasına aşırı yükleme denir. Öte yandan, geçersiz kılma, üst sınıfın ve alt sınıfın aynı yöntem imzasına (ad ve parametreler) sahip olmasıdır.