Menu
Coddy logo textTech

final Sınıf Anahtar Sözcüğü

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

Bazen bir sınıfın genişletilmesini önlemek istersiniz. final anahtar kelimesi, bir sınıfa uygulandığında, başka herhangi bir sınıfın ondan miras almasını engeller.

final class DatabaseConnection {
  String connectionString;
  
  DatabaseConnection(this.connectionString);
  
  void connect() {
    print('Connected to $connectionString');
  }
}

// Bu bir derleme zamanı hatasına neden olur:
// class CustomConnection extends DatabaseConnection { }

Bir sınıfı final olarak işaretlemek, sınıfın genişletilmesinin amaçlanan davranışını veya güvenlik garantilerini bozabileceği durumlarda yararlıdır. Örneğin, hassas kaynakları yöneten bir sınıfın, metotlarının beklenmedik şekillerde geçersiz kılınmadığından emin olması gerekebilir.

Dart 3 ayrıca ilgili değiştiricileri de tanıttı: base alt sınıfları (implements değil) extends kullanmaya zorlar ve sealed kalıtımı aynı kütüphane ile sınırlandırır. Şimdilik, bir sınıfı tamamen kilitlemenin en basit yolu olan final üzerine odaklanın.

Sınıf tasarımının tamamlandığından ve kalıtımın sadece sorunlara yol açacağından emin olduğunuzda final sınıfları kullanın. Ancak, bunu aşırı kullanmayın - çoğu sınıf genişletilmeye açık kalmaktan fayda sağlar.

challenge icon

Görev

Kolay

Miras alınmasını önlemek isteyebileceğiniz durumları ve nedenlerini gösteren güvenli bir yapılandırma sistemi oluşturalım. Davranışının kalıtım yoluyla değiştirilemeyeceğinden emin olmak için uygulama ayarlarını yöneten bir final sınıfı oluşturacaksınız.

Kodunuzu iki dosyaya ayıracaksınız:

  • config.dart: Yapılandırma sınıflarınızı burada tanımlayın:
    • Genişletilemeyen bir final class AppConfig. Bu sınıfın bir String appName ve String version özelliği, her iki değeri alan bir kurucusu ve display() yazdıran bir [appName] v[version] yöntemi olmalıdır.
    • Bir Feature ve String name özelliğine, her ikisi için bir kurucuya ve bool enabled yazdıran bir status() yöntemine sahip normal (final olmayan) bir [name]: [enabled ? 'ON' : 'OFF'] sınıfı.
    • ExperimentalFeature sınıfını genişleten ve bir Feature özelliği ekleyen bir String warning sınıfı. status() kullanarak @override yöntemini geçersiz kılın; önce super.status() ile üst sınıfın sürümünü çağırın, ardından Warning: [warning] yazdırın.
  • main.dart: Yapılandırma dosyanızı içe aktarın ve final sınıflarıyla normal sınıflar arasındaki farkı gösterin:
    • AppConfig appName ve 'MyApp' version değerleriyle bir '2.0.1' oluşturun, ardından display() çağrısını yapın.
    • Boş bir satır yazdırın.
    • name değeri Feature ve enabled değeri 'Dark Mode' olan bir true oluşturun, ardından status() çağrısını yapın.
    • Boş bir satır yazdırın.
    • name değeri ExperimentalFeature, enabled değeri 'AI Assistant' ve warning değeri false olan bir 'May be unstable' oluşturun, ardından status() çağrısını yapın.

AppConfig sınıfının final olarak işaretlendiğine dikkat edin; bunun nedeni, yapılandırma davranışının tutarlı ve güvenli kalması gerektiğidir — hiçbir alt sınıf ayarların nasıl yönetildiğini değiştirememelidir. Buna karşılık Feature genişletilmeye açık kalır ve ExperimentalFeature sınıfının özel davranış eklemesine olanak tanır.

Beklenen çıktı:

MyApp v2.0.1

Dark Mode: ON

AI Assistant: OFF
Warning: May be unstable

Kendin dene

import 'config.dart';

void main() {
  // TODO: appName 'MyApp' ve version '2.0.1' olan bir AppConfig oluşturun
  // Ardından display() fonksiyonunu çağırın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: name 'Dark Mode' ve enabled true olan bir Feature oluşturun
  // Ardından status() fonksiyonunu çağırın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: name 'AI Assistant' olan bir ExperimentalFeature oluşturun,
  // enabled false ve warning 'May be unstable' olsun
  // Ardından status() fonksiyonunu ç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