Dart Dilinde Soyut Sınıflar (Abstract Classes)

Dart dilinde soyut sınıflar (abstract classes), bir veya daha fazla soyut yöntem metot içeren ve kendisinden nesne türetilemeyen sınıflardır.

Dart Dilinde Soyut Sınıflar

Kendisinden nesne oluşturulan sınıfları somut sınıf olarak adlandırdığımızda umuyoruz ki soyut sınıflara neden soyut adı verildiği daha da anlaşılır olacaktır.

“abstract” anahtar sözcüğü ve ardından da sınıf bildirimi kullanılarak soyut sınıflar üretilir. Yani kabaca somut bir sınıf abstract anahtar kelimesiyle oluşturulduğunda bu artık soyut bir sınıf olmaktadır.

Bu arada soyut bir sınıf, pekala soyut metotlara sahip olabildiği gibi somut metotlara da sahip olabilir. Buna karşılık somut bir sınıfın, soyut yöntemlere sahip olmasına izin verilmez.

Soyut sınıfların Dart dilinde nesne oluşturulamama sebebi, onların sadece bir şablon ya da temel olarak kullanılma amacıdır; bu soyut sınıfların derleme ya da çalışma zamanındaki davranışıyla ilgili değildir. Soyut sınıflar, temel bir yapı sağlamak için vardır ve üzerlerine doğrudan nesne inşa edilemez.

Soyut sınıfların varlığının sebebi şudur: Birden çok türetilmiş sınıfın paylaşabileceği ortak metotları bir temel sınıf içinde tanımlanmasını ve mecburi olarak kullanılmasını sağlar.

Sınıf içinde metot metotIsmi () { } şeklinde tanımlanırken soyut sınıflarda ise metotIsmi (); şeklinde olmaktadır.

Ayrıca soyut sınıftan miras alınarak oluşturulan her sınıf bu şekilde tanımlanmış fonksiyonları kullanmak zorundadır.

void main() {
  var dikdortgen = Dikdortgen (3,5);
  dikdortgen.bilgi();
  dikdortgen.ne();
  print ("Dikdörtgenin alanı: ${dikdortgen.alan}");
  print ("Dikdörtgenin çevresi: ${dikdortgen.cevre}");
  
  print ("------------------------------------");
  
  var kare = Kare (4);
  kare.bilgi();
  kare.ne();
  print ("Karenin alanı: ${kare.alan}");
  print ("Karenin çevresi: ${kare.cevre}");
}


abstract class Sekil{
  int x, y;
  Sekil (this.x, this.y);
  
  get alan; //soyut get metodu
  get cevre; //soyut get metodu
  ne (); //soyut metot
  
  //somut metot olduğu için ille de alt sınıflarda kullanmak zorunda değiliz.
  void bilgi (){ 
    print ("soyut sınıfın somut metotodu çalıştı.");
  }
}

class Dikdortgen extends Sekil {
  int x, y;
  Dikdortgen (this.x, this.y) : super(x, y);
  
  @override
  void ne () {
    print ("bu bir dikdörtgen");
  }
  
  get alan => x*y;
  get cevre => (x+y)*2;
}

class Kare extends Sekil {
  int x;
  Kare (this.x) : super(x, 0);
  
  @override
  void ne () {
    print ("bu bir kare");
  }
  
  @override
  void bilgi () {
    print ("soyut sınıfın somut metotodu Kare sınıfında override edildi");
  }
  
  get alan => x*x;
  get cevre => x*4;
}

Çıktı:

soyut sınıfın somut metotodu çalıştı.
bu bir dikdörtgen
Dikdörtgenin alanı: 15
Dikdörtgenin çevresi: 16
soyut sınıfın somut metotodu Kare sınıfında override edildi
bu bir kare
Karenin alanı: 16
Karenin çevresi: 16

Kodu çalıştırmak için: DartPad

Örneğimizde fark edileceği üzere soyut sınıfımızın içinde soyut metotlar kullanıldığı gibi somut metotlar da kullanıldı. Alt sınıflarda soyut metotlar kullanmak zorunluyken somut metotların alt sınıflarda kullanılma zaruriyeti bulunmamaktadır.

Soyut Sınıf Kuralları

Soyut sınıf oluştururken aşağıdaki durumları göz önünde bulundurmak gerekir:

  • Soyut sınıflar, soyut metotlarını içerebilir veya içermeyebilir.
    • Bir sınıfın soyut olması için mutlaka soyut metotlara sahip olması gerekmez. Ancak, bir sınıfta soyut bir metot varsa, bu sınıfın mutlaka soyut olması gerekir.
  • Bir sınıfın en az bir soyut metodu varsa o sınıf abstract anahtar kelimesi ile soyut olarak bildirilmelidir.
    • Soyut bir metoda sahip olan bir sınıfın mutlaka “abstract” anahtar kelimesiyle tanımlanması gerekir.
  • Soyut bir sınıf somutlaştırılamaz (nesne üretilemez), ancak genişletilebilir.
    • Soyut sınıflardan doğrudan bir nesne oluşturulamaz, fakat bu sınıflar diğer sınıfların temelini oluşturmak üzere genişletilebilir (extend edilebilir).
  • Soyut bir sınıf miras verirse, içerisinde bulunan tüm soyut metotların alt sınıflarda da yazılması gerekir.
    • Soyut bir sınıftan miras alındığında, bu sınıfın içerisindeki tüm soyut metotlar, miras alınan sınıfta uygulanmalı (implement edilmeli) ya da o sınıf da soyut olarak işaretlenmelidir.
  • Soyut bir sınıf ayrıca somut metotlara da sahip olabilir.
    • Soyut sınıflar, hem soyut hem de somut metotlara sahip olabilir.

İlgili Makaleler

2 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu