Menu
Coddy logo textTech

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:

KategoriAmaçÖrnekler
OluşturucuNesnelerin nasıl oluşturulduğuSingleton, Factory
YapısalNesnelerin nasıl birleştirildiğiAdapter, Decorator
DavranışsalNesnelerin nasıl iletişim kurduğuObserver, 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.

challenge icon

Görev

Kolay

Tasarı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: Patterns ad alanı (namespace) içinde tek bir tasarım desenini temsil eden bir Pattern sınıfı tanımlayın. Her desenin bir Name, Category (Creational, Structural veya Behavioral) ve bir Description özelliği olmalıdır. Şu formatta bir dize döndüren bir GetSummary() metodu ekleyin: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Patterns ad alanı içinde bir desen koleksiyonunu yöneten bir PatternCatalog sınıfı oluşturun. Kataloğunuz desen ekleyebilmeli ve bu kategoriyle eşleşen tüm desenlerin listesini döndüren bir GetPatternsByCategory(string category) metoduna sahip olmalıdır. Ayrıca, katalogdaki tüm desenler için özet dizelerinden oluşan bir liste döndüren bir GetAllSummaries() 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 class

Bu 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:

KategoriAmaçÖrnekler
Yaratımsal (Creational)Nesnelerin nasıl oluşturulduğuSingleton, Factory
Yapısal (Structural)Nesnelerin nasıl bir araya getirildiğiAdapter, Decorator
Davranışsal (Behavioral)Nesnelerin nasıl iletişim kurduğuObserver, 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
    }
}
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