Tavsiye, 2024

Editörün Seçimi

Kalıtım ve Polimorfizm Arasındaki Fark

Kalıtım, kodun yeniden kullanılabilirliğine izin verir ve polimorfizm, farklı formda bir fonksiyonun ortaya çıkmasıdır. Kalıtım ve polimorfizm arasındaki temel fark, kalıtımın halihazırda var olan kodun bir programda tekrar kullanılmasına izin vermesidir ve polimorfizm, hangi fonksiyonun hangi formun çağrılacağına dinamik olarak karar vermek için bir mekanizma sağlar.

Karşılaştırma Tablosu

Karşılaştırma için temelmirasPolimorfizm
TemelKalıtım, var olan sınıfın özelliklerini kullanarak yeni bir sınıf yaratıyor.Polimorfizm temel olarak çoklu form için ortak bir arayüzdür.
uygulamaKalıtım temelde sınıflarda uygulanır.Polimorfizm temel olarak işlev / yöntemlere uygulanır.
kullanımOOP de yeniden kullanılabilirlik kavramını desteklemek ve kodun uzunluğunu azaltmak.Derleme zamanında (aşırı yükleme) ve çalışma zamanında (geçersiz kılma) iken, fonksiyonun hangi biçiminin çağrılacağına karar vermesini sağlar.
FormlarKalıtım, tek bir kalıtım, çoklu kalıtım, çok seviyeli kalıtım, hiyerarşik kalıtım ve hibrit kalıtım olabilir.Polimorfizm, derleme zamanı polimorfizmi (aşırı yükleme) veya çalışma zamanı polimorfizmi (geçersiz kılma) olabilir.
Örnek'Masa' sınıfı, bir 'masa' olduğu için 'mobilya' sınıfının özelliğini devralabilir.'Study_table' sınıfı aynı zamanda 'set_color ()' işlevine sahip olabilir ve 'Dining_table' sınıfı da 'set_color ()' işlevine sahip olabilir, böylece çağrılacak set_color () işlevinin hangi biçimine hem derleme zamanı hem de karar verilebilir çalışma zamanı.

Kalıtımın Tanımı:

Kalıtım, “yeniden kullanılabilirliği” kuvvetle destekleyen OOP'nin en önemli özelliklerinden biridir. Yeniden kullanılabilirlik, mevcut sınıfın özelliklerini yeniden kullanarak yeni bir sınıf oluşturmak olarak tanımlanabilir. Mirasta, türetilmiş sınıf tarafından miras alınan bir temel sınıf vardır. Bir sınıf başka bir sınıfa miras kaldığında, temel sınıfın üyeleri, türetilmiş bir sınıfın üyeleri haline gelir.

Bir sınıfı miras almanın genel şekli şöyledir:

 türetilmiş-sınıf-adı: erişim-belirteci temel sınıf-adı {// sınıfın gövdesi}; 

Burada, erişim belirteci, temel sınıftaki üyelere türetilmiş sınıfa erişim (özel, genel, korumalı) modunu sağlar. Erişim belirteci mevcut değilse, varsayılan olarak “özel” olarak kabul edilir. C ++ 'ta türetilmiş sınıf “yapı” ise, erişim belirteci varsayılan olarak “genel” dir.

C ++ 'da kalıtım beş şekilde sağlanabilir. Bunlar şöyle sınıflandırılabilir: -

  • Tek Kalıtım (sadece bir süper sınıf)
  • Çoklu Kalıtım (birkaç üst sınıf)
  • Hiyerarşik Miras (bir süper sınıf, birçok alt sınıf)
  • Çoklu Kalıtım (türetilmiş bir sınıftan türetilmiş)

Java'da, sınıf “extends” anahtar sözcüğünü kullanarak diğer sınıfı miras alır. Java'da, temel sınıf bir süper sınıf olarak adlandırılır ve türetilmiş sınıf bir alt sınıf olarak adlandırılır. Bir alt sınıf, “özel” olarak ilan edilen temel sınıf üyelerine erişemez. Java'da sınıfı miras alan genel form aşağıdaki gibidir.

 türetilmiş sınıf sınıfı ismi, temel sınıf adını genişletir {// sınıfın gövdesi}; 

Java, çoklu kalıtımın mirasını desteklemez, oysa çok seviyeli hiyerarşiyi destekler. Java'da bazen bir süper sınıf uygulama ayrıntılarını gizlemek isteyebilir ve bu verilerin bir kısmını “özel” yapar. Java'da olduğu gibi, bir alt sınıf, üst sınıfın özel üyelerine erişemez ve bir alt sınıf bu üyelere erişmek veya bunları başlatmak isterse, Java bir çözüm sunar. Alt sınıf, “super” anahtar sözcüğünü kullanarak hemen üst sınıf üyelerine başvurabilir. Unutmayın, yalnızca acil sınıfın üyelerine erişebilirsiniz.

'Süper'in iki genel formu vardır. Birincisi, süper sınıfın kurucusunu çağırmak için kullanmaktır. İkincisi, alt sınıfın üyesi tarafından gizlenmiş olan üst sınıfın üyesine erişmektir.

 // yapıcıyı çağırmanın ilk şekli. supper_class sınıfı {supper_class (argument_list) {..} // super sınıfının kurucusu}; sub_class sınıfı, supper_class öğesini genişletir {sub_class (argument_list) {..} // sub_class super'nin kurucusu (argument_list); // sub_class süper sınıfın kurucusunu çağırır}}; 
 // 'süper' sınıf için ikinci supper_class {int i; } class sub_class, supper_class öğesini genişletir {int i; sub_class (int a, int b) {super.i = a; // süper sınıfın 'i' i = b; // 'i' alt sınıfı}}; 

Polimorfizmin Tanımı

Polimorfizm terimi basitçe 'bir fonksiyon, çoklu formlar' anlamına gelir. Polimorfizm hem derleme zamanında hem de çalışma zamanında elde edilir. Derleme zamanı polimorfizmi “aşırı yükleme” ile sağlanırken, çalışma zamanı polimorfizmi “geçersiz kılma” ile sağlanır.

Polimorfizm, nesnenin her ikisinde de derleme zamanında ve çalışma zamanında “işlevin hangi şekliyle çağrılacağına” karar vermesini sağlar.
İlk aşırı yükleme kavramını tartışalım. Aşırı yüklenmede, sınıfta bir fonksiyonu birden fazla kez farklı, veri tipi ve parametre sayısı ile tanımlıyoruz, oysa aşırı yüklenecek fonksiyonun aynı dönüş tipine sahip olması gerekir. Aşırı yüklenen fonksiyonların çoğu, sınıfın kurucularıdır.

 sınıf aşırı yükü {int a, b; public: int aşırı yük (int x) {// ilk aşırı yük () yapıcı a = x; a dönüş; } int aşırı yük (int x, int y) {// ikinci aşırı yük () yapıcı a = x; b = y; a * b döndür; }}; int main () {aşırı yük O1; O1.overload (20); // first overload () yapıcı çağrısı O1.overload (20, 40); // second overload () yapıcı çağrısı} 

Şimdi ikinci polimorfizm biçimini tartışalım, yani geçersiz kılın. Geçersiz kılma kavramı yalnızca miras kavramını uygulayan sınıfların işlevine uygulanabilir. C ++ 'da geçersiz kılınacak işlev, temel sınıftaki "sanal" anahtar sözcüğünden önce gelir ve türetilmiş sınıfta "sanal" anahtar kelimesi dışında aynı prototip ile yeniden tanımlanır.

 class base {public: virtual void funct () {// base class cout'un sanal işlevi << "Bu bir base class'ın funct () işlevidir"; }}; türetilmiş1: genel taban {public: void funct () {// türetilmiş1 sınıf kümesinde yeniden tanımlanmış temel sınıfın sanal işlevi 

Kalıtım ve Polimorfizm Arasındaki Temel Farklılıklar

  1. Kalıtım, özelliğini zaten var olan bir sınıftan türeten bir sınıf yaratıyor. Öte yandan, polimorfizm, çoklu formlarda tanımlanabilen bir arayüzdür.
  2. Kalıtım, sınıflara, polimorfizm ise yöntemler / fonksiyonlara uygulanır.
  3. Kalıtım, türetilmiş bir sınıfın temel sınıfta tanımlanan öğeleri ve yöntemleri kullanmasına izin verdiği için, türetilmiş sınıfın, bu öğeleri veya yöntemi tekrar tanımlamasına gerek duymaz, böylece kodun yeniden kullanılabilirliğini arttırdığını ve dolayısıyla kodun uzunluğunu azalttığını söyleyebiliriz. . Öte yandan, polimorfizm, bir nesnenin hem derleme zamanında hem de çalışma zamanında ne tür yöntemi çağırmak istediğine karar vermesini mümkün kılar.
  4. Kalıtım, tek kalıtım, çoklu kalıtım, çok düzeyli kalıtım, hiyerarşik kalıtım ve hibrit kalıtım olarak sınıflandırılabilir. Öte yandan, polimorfizm aşırı ve aşırı basma olarak sınıflandırılır.

Sonuç:

Kalıtım ve polimorfizm, dinamik polimorfizm miras kavramını uygulayan sınıflara da uygulandığı için birbiriyle ilişkili kavramlardır.

Top