SlideShare a Scribd company logo
1 of 26
Design Patterns in PHP
( Tasarım Kalıpları )
Haldun Buyorük
07.04.2018
Design Patterns ne değildir?
Design Patterns ne
degildir?
● Programlama dili
● Framework
● Kütüphane
● Paket
değildir.
Design Patterns
Nedir?
Devamlı tekrar eden yazılım
sorularına;
● Esnek
● Yeniden kullanılabilir
● Bağımlılıkları azaltan
çözümler sunmak için kullanılan
kalıplardır.
Design Patterns
Kod karmaşıklığını engeller, performansı arttır ve gereksiz kodlamayı azaltacağından
dolayı yazılım sürecini kısaltır.
Diyelim ki büyük bir projede çalışıyorsunuz, sizden önce çok fazla yazılımcı bu projede bir
şeyler geliştirmişler. Fakat bu kalıplara uymadıkları için proje yöneticiniz tarafından
sizden değişiklik istendiğinde projenin çok fazla yerinin okunması ve kod değişikliği
yapılması gerekebilir. Bu da haliyle çok zaman alacaktır.
Aslında kullandığımız paketler, frameworkler bu kalıpları kullanarak ortaya okunabilir,
yeniden kullanılabilir, esnetilebilir çözümler sunmaktadır.
Design Pattern Tipleri
● Creational Design Patterns (Yaratımsal Kalıplar)
Yaratımsal tasarım kalıpları, nesnel yaratım mekanizmalarını ele alan ve duruma uygun bir şekilde
nesneler yaratmaya çalışan tasarım kalıplarıdır.
● Structural Design Patterns (Yapısal Kalıplar)
Yapısal tasarım kalıpları, nesneler arasındaki ilişkileri gerçekleştirmenin basit bir yolunu tanımlayarak
tasarımı kolaylaştıran kalıplardır..
● Behavioral Design Patterns (Davranışsal Kalıplar)
Davranışsal tasarım kalıpları, nesneler arasındaki ortak iletişim kalıplarını tanımlayan tasarım
kalıplarıdır. Bu kalıplar iletişimi gerçekleştirerek esnekliği arttırır.
Dünya genelinde 250’den fazla tasarım kalıbı bulunmaktadır. Fakat bunlardan sadece 23 tanesi standart olarak kabul
edilmiştir.
Creational Design Patterns
(Yaratımsal Kalıplar)
● Simple Factory (basit fabrika)
● Factory Method (fabrika methodu)
● Abstract Factory (soyut fabrika methodu)
● Builder (kurucu)
● Prototype (prototip)
● Singleton (yalnız nesne)
Structural Design Patterns
(Yapısal Kalıplar)
● Adapter (dönüştürücü)
● Bridge (köprü)
● Composite (bileşik)
● Decorator (dekaratör)
● Facade (dış cephe)
● Flyweight (hafifleştirici)
● Proxy (vekil)
benzer nesnelerle
olabildiğince fazla veri
paylaşarak bellek
kullanımını en aza
indirmek
Behavioral Design Patterns
(Davranışsal Kalıplar)
● Chain of Responsibility (sorumluluk zinciri)
● Command (komut)
● Iterator (öteleme)
● Mediator (aracı)
● Memento (hatırlayıcı)
● Observer (gözlemci)
● Visitor (ziyaretçi)
● Strategy (strateji)
● State (durum)
● Template Method (şablon)
Peki bunları nasıl
kullanıyoruz?
Prototype
Kısacası, var olan bir nesnenin bir kopyasını oluşturup kullanma yöntemidir. Sıfırdan bir
nesneyi oluşturma ve kurma sürecini ortadan kaldırır.
clone deyimi var olan nesnenizi o anki özellikleri ile kopyalar. Eğer new söz dizimini
kullanırsanız yani nesneyi tekrardan oluşturursanız, size özelliklere atadığınız default
değerlere sahip, boş bir nesne elde edersiniz ve önceden hesaplanan/ayarlanan değeri
kaybedersiniz.
Bu yüzden Prototype patterni kullanılırken nesne özelliklerinin tamamını
değiştirmeyeceğinizden emin olmanız gerekmektedir.
Prototype İşe alım yapan bir firmanın her çalışana aynı laptop, ekran,
mouse verdiğini düşünelim.
Prototype patterni kullanarak
(objeyi klonlayarak) her çalışan
için tekrar tekrar laptop,ekran,
mouse gibi tanımlamalar
yapmaya gerek yoktur.
Singleton
Bir nesne düşünelim ve uygulamamızda bir daha türetilmemek, üzerine yazılmaması gerektiğini biliyoruz.
Bunun için Singleton patternini kullanmamız gerekmektedir. Örneğin Bir şirketin CEO’su. Bir devlet
başkanı, tek kalmış bir kitap..
Builder
Çok özellikli bir nesne oluştururken __construct metodumuzun uzun uzadıya gittiği
durumlar olabilir. Bu gibi durumlarda çoğu zaman metodun aldığı parametre
sıralamasına bakmak için defalarca koda bakmamız gerekebilir. Builder patterni bizi bu
kod kirliliğinden kurtarır.
Örneğin Akşam arkadaşlarımızla pizza siparişi vereceğiz. 4 kişi 2 tane orta boy pizza
siparişi vermek istiyoruz. İçerisinde de peynir, sosis, et olsun mantar olmasın istedik.
Builder
Builder
Aşırı uzun parametreler ile işi çözmek yerine basitçe bir builder oluşturarak daha okunaklı ve
kullanışlı hale getirebiliriz.
Adapter
Dönüştürücü modeli, bir sınıfın arayüzünü, bir başka sınıfın beklediği arayüze
çevirir. Uyumsuz arayüzleri sebebiyle çalışamayacak sınıfların bir arada
çalışmalarını sağlar.
Bu kalıbın bize sağladığı kolaylık kullandığınız servisin methodlarında değişiklik
olduğunda merkezi bir değişiklik ile karmaşadan kurtulmanızdır.
Örneğin Ödeme servisleri kullanacaksınız. Paypal, PayU gibi. PaypalAdapter’i
oluşturuyoruz ve bunu Paypal interface ‘i gibi kullanıyoruz.
Adapter
Örneğin Paypal’in sdk sini kullaniyorsunuz.
Araya bir adapter(bağdaştırıcı) koyduğunuzda, PayPal API da
fonksiyon ismini degistirdiginde sizin yalnizca adapter classindaki
fonksiyon ismini degistirmeniz gerekir.
Paypal SDK
Bridge
Tasarımın soyutlanıp, modüllerin
birbirinden bağımsız olarak çalışmasını
sağlar.
Observer
Nesneler arasındaki bağımlılığı tanımlar, böylece bir nesneyi durum
değiştirdiğinde, tüm bağımlılarına bildirilir.
Yani sistemdeki bir obje durum değiştirdiğinde bunun bağımlı olduğu
gözlemcileri bilgilendirir.
Örneğin: Twitter AnkaraPHP grubunu takip ediyorsunuz. AnkaraPHP grubu
bir tweet attı ve twitter sizi bilgilendirdi.
Observer
“Değişimi hesaba katmayan bir tasarım
gelecekte büyük ölçüde yeniden
tasarlanma riskini taşıyor.”
- Erich Gamma
Teşekkürler!
Github:
github.com/haldunbuyoruk
Twitter:
twitter.com/haldunbuyoruk
Linkedin:
linkedin.com/in/haldun-
buyor%C3%BCk-083269b0

More Related Content

Similar to Design Patterns in PHP

Xsteel danismani
Xsteel danismaniXsteel danismani
Xsteel danismani
sersld85
 
C sharp-2013
C sharp-2013C sharp-2013
C sharp-2013
sersld30
 
Xsteel ornek
Xsteel ornekXsteel ornek
Xsteel ornek
sersld85
 
Programlama ornekleri
Programlama ornekleriProgramlama ornekleri
Programlama ornekleri
sersld96
 
Xsteel egitmeni
Xsteel egitmeniXsteel egitmeni
Xsteel egitmeni
sersld85
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2
major5
 
Xsteel ogretmeni
Xsteel ogretmeniXsteel ogretmeni
Xsteel ogretmeni
sersld85
 

Similar to Design Patterns in PHP (20)

Clean code & refactoring
Clean code & refactoringClean code & refactoring
Clean code & refactoring
 
Xsteel danismani
Xsteel danismaniXsteel danismani
Xsteel danismani
 
Angular Framework (Tanıtım Sunumu) - 2024
Angular Framework (Tanıtım Sunumu) - 2024Angular Framework (Tanıtım Sunumu) - 2024
Angular Framework (Tanıtım Sunumu) - 2024
 
Bdd
BddBdd
Bdd
 
C sharp-2013
C sharp-2013C sharp-2013
C sharp-2013
 
GDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme TeknikleriGDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme Teknikleri
 
MongoDB ve C# Driver'ı
MongoDB ve C# Driver'ıMongoDB ve C# Driver'ı
MongoDB ve C# Driver'ı
 
Xsteel ornek
Xsteel ornekXsteel ornek
Xsteel ornek
 
OktoPeople Kullanıcı Deneyimi & Kullanılabilirlik Proje Süreçleri
OktoPeople Kullanıcı Deneyimi & Kullanılabilirlik Proje SüreçleriOktoPeople Kullanıcı Deneyimi & Kullanılabilirlik Proje Süreçleri
OktoPeople Kullanıcı Deneyimi & Kullanılabilirlik Proje Süreçleri
 
AngularJS sunumu
AngularJS sunumuAngularJS sunumu
AngularJS sunumu
 
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
 
Implementation.pptx
Implementation.pptxImplementation.pptx
Implementation.pptx
 
Yazılım Gereksinim Mühendisliği Semineri
Yazılım Gereksinim Mühendisliği SemineriYazılım Gereksinim Mühendisliği Semineri
Yazılım Gereksinim Mühendisliği Semineri
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Programlama ornekleri
Programlama ornekleriProgramlama ornekleri
Programlama ornekleri
 
Xsteel egitmeni
Xsteel egitmeniXsteel egitmeni
Xsteel egitmeni
 
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2
 
Cevik Yaklasim, Scrum ve XP Pratikleri
Cevik Yaklasim, Scrum ve XP PratikleriCevik Yaklasim, Scrum ve XP Pratikleri
Cevik Yaklasim, Scrum ve XP Pratikleri
 
Xsteel ogretmeni
Xsteel ogretmeniXsteel ogretmeni
Xsteel ogretmeni
 

Design Patterns in PHP

  • 1. Design Patterns in PHP ( Tasarım Kalıpları ) Haldun Buyorük 07.04.2018
  • 2. Design Patterns ne değildir?
  • 3. Design Patterns ne degildir? ● Programlama dili ● Framework ● Kütüphane ● Paket değildir.
  • 4. Design Patterns Nedir? Devamlı tekrar eden yazılım sorularına; ● Esnek ● Yeniden kullanılabilir ● Bağımlılıkları azaltan çözümler sunmak için kullanılan kalıplardır.
  • 5. Design Patterns Kod karmaşıklığını engeller, performansı arttır ve gereksiz kodlamayı azaltacağından dolayı yazılım sürecini kısaltır. Diyelim ki büyük bir projede çalışıyorsunuz, sizden önce çok fazla yazılımcı bu projede bir şeyler geliştirmişler. Fakat bu kalıplara uymadıkları için proje yöneticiniz tarafından sizden değişiklik istendiğinde projenin çok fazla yerinin okunması ve kod değişikliği yapılması gerekebilir. Bu da haliyle çok zaman alacaktır. Aslında kullandığımız paketler, frameworkler bu kalıpları kullanarak ortaya okunabilir, yeniden kullanılabilir, esnetilebilir çözümler sunmaktadır.
  • 6. Design Pattern Tipleri ● Creational Design Patterns (Yaratımsal Kalıplar) Yaratımsal tasarım kalıpları, nesnel yaratım mekanizmalarını ele alan ve duruma uygun bir şekilde nesneler yaratmaya çalışan tasarım kalıplarıdır. ● Structural Design Patterns (Yapısal Kalıplar) Yapısal tasarım kalıpları, nesneler arasındaki ilişkileri gerçekleştirmenin basit bir yolunu tanımlayarak tasarımı kolaylaştıran kalıplardır.. ● Behavioral Design Patterns (Davranışsal Kalıplar) Davranışsal tasarım kalıpları, nesneler arasındaki ortak iletişim kalıplarını tanımlayan tasarım kalıplarıdır. Bu kalıplar iletişimi gerçekleştirerek esnekliği arttırır. Dünya genelinde 250’den fazla tasarım kalıbı bulunmaktadır. Fakat bunlardan sadece 23 tanesi standart olarak kabul edilmiştir.
  • 7. Creational Design Patterns (Yaratımsal Kalıplar) ● Simple Factory (basit fabrika) ● Factory Method (fabrika methodu) ● Abstract Factory (soyut fabrika methodu) ● Builder (kurucu) ● Prototype (prototip) ● Singleton (yalnız nesne)
  • 8. Structural Design Patterns (Yapısal Kalıplar) ● Adapter (dönüştürücü) ● Bridge (köprü) ● Composite (bileşik) ● Decorator (dekaratör) ● Facade (dış cephe) ● Flyweight (hafifleştirici) ● Proxy (vekil) benzer nesnelerle olabildiğince fazla veri paylaşarak bellek kullanımını en aza indirmek
  • 9. Behavioral Design Patterns (Davranışsal Kalıplar) ● Chain of Responsibility (sorumluluk zinciri) ● Command (komut) ● Iterator (öteleme) ● Mediator (aracı) ● Memento (hatırlayıcı) ● Observer (gözlemci) ● Visitor (ziyaretçi) ● Strategy (strateji) ● State (durum) ● Template Method (şablon)
  • 11.
  • 12. Prototype Kısacası, var olan bir nesnenin bir kopyasını oluşturup kullanma yöntemidir. Sıfırdan bir nesneyi oluşturma ve kurma sürecini ortadan kaldırır. clone deyimi var olan nesnenizi o anki özellikleri ile kopyalar. Eğer new söz dizimini kullanırsanız yani nesneyi tekrardan oluşturursanız, size özelliklere atadığınız default değerlere sahip, boş bir nesne elde edersiniz ve önceden hesaplanan/ayarlanan değeri kaybedersiniz. Bu yüzden Prototype patterni kullanılırken nesne özelliklerinin tamamını değiştirmeyeceğinizden emin olmanız gerekmektedir.
  • 13. Prototype İşe alım yapan bir firmanın her çalışana aynı laptop, ekran, mouse verdiğini düşünelim. Prototype patterni kullanarak (objeyi klonlayarak) her çalışan için tekrar tekrar laptop,ekran, mouse gibi tanımlamalar yapmaya gerek yoktur.
  • 14. Singleton Bir nesne düşünelim ve uygulamamızda bir daha türetilmemek, üzerine yazılmaması gerektiğini biliyoruz. Bunun için Singleton patternini kullanmamız gerekmektedir. Örneğin Bir şirketin CEO’su. Bir devlet başkanı, tek kalmış bir kitap..
  • 15. Builder Çok özellikli bir nesne oluştururken __construct metodumuzun uzun uzadıya gittiği durumlar olabilir. Bu gibi durumlarda çoğu zaman metodun aldığı parametre sıralamasına bakmak için defalarca koda bakmamız gerekebilir. Builder patterni bizi bu kod kirliliğinden kurtarır. Örneğin Akşam arkadaşlarımızla pizza siparişi vereceğiz. 4 kişi 2 tane orta boy pizza siparişi vermek istiyoruz. İçerisinde de peynir, sosis, et olsun mantar olmasın istedik.
  • 17. Builder Aşırı uzun parametreler ile işi çözmek yerine basitçe bir builder oluşturarak daha okunaklı ve kullanışlı hale getirebiliriz.
  • 18.
  • 19. Adapter Dönüştürücü modeli, bir sınıfın arayüzünü, bir başka sınıfın beklediği arayüze çevirir. Uyumsuz arayüzleri sebebiyle çalışamayacak sınıfların bir arada çalışmalarını sağlar. Bu kalıbın bize sağladığı kolaylık kullandığınız servisin methodlarında değişiklik olduğunda merkezi bir değişiklik ile karmaşadan kurtulmanızdır. Örneğin Ödeme servisleri kullanacaksınız. Paypal, PayU gibi. PaypalAdapter’i oluşturuyoruz ve bunu Paypal interface ‘i gibi kullanıyoruz.
  • 20. Adapter Örneğin Paypal’in sdk sini kullaniyorsunuz. Araya bir adapter(bağdaştırıcı) koyduğunuzda, PayPal API da fonksiyon ismini degistirdiginde sizin yalnizca adapter classindaki fonksiyon ismini degistirmeniz gerekir. Paypal SDK
  • 21. Bridge Tasarımın soyutlanıp, modüllerin birbirinden bağımsız olarak çalışmasını sağlar.
  • 22.
  • 23. Observer Nesneler arasındaki bağımlılığı tanımlar, böylece bir nesneyi durum değiştirdiğinde, tüm bağımlılarına bildirilir. Yani sistemdeki bir obje durum değiştirdiğinde bunun bağımlı olduğu gözlemcileri bilgilendirir. Örneğin: Twitter AnkaraPHP grubunu takip ediyorsunuz. AnkaraPHP grubu bir tweet attı ve twitter sizi bilgilendirdi.
  • 25. “Değişimi hesaba katmayan bir tasarım gelecekte büyük ölçüde yeniden tasarlanma riskini taşıyor.” - Erich Gamma