Menu
Coddy logo textTech

Soyut Sınıflar

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 43 / 110.

soyut sınıf, doğrudan örneği oluşturulamayan bir sınıftır. Diğer sınıflar için bir şablon görevi görür ve alt sınıfların uyması gereken ortak bir yapı tanımlar. Bir tane oluşturmak için abstract anahtar sözcüğünü kullanırsınız.

abstract class Shape {
  String color;
  
  Shape(this.color);
  
  void describe() {
    print('A $color shape');
  }
}

class Circle extends Shape {
  double radius;
  
  Circle(String color, this.radius) : super(color);
}

void main() {
  // Shape s = Shape('red');  // Hata! Soyut sınıf örneklendirilemez
  var circle = Circle('blue', 5.0);
  circle.describe();  // Mavi bir şekil
}

Soyut sınıflar, kendi başına var olamayacak kadar genel bir kavramınız olduğunda kullanışlıdır. Bir "Şekil" bir fikirdir, ancak bir daire mi, dikdörtgen mi yoksa üçgen mi olduğunu bilmeden bir şekil çizemezsiniz. Soyut sınıf, tüm şekillerin ortak noktalarını tanımlarken, somut alt sınıflar belirli ayrıntıları sağlar.

Soyut sınıfların, yine de uygulamalara sahip normal metotlara (örneğin describe()) ve kuruculara sahip olabileceğine dikkat edin. Alt sınıflar, normal kalıtımda olduğu gibi bunları devralır. Temel fark, soyut sınıfın kendisinin bir örneğini oluşturamamanızdır; somut bir alt sınıf kullanmalısınız.

challenge icon

Görev

Kolay

Daha özel türler için soyut sınıfların nasıl taslak görevi gördüğünü gösteren bir araç sistemi oluşturalım. Tüm araçların ortak özelliklerini tanımlayan soyut bir temel sınıf oluşturacak, ardından bunu somut araç türleriyle genişleteceksin.

Kodunu iki dosyada düzenleyeceksin:

  • vehicle.dart: Araç hiyerarşini burada tanımla:
    • Bir abstract class Vehicle; String brand ve int year özelliklerine sahip olsun. Her iki değeri alan bir kurucu ve displayInfo() yazdıran bir [brand] ([year]) metodu ekle.
    • Car sınıfını genişleten ve bir Vehicle özelliği ekleyen bir int doors sınıfı oluştur. honk() yazdıran bir Beep beep! metodu ekle.
    • Motorcycle sınıfını genişleten ve bir Vehicle özelliği ekleyen bir bool hasSidecar sınıfı oluştur. revEngine() yazdıran bir Vroom! metodu ekle.
  • main.dart: Araç dosyanı içe aktar ve soyut sınıfların nasıl çalıştığını göster:
    • Car markasına, 'Toyota' yılına ve 2022 kapıya sahip bir 4 oluştur.
    • displayInfo() metodunu çağır (Vehicle sınıfından miras alınmıştır).
    • Doors: [doors] yazdır.
    • honk() metodunu çağır.
    • Boş bir satır yazdır.
    • Motorcycle markasına, 'Harley' yılına ve 2021 değerinde hasSidecar özelliğine sahip bir false oluştur.
    • displayInfo() metodunu çağır.
    • Has sidecar: [hasSidecar] yazdır.
    • revEngine() metodunu çağır.

Vehicle soyut olduğu için doğrudan bir örneğini oluşturamayacağını unutma; somut alt sınıflardan birini kullanmalısın. Hem Car hem de Motorcycle, displayInfo() metodunu soyut üst sınıftan miras alır.

Beklenen çıktı:

Toyota (2022)
Doors: 4
Beep beep!

Harley (2021)
Has sidecar: false
Vroom!

Kendin dene

import 'vehicle.dart';

void main() {
  // TODO: Markası 'Toyota', yılı 2022 ve kapı sayısı 4 olan bir Araba (Car) oluşturun
  
  // TODO: Araba üzerinde displayInfo() metodunu çağırın
  
  // TODO: "Doors: [doors]" ifadesini yazdırın
  
  // TODO: Araba üzerinde honk() metodunu çağırın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: Markası 'Harley', yılı 2021 ve hasSidecar değeri false olan bir Motosiklet (Motorcycle) oluşturun
  
  // TODO: Motosiklet üzerinde displayInfo() metodunu çağırın
  
  // TODO: "Has sidecar: [hasSidecar]" ifadesini yazdırın
  
  // TODO: Motosiklet üzerinde revEngine() metodunu çağırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi