Türeme
- Üst sınıfın
abstract
olarak belirttiğisesÇıkart
işlevi alt sınıflar tarafındanoverride
anahtar sözcüğü ile tanımlanır.Bu problemde
Tren
sınıfını gözardı edersek yalnızcaVagon.sesÇıkart
veLokomotif.sesÇıkart
işlevleri yeterlidir:import std.stdio; class DemirYoluAracı { void ilerle(size_t kilometre) { writefln("Araç %s kilometre ilerliyor:", kilometre); foreach (i; 0 .. kilometre / 100) { writefln(" %s", sesÇıkart()); } } abstract string sesÇıkart(); } class Vagon : DemirYoluAracı { override string sesÇıkart() const { return "takıtak tukutak"; } // ... } class YolcuVagonu : Vagon { // ... } class YükVagonu : Vagon { // ... } class Lokomotif : DemirYoluAracı { override string sesÇıkart() { return "çuf çuf"; } } void main() { auto vagon1 = new YolcuVagonu; vagon1.ilerle(100); auto vagon2 = new YükVagonu; vagon2.ilerle(200); auto lokomotif = new Lokomotif; lokomotif.ilerle(300); }
- Aşağıdaki program
Tren
'in sesini onu oluşturan parçaların bir birleşimi olarak üretmektedir:import std.stdio; class DemirYoluAracı { void ilerle(size_t kilometre) { writefln("Araç %s kilometre ilerliyor:", kilometre); foreach (i; 0 .. kilometre / 100) { writefln(" %s", sesÇıkart()); } } abstract string sesÇıkart(); } class Vagon : DemirYoluAracı { override string sesÇıkart() const { return "takıtak tukutak"; } abstract void bindir(); abstract void indir(); } class YolcuVagonu : Vagon { override void bindir() { writeln("Yolcular biniyor"); } override void indir() { writeln("Yolcular iniyor"); } } class YükVagonu : Vagon { override void bindir() { writeln("Mal yükleniyor"); } override void indir() { writeln("Mal boşalıyor"); } } class Lokomotif : DemirYoluAracı { override string sesÇıkart() { return "çuf çuf"; } } class Tren : DemirYoluAracı { Lokomotif lokomotif; Vagon[] vagonlar; this(Lokomotif lokomotif) { this.lokomotif = lokomotif; } void vagonEkle(Vagon[] vagonlar...) { this.vagonlar ~= vagonlar; } override string sesÇıkart() { string sonuç = lokomotif.sesÇıkart(); foreach (vagon; vagonlar) { sonuç ~= ", " ~ vagon.sesÇıkart(); } return sonuç; } void istasyondanAyrıl(string istasyon) { foreach (vagon; vagonlar) { vagon.bindir(); } writefln("%s garından ayrılıyoruz", istasyon); } void istasyonaGel(string istasyon) { writefln("%s garına geldik", istasyon); foreach (vagon; vagonlar) { vagon.indir(); } } } void main() { auto lokomotif = new Lokomotif; auto tren = new Tren(lokomotif); tren.vagonEkle(new YolcuVagonu, new YükVagonu); tren.istasyondanAyrıl("Ankara"); tren.ilerle(500); tren.istasyonaGel("Haydarpaşa"); }
Çıktısı:
Yolcular biniyor Mal yükleniyor Ankara garından ayrılıyoruz Araç 500 kilometre ilerliyor: çuf çuf, takıtak tukutak, takıtak tukutak ← Tren.sesÇıkart'ın sonucu çuf çuf, takıtak tukutak, takıtak tukutak çuf çuf, takıtak tukutak, takıtak tukutak çuf çuf, takıtak tukutak, takıtak tukutak çuf çuf, takıtak tukutak, takıtak tukutak Haydarpaşa garına geldik Yolcular iniyor Mal boşalıyor