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.

Bir soyut sınıf (abstract class), doğrudan örneği oluşturulamayan bir sınıftır. Diğer sınıflar için bir taslak görevi görür ve alt sınıfların uyması gereken ortak bir yapıyı tanımlar. abstract anahtar kelimesini kullanarak bir tane oluşturursunuz.

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 (abstract classes) hala uygulamaları olan normal metotlara (describe() gibi) ve yapıcılara (constructors) sahip olabileceğine dikkat edin. Alt sınıflar, tıpkı normal kalıtımda olduğu gibi bunları miras alır. Temel fark, soyut sınıfın kendisinden bir örnek (instance) oluşturamamanızdır; somut bir alt sınıf kullanmanız gerekir.

challenge icon

Görev

Kolay

Soyut sınıfların daha spesifik türler için 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şleteceksiniz.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • vehicle.dart: Araç hiyerarşinizi burada tanımlayın:
    • String brand ve int year özelliklerine sahip bir abstract class Vehicle. Her iki değeri de alan bir yapıcı (constructor) ve [brand] ([year]) yazdıran bir displayInfo() metodu ekleyin.
    • Vehicle sınıfını genişleten ve bir int doors özelliği ekleyen bir Car sınıfı. Beep beep! yazdıran bir honk() metodu ekleyin.
    • Vehicle sınıfını genişleten ve bir bool hasSidecar özelliği ekleyen bir Motorcycle sınıfı. Vroom! yazdıran bir revEngine() metodu ekleyin.
  • main.dart: Araç dosyanızı içe aktarın ve soyut sınıfların nasıl çalıştığını gösterin:
    • Markası 'Toyota', yılı 2022 ve kapı sayısı 4 olan bir Car oluşturun.
    • (Vehicle sınıfından miras alınan) displayInfo() metodunu çağırın.
    • Doors: [doors] yazdırın.
    • honk() metodunu çağırın.
    • Boş bir satır yazdırın.
    • Markası 'Harley', yılı 2021 ve hasSidecar değeri false olan bir Motorcycle oluşturun.
    • displayInfo() metodunu çağırın.
    • Has sidecar: [hasSidecar] yazdırın.
    • revEngine() metodunu çağırın.

Vehicle soyut olduğu için doğrudan bir örneğini oluşturamayacağınızı unutmayın; somut alt sınıflardan birini kullanmalısınız. 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!

Kopya kağıdı

Bir soyut sınıf (abstract class), doğrudan örneği oluşturulamayan bir sınıftır. Diğer sınıflar için bir taslak görevi görür ve alt sınıfların uyması gereken ortak bir yapıyı tanımlar. abstract anahtar kelimesini kullanarak bir tane oluşturun:

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ın örneği oluşturulamaz
  var circle = Circle('blue', 5.0);
  circle.describe();  // A blue shape
}

Soyut sınıflar şunlara sahip olabilir:

  • Uygulamaları olan normal metotlar
  • Yapıcılar (Constructors)
  • Özellikler (Properties)

Alt sınıflar, tıpkı normal kalıtımda olduğu gibi bu üyeleri miras alır. Temel fark, soyut sınıfın kendisinden bir örnek oluşturamamanızdır; somut bir alt sınıf kullanmanız gerekir.

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