Menu
Coddy logo textTech

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:

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

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.

challenge icon

Görev

Kolay

Desenlerin 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 sahip PatternCategory adlı bir enum oluştur: creational, structural ve behavioral. Her birinin amacını açıklayan bir String description alanı olmalı:
    • creational: "Handles object creation"
    • structural: "Handles object composition"
    • behavioral: "Handles object communication"
    Ayrıca bir yazılım zorluğunu temsil eden Problem adlı bir sınıf oluştur. Bu sınıfın bir String name alanı ve bir PatternCategory category alanı olmalı. suggest() biçiminde bir dize döndüren [name] -> Use a [category description] pattern metodunu 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 connection adlı ve kategorisi creational olan bir problem
    • Make old API work with new system adlı ve kategorisi structural olan bir problem
    • Notify users when data changes adlı ve kategorisi behavioral olan bir problem
    Her problem üzerinde 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 pattern

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
}
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 Dart derleyicisi