Menu
Coddy logo textTech

Tasarım Desenlerine Giriş

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 70 / 91.

Tasarım kalıpları, geliştiricilerin yazılım oluştururken tekrar tekrar karşılaştığı yaygın sorunlara yönelik kanıtlanmış çözümlerdir. Her seferinde tekerleği yeniden icat etmek yerine, kendi kodunuzdaki benzer zorlukları çözmek için bu yerleşik şablonları uygulayabilirsiniz.

Tasarım kalıplarını tarifler olarak düşünün. Tıpkı bir şefin zaman içinde mükemmelleştirilmiş bir yemek hazırlamak için bir tarifi takip etmesi gibi, geliştiriciler de kodlarını kendilerinden önce sayısız programcı tarafından test edilmiş ve geliştirilmiş şekillerde yapılandırmak için tasarım kalıplarını kullanır.

Tasarım kalıpları genellikle üç 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

Aslında bu kurs boyunca farkına varmadan kalıpları kullandın. Alt sınıfların uygulaması gereken yöntemlere sahip soyut sınıflar oluşturduğunda, Şablon Yöntemi kalıbının bir biçimini uyguluyordun. Sözleşmeleri tanımlamak için arayüzleri kullandığında ise Strateji kalıbına zemin hazırlıyordun.

Tasarım pattern’lerini öğrenmek, diğer geliştiricilerle ortak bir kelime dağarcığı oluşturmanızı sağlar. Karmaşık bir yapıyı ayrıntılı olarak açıklamak yerine, yalnızca "Burada Factory pattern kullandım" diyebilirsiniz ve deneyimli geliştiriciler yaklaşımınızı hemen anlayacaktır. Sonraki derslerde PHP’de birkaç temel pattern uygulayacağız.

challenge icon

Görev

Kolay

Tasarım kalıplarının kodu düzenlemeye nasıl yardımcı olduğunu gösteren basit bir mesaj biçimlendirme sistemi oluşturalım. Her bileşenin hangi kalıp kategorisine ait olduğunu belirleyecek ve bir sistemin farklı bölümlerinin birlikte nasıl çalıştığını göreceksin.

Kodunu üç dosyaya ayıracaksın:

  • MessageFormatter.php: Mesajları biçimlendirmek için bir sözleşme tanımlayan MessageFormatter adlı bir arayüz oluştur. Bu arayüzde tek bir format(string $message): string metodu bulunmalı. Bu, davranışsal kategoriyi temsil eder. Nesnelerin nasıl iletişim kurduğunu ve verileri nasıl işlediğini tanımlar.
  • Formatters.php: MessageFormatter dosyasını dahil et ve arayüzü uygulayan iki sınıf oluştur:
    • UppercaseFormatter: format() metodu, mesajı büyük harfe dönüştürülmüş hâliyle döndürür
    • BracketFormatter: format() metodu, mesajı [message] gibi köşeli parantezlerin içine alır
  • main.php: Formatters dosyasını dahil et. İki girdi alacaksın: bir mesaj dizesi ve bir biçimlendirici türü ("upper" veya "bracket").

    Bir processMessage ve mesaj dizesi kabul eden, ardından biçimlendirilmiş sonucu döndüren MessageFormatter adlı bir işlev oluştur. Bu işlevin hangi özel biçimlendiriciyi aldığını bilmesine gerek yoktur. Kendisine geçirilen nesne üzerinde yalnızca format() metodunu çağırır.

    Biçimlendirici türü girdisine göre uygun biçimlendirici nesnesini oluştur. Bu nesneyi mesajla birlikte processMessage işlevine gönder ve sonucu yazdır.

    Yeni bir satırda, bu yapının hangi kalıp kategorisini temsil ettiğini yazdır. Bir arayüz aracılığıyla birbirinin yerine kullanılabilen davranışları tanımladığımız için şunu yazdır: Pattern category: Behavioral

Bu alıştırma, arayüzlerin, onları kullanan kodu değiştirmeden uygulamaları değiştirmene nasıl olanak tanıdığını gösterir: Bu, gelecek derslerde inceleyeceğin Strategy gibi kalıpların temelini oluşturur.

Kendin dene

<?php
require_once 'Formatters.php';

// Girdiyi oku
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: MessageFormatter kabul eden processMessage adında bir fonksiyon oluştur
// ve bir mesaj dizesi, ardından biçimlendirilmiş sonucu döndürür


// TODO: $formatterType ("upper" veya "bracket") değerine göre uygun biçimlendiriciyi oluştur


// TODO: processMessage'ı biçimlendirici ve mesaj ile çağır, ardından sonucu yazdır


// TODO: Print the pattern category on a new line
// Format: "Pattern category: Behavioral"

?>
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 PHP derleyicisi