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.
Görev
KolayMiras 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 birString appNameveString versionözelliği, her iki değeri alan bir kurucusu vedisplay()yazdıran bir[appName] v[version]yöntemi olmalıdır. - Bir
FeatureveString nameözelliğine, her ikisi için bir kurucuya vebool enabledyazdıran birstatus()yöntemine sahip normal (final olmayan) bir[name]: [enabled ? 'ON' : 'OFF']sınıfı. ExperimentalFeaturesınıfını genişleten ve birFeatureözelliği ekleyen birString warningsınıfı.status()kullanarak@overrideyöntemini geçersiz kılın; öncesuper.status()ile üst sınıfın sürümünü çağırın, ardındanWarning: [warning]yazdırın.
- Genişletilemeyen bir
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:AppConfigappName ve'MyApp'version değerleriyle bir'2.0.1'oluşturun, ardındandisplay()çağrısını yapın.- Boş bir satır yazdırın.
- name değeri
Featureve enabled değeri'Dark Mode'olan birtrueoluşturun, ardındanstatus()ç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ğerifalseolan bir'May be unstable'oluşturun, ardındanstatus()ç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 unstableKendin 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
}
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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi