MIRAS(INHERITANCE)

Nesneye yönelik programlamanın felsefelerinden birisi olan miras(inheritance) kavramı ortaya atıldığında programlama dünyasında çok önemli bir etkiye sahip olmuştur.Şöyleki,bir sınıf bir üst sınıf tarafından türetilirse veya başka bir tabir ile genişletilirse o sınıfı devralmış olur.

Bir sınıfın örnekleri,ata sınıfın örneklerini devralarak,ilgili nesneye kendine özgü yeni özelliklerini ilave ederek yeniden ortaya çıkmasına nesne yönelimli programlama da miras denmektedir.Bir programda yazılan bir sınıfın,bir başka sınıftan türetilmesi gerektiğine karar vermede öngörülen en önemli yapıt hiyerarşi sistemidir.Türetilen bir sınıf,ancak o sınıfın mantıksal ilişkisi olan daha genel bir sınıf tarafından türetilmesi gerekmektedir.Bu yüzden ataerkil hiyerarşisini,tasarlanacak model üzerinde iyi kurgulayıp miras işlemi gerçeklemek gerekir.

Hayvanları çeşitli özelliklerine göre ayırmak istersek aşağıdaki gibi bir yapı kurgulamak konunun anlaşılması açısından yerinde olacaktır.

Miras-1
Yukarıdaki hiyerarşik yapıya bakıldığı zaman en ilkel sınıf Hayvan olacaktır.Çünkü memeli ve sürüngenlerde birer hayvandır.Ancak bir hayvanın fiziki özelliklerine göre ayrılmış bir hayvan. Kedi ve Köpek sınıfları da,memeli sınıfının birer örnekleridir.

Miras kavramını incelemeye başka bir hiyerarşik yapı ile devam edelim.
Miras-2
Bu hiyerarşik yapıya bakıldığında,Hayvan sınıfının da bir üst sınıfı olduğunu,bu sınıfında Omurgalı sınıf olduğu görülmektedir.

Dolayısıyla nesneye yönelik programlama dünyasında bir sınıfı atasından türetmek için aradaki mantıksal ilişkiyi göz önünde bulundurmak gerekmektedir.Yukarıdaki diyagramların her birinde kuşkusuz en üst sınıf Canlı sınıfı olacaktır.

<table cellspacing="0" cellpadding="4" rules="rows" border="1" id="ctl00_Govde_Grid_yorumlar" style="color:Black;background-color:White;border-color:#CCCCCC;border-width:1px;border-style:None;height:60px;width:900px;border-collapse:collapse;">
    <tr style="color:White;background-color:#333333;font-weight:bold;">
        <th scope="col">Üye</th><th scope="col">Yorum</th><th align="left" valign="top" scope="col">Tarih:</th>
    </tr><tr>
        <td align="left" valign="top" style="width:100px;">
        <span id="ctl00_Govde_Grid_yorumlar_ctl02_lbl_kullanici_adi">Abdullah Velioğlu</span>
        </td><td>
        <span id="ctl00_Govde_Grid_yorumlar_ctl02_lbl_yorum"><pre>Soruda belirtilen Otomobil, Otobus, Traktor, Motosiklet ve Cifti kavramları bir sınıf olarak tasarlanmalıdır.

Otomobil, Otobus, Traktor ve Motosiklet sınıfları ortak bir Arac sınıfıntan türetilmelidir.

Ruhsat sahibi, marka, model, motor gücü bilgileri bu sınıfta tanımlanmalıdır ki, alt sınıflar tarafından ortak olarak kullanılabilsin.

Bunun dışında Traktör sınıfında yolcu sayısı bilgisine ulaşılmaması için, bu metotlar Traktör sınıfında private olarak override edilmelidir.

Yine Otobuse ait kira bilgisi ise yine sadece bu sınıf içerisinde tanımlanmalıdır.

Soruda tanımlanan Eylemler ise, Ciftci sınıfında tanımlanacak metotlardır.

Bir ciftci sahip oldugu arac bilgisine göre kasko ve vergi ödeme işlemleri yapabilir.

Tüm bu anlatılanları C++ Programlama Dilindeki karşılığı aşağıdaki gibi tasarlanabilir.

#include <iostream>
include <string>
using namespace std;
class Arac {
private:
string ruhsatSahibi;
string model;
string marka;
int motorGucu;
int yolcuSayisi;

public:

string getRuhsatSahibi() {
    return ruhsatSahibi;
}

<span style="font-weight:700">void</span> <span style="color:#ff8000">setRuhsatSahibi</span>(string ruhsatSahibi) {
    this->ruhsatSahibi = ruhsatSahibi;
}

string <span style="color:#ff8000">getModel</span>() {
    return model;
}

<span style="font-weight:700">void</span> <span style="color:#ff8000">setModel</span>(string model) {
    this->model = model;
}

string <span style="color:#ff8000">getMarka</span>() {
    return marka;
}

<span style="font-weight:700">void</span> <span style="color:#ff8000">setMarka</span>(string marka) {
    this->marka = marka;
}

<span style="font-weight:700">int</span> <span style="color:#ff8000">getMotorGucu</span>() {
    return motorGucu;
}

<span style="font-weight:700">void</span> <span style="color:#ff8000">setMotorGucu</span>(int motorGucu) {
    this->motorGucu = motorGucu;
}

<span style="font-weight:700">int</span> <span style="color:#ff8000">getYolcuSayisi</span>() {
    return yolcuSayisi;
}

<span style="font-weight:700">void</span> <span style="color:#ff8000">setYolcuSayisi</span>(int yolcuSayisi) {
    this->yolcuSayisi = yolcuSayisi;
}
};
Otomobil: Arac {
};
Otobus : Arac {
private:
int yillikKiraMiktari;
string kiralayanKisi;
public:
void setYillikKiraMiktari(int yillikKiraMiktari) {
    this->yillikKiraMiktari = yillikKiraMiktari;
}
<span style="font-weight:700">int</span> <span style="color:#ff8000">getYillikKiraMiktari</span>() {
    return this->yillikKiraMiktari;
}
<span style="font-weight:700">void</span> <span style="color:#ff8000">setKiralayanKisi</span>(string kiralayanKisi) {
    this->kiralayanKisi = kiralayanKisi;
}
string <span style="color:#ff8000">getKiralayanKisi</span>() {
    return this->kiralayanKisi;
}
<span style="font-weight:700">void</span> <span style="color:#ff8000">kirala</span>() {
    // kaydedilecek kiramala bilgileri.
}
};

Traktor : public Arac {

private :
int getYolcuSayisi();
void setYolcuSayisi();

public:
string* ekipmanlar;

<span style="color:#ff8000">Traktor</span>() {
    ekipmanlar = new string[3];
    ekipmanlar[0] = "Biçerdöver";
    ekipmanlar[1] = "İlaçlayıcı";
    ekipmanlar[2] = "Toprak İşleyici";
}

string <span style="color:#ff8000">getEkipman</span>(int ekipmanNo) {
    return ekipmanlar[ekipmanNo];
}

<span style="font-weight:700">void</span> <span style="color:#ff8000">ekipmanKaydet</span>(int ekipmanNo) {
    string ekipman = getEkipman(ekipmanNo);
    cout &lt;&lt; ekipman &lt;&lt; " kaydedildi." &lt;&lt; "\n";
}
};

Motosiklet : Arac {

};

Ciftci {

private:
string ad;

public:

<span style="color:#ff8000">Ciftci</span>(string ad) {
    this->ad = ad;
}
<span style="font-weight:700">void</span> <span style="color:#ff8000">vergiOde</span>(Arac arac) {

    float vergi = 0;
    switch(arac.<span style="color:#33f;font-weight:700">getMotorGucu</span>()) {
        case 100:
        vergi = 100;
        break;
        case 200:
        vergi = 200;
        break;
        case 300:
        vergi = 300;
        break;
    }
    switch(arac.<span style="color:#33f;font-weight:700">getModel</span>().<span style="color:#33f;font-weight:700">compare</span>("2014")) {
        case -1:
        vergi = vergi + 50;
        break;
        case 0:
        case 1:
        vergi = vergi + 100;
        break;
    }
    cout &lt;&lt; vergi &lt;&lt; " TL arac vergisi odenmistir." &lt;&lt; "\n";
}

<span style="font-weight:700">void</span> <span style="color:#ff8000">kaskoOde</span>(Arac arac) {

    cout &lt;&lt; ad &lt;&lt; " tarafindan" &lt;&lt; " " &lt;&lt; arac.<span style="color:#33f;font-weight:700">getMarka</span>() &lt;&lt; " adli arac kaskosu odenmistir." &lt;&lt; "\n";
}
};

main( int argc, const char* argv[] )
{
 cout &lt;&lt; "Basla" &lt;&lt; "\n";

 Traktor traktor;
 traktor.<span style="color:#33f;font-weight:700">setMarka</span>("Nissan");
 traktor.<span style="color:#33f;font-weight:700">setModel</span>("2014");
 traktor.<span style="color:#33f;font-weight:700">setMotorGucu</span>(100);

 Ciftci ciftci("Dogan");
 ciftci.<span style="color:#33f;font-weight:700">vergiOde</span>(traktor);
 ciftci.<span style="color:#33f;font-weight:700">kaskoOde</span>(traktor);
}

Kategori : Programlama Dilleri