Polimorfizm ve Kalıtım: Polimorfizm ve Kalıtım Arasındaki Fark [2022]

Yayınlanan: 2021-01-05

Polimorfizm ve kalıtım, Nesne yönelimli programlamanın çok temel kavramlarıdır. Günümüz programlama dillerinde nesnelerin eklenmesi, dili kullanma şeklimiz ve onlarla yapabileceklerimiz konusunda önemli bir fark yarattı. Özetle, nesne yönelimli programlama, programcının sınıfları kullanmasına ve dolayısıyla bu sınıflara dayalı olarak nesneler türetmesine izin veren bir dizi yöntemdir.

Gerçek dünyadaki varlıklara benzemeyi ve programcıların kodlarını, kodlarını yazdıkları paradigmayı içermesini kolaylaştırmayı amaçlar. Esasen dört Nesne yönelimli programlama kavramı vardır, bunlar Kalıtım, Soyutlama, Çok Biçimlilik ve Kapsüllemedir. Şimdi, fikirlerin her biri, daha önce belirtildiği gibi, herhangi bir modern dilin üzerinde durduğu sütunlar olarak düşünülebilir.

Polimorfizm vs. kalıtım ve yarasa hakkı konusuna geri dönersek, iki kavram arasında bariz bir fark görüyoruz. Kalıtım, kodun aynı veya farklı programda tekrar kullanılmasına izin veren kavramdır. Sevdiğimiz şeyleri koruyarak ve başarmaya çalıştığımız görevler için yararlı olmayanları atarak kodun nasıl davranacağını bile değiştirebiliriz. Kalıtım, günümüzde dijital ekranlarımızda gördüğümüz hemen hemen her şeyi geliştirmede çok zaman kazandırır.

Öte yandan, polimorfizm, önceden yazılmış kodu dikte etmekten ve gerçek zamanlı olarak belirli parametrelere dayalı olarak ne tür bir kodun yürütülmesi gerektiğine karar vermekten sorumludur. Polimorfizm ve kalıtım arasındaki farkın tartışılmasına geçmeden önce, herkesin bu kavramların her birini ayrıntılı olarak gözden geçirmesi faydalı olacaktır. Kalıtım ve Polimorfizm ile tam olarak ne kastedildiğini bildiğimizde, farklılıklar daha belirgin hale gelecektir.

Dünyanın en iyi Üniversitelerinden Yazılım Mühendisliği dereceleri alın . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

İçindekiler

Miras

Kalıtımı son derece önemli bir OOP kavramı olarak görmemek programlama paradigmasında bir suç olacaktır. Mirasın önemi asla hafife alınmamalıdır çünkü mirasın amacı "tekrar kullanılabilirlik"tir. Adından da anlaşılacağı gibi, kalıtımın yaptığı şey, bir sınıfta yazılan kodun başka bir sınıfa genişletilmesine izin vermesidir. Yani kalıtımda bir temel sınıf vardır; kodun yazıldığı sınıf yeniden kullanılacaktır.

Oluşturacağımız bir sonraki sınıfın, temel sınıfla ilişkili tüm işlevleri ve değişkenleri kullanmak için bu temel sınıftan miras alınması gerekir. Bir sınıf başka bir sınıfın özelliklerini aldığında (veya farklı bir sınıftan miras aldığında), temel sınıfta bulunan tüm üyeler bu yeni türetilmiş sınıfın üyesi olur.

Aşağıda verilen örnek kod, genel bir kalıtım biçiminin nasıl göründüğünü size gösterecektir. Burada dikkat edilmesi gereken önemli bir nokta, kodunuzun mirasını etkinleştirmek için yazmanız gereken tam sözdiziminin yalnızca seçtiğiniz programlama diline bağlı olmasıdır.

  1. sınıf türetilmiş sınıf adı : erişim belirteci temel sınıf adı{
  2. // türetilmiş sınıfın gövdesi
  3. }

Yukarıda gösterilen örnekte, bazı şeylerin biraz açıklanması gerekiyor. "Erişim belirteci" kelimesi, türetilmiş sınıfın temel sınıfın özelliklerine ve yöntemlerine erişme şekli anlamına gelir. Genel olarak, her birinin kendi anlamı (yani özel, genel ve korumalı) ve özellikleri olan üç erişim belirteci vardır.

Bir kez daha, seçtiğiniz dile bağlı olarak, bu erişim belirteçlerini kullanmanız gerekebilir veya olmayabilirsiniz. Bu nedenle, C++ dünyasında, varsayılan olarak hiçbir şey belirtmeden devralırsanız, özel olur. Ancak, bir yapıdan miras alırsanız (yapı anahtar sözcüğüyle gider), varsayılan erişim belirteci özel yerine genel olacaktır.

Okuyun: R Programlama Dilinde Kariyer Fırsatları

C++ ayrıca kalıtım yaparken size birçok seçenek sunar. Aşağıda listelenen bazılarını bulacaksınız:

a. Hiyerarşik Kalıtım: Bu tür kalıtım, yalnızca bir üst sınıfın olması gerektiği ve bu üst sınıftan türetilmiş birçok alt sınıf olması gerektiği kuralını izler. Aşağıda bunun bir örneğini bulacaksınız:

  1. //Temel Sınıf
  2. a sınıfı
  3. {
  4. public void funA()
  5. {
  6. //
  7. }
  8. }
  9. //Türetilmiş sınıf
  10. B sınıfı: A
  11. {
  12. genel boşluk eğlencesiB()
  13. {
  14. //
  15. }
  16. }
  17. //Türetilmiş sınıf
  18. C sınıfı: A
  19. {
  20. public void funC()
  21. {
  22. //
  23. }
  24. }
  25. //Türetilmiş sınıf
  26. D sınıfı
  27. {
  28. genel geçersiz fonD()
  29. {
  30. //
  31. }
  32. }
  33. //Türetilmiş sınıf
  34. E sınıfı: C
  35. {
  36. public void funE()
  37. {
  38. //
  39. }
  40. }
  41. //Türetilmiş sınıf
  42. F sınıfı: B
  43. {
  44. public void funF()
  45. {
  46. //
  47. }
  48. }
  49. //Türetilmiş sınıf
  50. G sınıfı: B
  51. {
  52. genel boşluk funG()
  53. {
  54. //
  55. }
  56. }

B. Çoklu Kalıtım: Birden çok kalıtım yapıyorsanız, bu, birden çok üst sınıftan miras alan yalnızca bir türetilmiş alt sınıfınız olduğu anlamına gelir. Aşağıda çoklu kalıtımın basit bir örneğini bulacaksınız:

  1. //Temel Sınıf
  2. a sınıfı
  3. {
  4. public void funA()
  5. {
  6. //
  7. }
  8. }
  9. //Temel Sınıf
  10. B sınıfı
  11. {
  12. genel boşluk eğlencesiB()
  13. {
  14. //
  15. }
  16. }
  17. //Türetilmiş sınıf
  18. C sınıfı: A, B
  19. {
  20. public void funC()
  21. {
  22. //
  23. }
  24. }

C. Tek Kalıtım: Bu belki de en basit miras şeklidir. Yalnızca bir temel sınıf ve bir türetilmiş sınıf vardır. Aşağıda bir örnek bulacaksınız:

  1. //Temel Sınıf
  2. a sınıfı
  3. {
  4. public void funA()
  5. {
  6. //YAPMAK:
  7. }
  8. }
  9. //Türetilmiş sınıf
  10. B sınıfı: A
  11. {
  12. genel boşluk eğlencesiB()
  13. {
  14. //YAPMAK:
  15. }
  16. }

polimorfizm

Polimorfizm kelimesinin temel tanımı, birden çok şekle sahip olmak demektir. Bu tanım, programlama bağlamında polimorfizmi açıklamada çok doğru bir şekilde geçerlidir. Bu paradigmada, polimorfizm tek bir işlev, ancak birçok biçim anlamını alır. Polimorfizm aslında derleme zamanında gerçekleşir. Derleme zamanında polimorfizm ancak aşırı yükleme kavramı nedeniyle mümkündür ve çalışma zamanında geçersiz kılma özelliği polimorfizmi gerçeğe dönüştürür. Tek tek, hem aşırı yükleme hem de geçersiz kılma tanımını ele alalım.

Aşırı yükleme, yazdığınız kodun veya sınıfın işlevinin farklı parametrelerle ancak aynı dönüş türüne sahip birden fazla kez yazılmasını gerektirir. Yani fonksiyona aktardığınız argümanlar farklı olabilir ve sadece çalışma zamanında fonksiyona aktarılan son değerlere bakarak fonksiyonun hangi formunun çağrılacağına karar verilir. Genel olarak, sınıf kurucusunun en fazla aşırı yüklenmiş fonksiyon olduğunu görürüz. Tüm bu teori çok netleşecek ve bir örnek yardımıyla onu zihninize yerleştirmeniz daha kolay olacaktır.

  1. sınıf aşırı yüklenmesi{
  2. int a, b;
  3. halka açık:
  4. int aşırı yük (int x){ // ilk aşırı yük() yapıcısı
  5. a=x;
  6. bir dönüş;
  7. }
  8. int aşırı yük (int x, int y){ //ikinci aşırı yük() yapıcısı
  9. a=x;
  10. b=y;
  11. a*b'yi döndür;
  12. }
  13. };
  14. int ana (){
  15. aşırı O1;
  16. O1. aşırı yük (20); //ilk aşırı yük() yapıcı çağrısı
  17. O1. aşırı yük (20,40); // ikinci aşırı yük() yapıcı çağrısı

İşte bu örnekte, eylemde aşırı yükleme görüyoruz. Nesnenin parantezinin son değerinin bir tamsayı mı yoksa iki mi olduğuna bağlı olarak farklı kurucuların nasıl çağrıldığına bakın.

Şimdi Geçersiz Kılmanın tanımını ele alalım. Yalnızca devralınan belirli işlevleri geçersiz kılabilirsiniz. Evet, kalıtım, işlevlerin geçersiz kılınmasını mümkün kılmak için önemli bir noktadır. Bir fonksiyon yazmak ve aynı zamanda onu geçersiz kılmak istiyorsanız, C++'da fonksiyon tanımından önce virtual anahtar sözcüğünü kullanmanız gerekecek ve aynı adı kullanan türetilmiş sınıfta, fonksiyonunuz için virtual anahtar sözcüğünü kaldırmanız yeterli olacaktır. Anlayışınızı pekiştirmek için işte bir örnek:

  1. sınıf tabanı{
  2. halka açık:
  3. sanal boşluk işlevi (){ //temel sınıfın sanal işlevi
  4. cout<<“Bu bir temel sınıfın işlevidir()”;
  5. }
  6. };
  7. türetilmiş sınıf1 : genel taban{
  8. halka açık:
  9. void funct (){ // türetilmiş1 sınıfta yeniden tanımlanan temel sınıfın sanal işlevi
  10. cout<<“Bu türetilmiş1 sınıfın işlevidir()”;
  11. }
  12. };
  13. int ana ()
  14. {
  15. baz *p, b;
  16. türetilmiş1 d1;
  17. *p=&b;
  18. p-> işlev (); //temel sınıf işlevine çağrı().
  19. *p=&d1;
  20. 0 döndür;
  21. }

Temel sınıfta virtual anahtar sözcüğünün nasıl kullanıldığına ve türetilmiş sınıfta nasıl kullanıldığına bakın, aynı işlev tanımı orada, sadece virtual anahtar sözcüğü yok.

Polimorfizm ve kalıtım arasındaki bazı yapışkan farklılıklar:

  1. Kalıtım, esasen bir sınıf oluşturmak ve daha sonra programınızdaki diğer sınıfların, özelliklerini zaten var olan temel sınıftan almasıdır. Ancak polimorfizm bir arayüzdür ve bir arayüz olduğu için farklı şekil ve biçimler alabilir.
  2. Kalıtım, yalnızca sınıflara ait bir özelliktir, oysa polimorfizm kendisini herhangi bir yönteme ve/veya işleve genişletir.
  3. Kalıtım, türetilmiş sınıfın, temel sınıfta bildirilen tüm işlevleri ve değişkenleri, bunları yeniden açıkça tanımlamadan kullanmasına izin verir. Bu nedenle kalıtımın kodun yeniden kullanılabilirliğini artırdığını ve kalıtım yoksa yazmamız gereken kodun uzunluğunu azalttığını söylüyoruz. Oysa polimorfizm, aynı işlev adının çok farklı iki koda sahip olmasına izin verir. Yani, bir anlamda, polimorfizm, yazmamız gereken kodun uzunluğunu azaltmak yerine, onu daha da genişletiyor.
  4. Kalıtımın alabileceği birçok biçim vardır; kalıtım konusunda gerçekten yaratıcı olabilirsiniz. Bununla birlikte, polimorfizm sadece iki yolla gerçekleştirilebilir, yani aşırı yükleme ve geçersiz kılma. Polimorfizmi kullanırken hala çok çılgına dönebilirsiniz, ancak bunu yazma kodunuza uygulamanın sadece iki yolu ile sınırlısınız.

Okumalısınız: Okumalısınız 47 OOPS Mülakat Sorusu ve Yeni Başlayanlar ve Deneyimliler İçin Cevaplar

Polimorfizm ve kalıtım: Tablolu farklılaşma

Aşağıdaki tabloda polimorfizm ve kalıtım arasında açık bir fark bulacaksınız:

KARŞILAŞTIRMALI ÖLÇÜMLER MİRAS polimorfizm
İkisi arasındaki temel farklar Kalıtımın anlamı, özelliklere (mevcut sınıfların işlevleri ve değişkenleri) sahip yeni sınıflar yaratmaktır. Esasen kodun farklı formlarda yazılmasına olanak sağlayan bir platformdur.
Her ikisinin de kodunuza entegre edilme biçimindeki farklılıklar Yalnızca sınıflar kodda gerçek kalıtımın keyfini çıkarabilir. Kodun tamamı boyunca herhangi bir işlev ve/veya yöntem tarafından uygulanabilir ve kullanılabilir.
Her ikisinin de kullanılabilme biçimindeki farklılıklar. Yazılan kodun aynı veya farklı program içerisinde tekrar kullanılmasını sağlar. Onsuz, Nesne yönelimli programlama çok önemli bir özelliği kaçıracaktı. Bildirilen nesnenin, fonksiyonun hangi formunun çağrılacağına karar vermesine izin verir. Buna karar verilebilecek iki zaman vardır. Çalışma zamanında buna geçersiz kılma denir; derleme zamanında buna aşırı yükleme denir.
İkisinin de alabileceği farklı biçimler Kalıtımın alabileceği çok sayıda biçim vardır. Polimorfizmin sadece iki formu olabilir. Programdaki zamana bağlı olarak, aşırı yüklemeden geçersiz kılmaya değişir.
Her birinin nasıl uygulandığını gösteren temel bir örnek. Bisiklet sınıfı, iki tekerlekli araçlar sınıfından miras alabilir ve bu da araçların bir alt sınıfı olabilir. Bisiklet sınıfı, girdiğiniz rengin adına göre bisikletin rengini değiştiren set_color() adlı bir yönteme sahip olabilir.

Kontrol edin: Java'da Tip Döküm Nedir | Yeni Başlayan Olarak Tip Dökümünü Anlamak

Çözüm

Hem polimorfizm hem de kalıtımın herhangi bir programı gerçeğe dönüştürmede kritik kavramlar olduğunu söylemek güvenlidir. Her ikisi de nesne yönelimli programlama fikrinin üzerine atıldığı temeldir. Çok farklı iki amaca hizmet ettikleri için polimorfizm ve kalıtım arasında birçok fark vardır.

Polimorfizm, programcının bir fonksiyonun birden çok tanımını yazmasına izin verir. Aynı zamanda kalıtım, kullanıcının önceden yazılmış kodu yeniden kullanmasını sağlar. İki kavramı tam olarak anlamak ve takdir etmek için her iki konuyu da okumanız önerilir.

Kod yazarken her zaman aklınızda bulundurmanız gereken bir şey, daha önce yazdığınız kodu yeniden düzenlemek istiyorsanız (temelde bir sınıfın tanımıdır ve benzer veya farklı bir sınıfa hizmet etmek için kodunuzda tekrar kullanın). amaç), kalıtımdan yararlanmalısınız. Kodunuzdaki genel karışıklığı azaltmak ve benzer görevleri yapmak için işlevin aynı adını kullanmak istiyorsanız, polimorfizm kullanmalısınız.

Full-stack yazılım geliştirme hakkında daha fazla bilgi edinmek istiyorsanız, upGrad & IIIT-B'nin çalışan profesyoneller için tasarlanmış ve 500+ saatlik zorlu eğitim, 9+ proje ve Full-stack Yazılım Geliştirme PG Diplomasına göz atın. atamalar, IIIT-B Mezun statüsü, pratik uygulamalı bitirme projeleri ve en iyi firmalarla iş yardımı.

Yazılım Geliştirme Kariyerinizi Şimdi Planlayın.

UpGrad'ın Yazılım Mühendisliğinde İş Bağlantılı PG Sertifikasyonu için başvurun