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 kalıplarını planlar olarak düşünün. Kopyalamanız için size tam olarak yazılmış kod vermezler; ancak belirli zorlukları çözmek için sınıfları ve nesneleri nasıl düzenleyeceğinizi açıklarlar. Birisi “burada Factory kalıbını kullanın” dediğinde, deneyimli geliştiriciler önerilen genel yapıyı hemen anlar.

Tasarım kalıpları üç ana kategoriye ayrılır:

KategoriAmaçÖrnekler
YaratımsalNesnelerin 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.

Sonraki derslerde Singleton, Factory, Observer ve Strategy ile başlayarak birkaç temel kalıbı uygulayacaksın. Bu kalıpları anlamak, mevcut kod tabanlarındaki yaygın çözümleri tanımana ve kendi projelerinde daha iyi mimari kararlar vermene yardımcı olacak.

challenge icon

Görev

Kolay

Birden fazla dosyadaki tasarım kalıbı bilgilerini düzenleyen basit bir kalıp kataloğu sistemi oluşturalım. Bu, iyi kod organizasyonu pratiği yaparken kalıpların nasıl kategorilere ayrıldığını anlamana yardımcı olacak.

Farklı sorumlulukları ayırmak için üç dosya oluşturacaksın:

  • Pattern.cs: Tek bir tasarım kalıbını temsil eden Pattern sınıfını Patterns ad alanında tanımla. Her kalıbın bir Name, Category (Creational, Structural veya Behavioral) ve bir Description değeri olmalıdır. Biçimlendirilmiş bir dize döndüren GetSummary() metodunu ekle: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Bir kalıp koleksiyonunu yöneten PatternCatalog sınıfını Patterns ad alanında oluştur. Kataloğun kalıp ekleyebilmesi ve bu kategoriyle eşleşen tüm kalıpların listesini döndüren GetPatternsByCategory(string category) metoduna sahip olması gerekir. Ayrıca katalogdaki tüm kalıplar için özet dizelerinin listesini döndüren bir GetAllSummaries() metodu ekle.
  • Program.cs: Bir katalog oluşturarak ve girdiye dayalı kalıplarla doldurarak her şeyi bir araya getir. Ardından kategoriye göre filtrelenmiş kalıpları görüntüle.

Aşağıdaki girdileri alacaksın:

  • Eklenecek kalıp sayısı
  • Her kalıp için ad, kategori ve açıklamayı içeren üç satır
  • Filtrelenecek kategori

Tüm kalıpları kataloğuna ekledikten sonra, filtre kategorisiyle eşleşen kalıpların özetlerini her satıra bir tane gelecek şekilde yazdır. Hiçbir kalıp eşleşmezse No patterns found yazdır.

Örneğin girdiler şöyleyse:

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 görev, ilgili sınıfları ayrı dosyalarda düzenlemenin kod tabanını nasıl temiz ve sürdürülebilir tuttuğunu gösterir - yaklaşan derslerde gerçek tasarım kalıplarını uygulamaya başladığında daha da önemli hale gelecek bir ilke!

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

Kendi başına pratik yap: Online C# derleyicisi