Tasarım Desenlerine Giriş
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 89 / 110.
Tasarım desenleri, yazılım geliştirirken geliştiricilerin tekrar tekrar karşılaştığı yaygın sorunlara yönelik kanıtlanmış çözümlerdir. Her seferinde tekerleği yeniden icat etmek yerine, benzer zorlukları tutarlı ve sürdürülebilir bir şekilde çözmek için bu yerleşik şablonları uygulayabilirsiniz.
Tasarım kalıplarını tarifler gibi düşün. Bir şef her seferinde ekmek yapmak için yeni bir yöntem icat etmediği gibi, programcılar da onlarca yıl boyunca geliştirilmiş kalıpları kullanır. Bu kalıplar, daha önce öğrendiğin OOP kavramlarından (sınıflar, kalıtım, arayüzler ve çok biçimlilik) yararlanır ve belirli sorunları çözmek için bunları belirli şekillerde bir araya getirir.
Tasarım desenleri genellikle üç kategoriye ayrılır:
| Kategori | Amaç | Örnekler |
|---|---|---|
| Yaratımsal | Nesnelerin nasıl oluşturulduğu | Singleton, Factory |
| Yapısal | Nesnelerin nasıl birleştirildiği | Adapter, Decorator |
| Davranışsal | Nesnelerin nasıl iletişim kurduğu | Observer, Strategy |
Gelecek derslerde, her kategoriden belirli desenleri öğreneceksiniz. Her desen farklı bir sorunu ele alır: bir sınıfın yalnızca bir örneğinin mevcut olduğundan emin olmak, tam sınıfları belirtmeden nesneler oluşturmak veya nesnelerin değişiklikleri diğerlerine bildirmesine izin vermek. Her bir deseni ne zaman ve neden kullanacağınızı anlamak, onu nasıl uygulayacağınızı bilmek kadar önemlidir.
Görev
KolayDesenlerin kodu kategorilere göre nasıl düzenlediğini gösteren basit bir problem çözme sistemi oluşturalım! Farklı yazılım zorluklarını sınıflandıran ve bunları çözmeye hangi tür desenin yardımcı olabileceğini öneren bir yapı oluşturacaksın.
Kodunu iki dosyaya ayıracaksın:
patterns.dart: Üç değere sahipPatternCategoryadlı bir enum oluştur:creational,structuralvebehavioral. Her birinin amacını açıklayan birString descriptionalanı olmalı:creational: "Handles object creation"structural: "Handles object composition"behavioral: "Handles object communication"
Problemadlı bir sınıf oluştur. Bu sınıfın birString namealanı ve birPatternCategory categoryalanı olmalı.suggest()biçiminde bir dize döndüren[name] -> Use a [category description] patternmetodunu ekle.main.dart: Desen dosyanı içe aktar ve farklı problemlerin farklı desen kategorileriyle nasıl eşleştiğini göster. ÜçProblemörneği oluştur:Ensure single database connectionadlı ve kategorisicreationalolan bir problemMake old API work with new systemadlı ve kategorisistructuralolan bir problemNotify users when data changesadlı ve kategorisibehavioralolan bir problem
suggest()metodunu çağır ve sonuçları yazdır.
Bu çalışma, tasarım desenlerinin çözdükleri problem türüne göre nasıl kategorilere ayrıldığını görmene yardımcı olur. Bu, gelecek derslerde belirli desenleri öğrenmeye başlarken önemli bir kavramdır!
Beklenen çıktı:
Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication patternKendin dene
import 'patterns.dart';
void main() {
// TODO: Üç Problem örneği oluşturun:
// 1. name: "Ensure single database connection", category: creational
// 2. name: "Make old API work with new system", category: structural
// 3. name: "Notify users when data changes", category: behavioral
// TODO: Her problem üzerinde suggest() metodunu çağırın ve sonuçları yazdı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