Menu
Coddy logo textTech

Tasarım Kalıplarına Giriş

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

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, kendi kodunuzdaki benzer zorlukları çözmek için bu yerleşik şablonları uygulayabilirsiniz.

Tasarım kalıplarını yemek tarifleri gibi düşünün. Bir şefin zaman içinde mükemmelleştirilmiş bir yemeği hazırlamak için bir tarifi takip etmesi gibi, geliştiriciler de kodlarını kendilerinden önceki sayısız programcı tarafından test edilmiş ve geliştirilmiş yollarla yapılandırmak için tasarım kalıplarını kullanırlar.

Tasarım desenleri genellikle üç kategoride gruplandırılır:

Kategori Amaç Örnekler
Yaratımsal Nesnelerin nasıl oluşturulduğu Singleton, Factory
Yapısal Nesnelerin nasıl bir araya getirildiği Adapter, Decorator
Davranışsal Nesnelerin nasıl iletişim kurduğu Observer, Strategy

Aslında bu kurs boyunca farkında olmadan desenleri kullanıyordunuz. Alt sınıfların uygulaması gereken metotlara sahip soyut sınıflar oluşturduğunuzda, Template Method deseninin bir formunu uyguluyordunuz. Sözleşmeleri tanımlamak için arayüzleri kullandığınızda, Strategy deseni için hazırlık yapıyordunuz.

Tasarım desenlerini öğrenmek, size diğer geliştiricilerle ortak bir kelime dağarcığı kazandırır. Karmaşık bir yapıyı ayrıntılı olarak açıklamak yerine, sadece "Burada Factory desenini kullandım" diyebilirsiniz ve deneyimli geliştiriciler yaklaşımınızı hemen anlayacaktır. Takip eden derslerde, PHP'de birkaç temel deseni uygulayacağız.

challenge icon

Görev

Kolay

Tasarım desenlerinin kodu düzenlemeye nasıl yardımcı olduğunu gösteren basit bir mesaj formatlama sistemi oluşturalım. Her bir bileşenin hangi desen kategorisine ait olduğunu belirleyecek ve bir sistemin farklı parçalarının nasıl birlikte çalıştığını göreceksiniz.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • MessageFormatter.php — Mesajları formatlamak için bir sözleşme tanımlayan MessageFormatter adında bir arayüz (interface) oluşturun. format(string $message): string adında tek bir metodu olmalıdır. Bu, behavioral (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 edin ve arayüzü uygulayan (implement) iki sınıf oluşturun:
    • UppercaseFormatterformat() metodu, mesajı büyük harfe dönüştürülmüş olarak döndürür
    • BracketFormatterformat() metodu, mesajı [message] şeklinde köşeli parantez içine alır
  • main.php — Formatters dosyasını dahil edin. İki girdi alacaksınız: bir mesaj dizesi ve bir formatlayıcı türü ("upper" veya "bracket").

    Bir MessageFormatter ve bir mesaj dizesi kabul eden, ardından formatlanmış sonucu döndüren processMessage adında bir fonksiyon oluşturun. Bu fonksiyonun hangi spesifik formatlayıcıyı aldığını bilmesine gerek yoktur — sadece kendisine iletilen nesne üzerinde format() metodunu çağırır.

    Formatlayıcı türü girdisine bağlı olarak uygun formatlayıcı nesnesini oluşturun. Bunu mesajla birlikte processMessage fonksiyonunuza iletin ve sonucu yazdırın.

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

Bu meydan okuma, arayüzlerin, onları kullanan kodu değiştirmeden uygulamaları (implementations) değiştirmenize nasıl olanak tanıdığını gösterir — bu, gelecek derslerde keşfedeceğiniz Strategy gibi desenlerin temelidir.

Kopya kağıdı

Tasarım desenleri, kodu etkili bir şekilde yapılandırmak için şablonlar sağlayan, yaygın programlama sorunlarına yönelik kanıtlanmış çözümlerdir.

Tasarım desenleri üç kategoride gruplandırı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, geliştiriciler arasında ortak bir kelime dağarcığı sağlayarak karmaşık mimari kararların iletilmesini kolaylaştırır.

Kendin dene

<?php
require_once 'Formatters.php';

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

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


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


// TODO: Biçimlendirici ve mesaj ile processMessage fonksiyonunu çağırın, ardından sonucu yazdırın


// TODO: Desen kategorisini yeni bir satıra yazdırın
// Biçim: "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