Tasarım Kalıplarına 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ı yemek tarifleri gibi düşünün. Bir şefin her seferinde ekmek yapmak için yeni bir yol icat etmemesi gibi, programcılar da onlarca yıl boyunca rafine edilmiş kalıpları kullanırlar. Bu kalıplar, halihazırda öğrendiğiniz OOP kavramlarından — classes, inheritance, interfaces ve polymorphism — yararlanır ve belirli sorunları çözmek için bunları özel şekillerde birleştirir.
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
KolayTasarım desenlerinin kodu kategoriye göre nasıl organize ettiğ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ız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
patterns.dart: Üç değere sahipPatternCategoryadında bir enum oluşturun:creational,structuralvebehavioral. Her birinin amacını açıklayan birString descriptionalanı olmalıdır:creational: "Handles object creation"structural: "Handles object composition"behavioral: "Handles object communication"
Problemadında bir sınıf oluşturun. Bu sınıfın birString namealanı ve birPatternCategory categoryalanı olmalıdır. Şu formatta bir dize döndüren birsuggest()metodu ekleyin:[name] -> Use a [category description] patternmain.dart: Desenler dosyanızı içe aktarın ve farklı problemlerin farklı desen kategorileriyle nasıl eşleştiğini gösterin. Üç taneProblemörneği oluşturun:- Kategorisi
creationalolanEnsure single database connectionisimli bir problem - Kategorisi
structuralolanMake old API work with new systemisimli bir problem - Kategorisi
behavioralolanNotify users when data changesisimli bir problem
suggest()metodunu çağırın ve sonuçları yazdırın.- Kategorisi
Bu meydan okuma, tasarım desenlerinin çözdükleri problem türüne göre nasıl kategorize edildiğini görmenize yardımcı olur - gelecek derslerde belirli desenleri öğrenmeye başladığınızda bu temel 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 patternKopya kağıdı
Tasarım desenleri, yaygın programlama problemlerine yönelik kanıtlanmış çözümlerdir. Bunlar, OOP kavramlarını (sınıflar, kalıtım, arayüzler, polimorfizm) belirli şekillerde birleştiren şablonlardır.
Tasarım desenleri üç kategoride gruplandırılır:
| Kategori | Amaç | Örnekler |
|---|---|---|
| Yaratımsal (Creational) | Nesnelerin nasıl oluşturulduğu | Singleton, Factory |
| Yapısal (Structural) | Nesnelerin nasıl birleştirildiği | Adapter, Decorator |
| Davranışsal (Behavioral) | Nesnelerin nasıl iletişim kurduğu | Observer, Strategy |
Kendin 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
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı