Tasarım Kalıplarına Giriş
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 51 / 70.
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, desenler bize kodu yapılandırmak için ortak bir kelime dağarcığı ve test edilmiş yaklaşımlar sunar.
Tasarım desenlerini birer şablon gibi düşünün. Size kopyalayabileceğiniz hazır kodlar sunmazlar, ancak belirli zorlukları çözmek için sınıfları ve nesneleri nasıl organize edeceğinizi açıklarlar. Birisi "burada Factory desenini kullan" dediğinde, deneyimli geliştiriciler önerilen genel yapıyı hemen anlarlar.
Tasarım desenleri üç ana kategoriye ayrılır:
| Kategori | Amaç | Örnekler |
|---|---|---|
| Oluşturucu | 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 |
İnceleyeceğimiz desenler, halihazırda öğrendiğiniz OOP kavramları olan arayüzler, kalıtım, çok biçimlilik ve kompozisyon üzerine doğrudan inşa edilmiştir. Her bir desen; esneklik, sürdürülebilirlik veya yeniden kullanılabilirlik sağlamak için bu temel ilkelerden belirli şekillerde yararlanır.
Gelecek derslerde, Singleton, Factory, Observer ve Strategy ile başlayarak birkaç temel deseni uygulayacaksınız. Bu desenleri anlamak, mevcut kod tabanlarındaki yaygın çözümleri tanımanıza ve kendi projelerinizde daha iyi mimari kararlar vermenize yardımcı olacaktır.
Görev
KolayTasarım deseni bilgilerini birden fazla dosya arasında düzenleyen basit bir desen kataloğu sistemi oluşturalım. Bu, iyi kod organizasyonu pratiği yaparken desenlerin nasıl kategorize edildiğini anlamanıza yardımcı olacaktır.
Farklı sorumlulukları ayırmak için üç dosya oluşturacaksınız:
Pattern.cs:Patternsad alanı (namespace) içinde tek bir tasarım desenini temsil eden birPatternsınıfı tanımlayın. Her desenin birName,Category(Creational, Structural veya Behavioral) ve birDescriptionözelliği olmalıdır. Şu formatta bir dize döndüren birGetSummary()metodu ekleyin:[{Category}] {Name}: {Description}PatternCatalog.cs:Patternsad alanı içinde bir desen koleksiyonunu yöneten birPatternCatalogsınıfı oluşturun. Kataloğunuz desen ekleyebilmeli ve bu kategoriyle eşleşen tüm desenlerin listesini döndüren birGetPatternsByCategory(string category)metoduna sahip olmalıdır. Ayrıca, katalogdaki tüm desenler için özet dizelerinden oluşan bir liste döndüren birGetAllSummaries()metodu ekleyin.Program.cs: Bir katalog oluşturup girdilere göre desenlerle doldurarak her şeyi bir araya getirin. Ardından, kategoriye göre filtrelenmiş desenleri görüntüleyin.
Aşağıdaki girdileri alacaksınız:
- Eklenecek desen sayısı
- Her desen için: ad, kategori ve açıklama içeren üç satır
- Filtreleme yapılacak bir kategori
Tüm desenleri kataloğunuza ekledikten sonra, filtre kategorisiyle eşleşen desenlerin özetlerini her satıra bir tane gelecek şekilde yazdırın. Hiçbir desen eşleşmezse, No patterns found yazdırın.
Örneğin, girdiler şunlarsa:
3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
CreationalÇıktı şöyle olmalıdır:
[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact classBu zorluk, ilgili sınıfları ayrı dosyalara ayırmanın kod tabanınızı nasıl temiz ve sürdürülebilir tuttuğunu gösterir - bu ilke, gelecek derslerde gerçek tasarım desenlerini uygularken daha da önemli hale gelecektir!
Kopya kağıdı
Tasarım desenleri, yazılım geliştirmedeki yaygın sorunlara yönelik kanıtlanmış çözümlerdir. Kopyalanacak tam koddan ziyade, sınıfları ve nesneleri düzenlemek için taslaklar sağlarlar.
Tasarım desenleri üç ana kategoriye ayrılır:
| Kategori | Amaç | Örnekler |
|---|---|---|
| Yaratımsal (Creational) | Nesnelerin nasıl oluşturulduğu | Singleton, Factory |
| Yapısal (Structural) | Nesnelerin nasıl bir araya getirildiği | Adapter, Decorator |
| Davranışsal (Behavioral) | Nesnelerin nasıl iletişim kurduğu | Observer, Strategy |
Tasarım desenleri; esneklik, sürdürülebilirlik ve yeniden kullanılabilirlik elde etmek için arayüzler (interfaces), kalıtım (inheritance), çok biçimlilik (polymorphism) ve kompozisyon (composition) gibi OOP kavramları üzerine inşa edilir.
Kendin dene
using System;
using System.Collections.Generic;
using Patterns;
class Program
{
public static void Main(string[] args)
{
// Desen sayısını oku
int n = Convert.ToInt32(Console.ReadLine());
// Yeni bir PatternCatalog oluştur
PatternCatalog catalog = new PatternCatalog();
// TODO: Her bir desenin detaylarını (name, category, description) oku
// ve onları kataloğa ekle
for (int i = 0; i < n; i++)
{
string name = Console.ReadLine();
string category = Console.ReadLine();
string description = Console.ReadLine();
// TODO: Bir Pattern oluştur ve onu kataloğa ekle
}
// Filtrelenecek kategoriyi oku
string filterCategory = Console.ReadLine();
// TODO: Filtre kategorisine göre desenleri al
// ve özetlerini yazdır
// Eğer hiçbir desen eşleşmezse, "No patterns found" yazdır
}
}
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 Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarı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ı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları