design patterns (tasarım kalıpları)
TRANSCRIPT
![Page 2: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/2.jpg)
Design Patterns Nedir Tam Olarak?
Ortak dil, ortak problemler, ortakçözümler Problem... çözüm?
![Page 3: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/3.jpg)
Tekerleği yeniden keşfetme! «İlla bu çözümleri mi kullanmak zorundayım? Kendim daha
Kendim daha iyisini yaparım!»
«Hmm... Bu sefer çok güzel oldu!»
Design Patterns Nedir Tam Olarak?
![Page 4: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/4.jpg)
Peki Bu Bilgi Gerçek Hayatta Ne İşime Yarayacak?
Ortak dilde konuşan ekip = mutlu ekip
*: Head First Design Patterns*
*
![Page 5: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/5.jpg)
Peki Bu Bilgi Gerçek Hayatta Ne İşime Yarayacak?
Kod tabanı, daha rahat: Anlaşılabilir
Güncellenebilir
«Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.»
- John F. Woods
![Page 6: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/6.jpg)
Kaç tane kalıp var?
«Gang of Four» da kim?
«Tasarım Kalıpları’nda 20 yıllık deneyim, güleryüzlü hizmet!»
Peki...
![Page 7: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/7.jpg)
Amaç değil, araç
Harika, Hemen Kullanmaya
Başlıyorum!
KISS (Keep It Simple Stupid)
Ne kazandık, ne kaybettik?
«Tek sayfalık uygulama için proje yöneticisi Symfony2’de diretince.»
*
*: devops-tr
![Page 8: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/8.jpg)
Creational
Yeni objelerin yaratılması
Structural
Farklı sınıfların bir araya gelerek oluşturdukları büyük yapılar
Behavioral
Objeler arası iletişim kurulması
Kaç Tip Tasarım Kalıbı var?
![Page 9: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/9.jpg)
Yalnızca 1 objeye ihtiyacımız var
Objeye her sınıftan erişebilmemiz lazım
Obje ihtiyacımız olana kadar yaratılmasın (lazy
initialization)
Singleton (Creational)
![Page 10: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/10.jpg)
Örneğin, çalıştığı platformdan bağımsız bir uygulama
geliştirmek istiyoruz
Benzer özelliklere sahip objelerimiz var
Benzer objelerin yaratılma mantığını, objelerin
yaratılacağı sınıfları (concrete class) tek tek
belirtmeden, kontrata (interface) bağlı gruplamak
istiyoruz
Sınıf belirtilm... kontrat... kurgu... ne?!?
Abstract Factory (Creational)
![Page 11: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/11.jpg)
Abstract Factory (Creational)
![Page 12: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/12.jpg)
Kompleks yapıda bir objemiz var (Motor vs. parçalara
sahip bir araba veya değişken içeriğe sahip bir fast-
food menüsü gibi)
Objeyi oluşturmak için belli bir sırayı bozmadan, adım
adım işlemlerden geçmemiz gerekli
Builder (Creational)
![Page 13: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/13.jpg)
Builder (Creational)
![Page 14: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/14.jpg)
Factory Method (Creational)
*
Oluşturacağımız objenin tipini önceden belirtmek istemiyoruz
Oluşturulacak obje factory metodu içerisinde runtime’da belirlenecek
![Page 15: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/15.jpg)
Prototype (Creational)
*
Bir objenin özelliklerine sahip olan aynı tipte bir obje daha yaratmak istiyoruz (milyonlarca insan hücresi gibi)
Yeni objede yapacağımız değişiklikler orijinal objeye etki etmeyecek (clone)
![Page 16: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/16.jpg)
Adapter (Structural) Birbiriyle uyumsuz/çalışamayan sınıfları
çalışabilir hale getirmek istiyoruz (Obje -> JSON, XML gibi)
Aslında mevcut sınıf için "Wrapper class" kullanmış oluyoruz
![Page 17: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/17.jpg)
Bridge (Structural)
Birbirinden farklı, birden fazla interface ile kombinasyon oluşturarak soyutlama yapmak zorunda kaldık!
Ne demek şimdi bu?!?
Yapılan bu soyutlama birbirleriyle olan kombinasyonlara göre interface sayısına bağlı olarak permütasyon şeklinde artıyor
“Soyutlanan yapıyı soyutla” ki interface çorbası oluşmasın
![Page 18: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/18.jpg)
Bridge (Structural)
![Page 19: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/19.jpg)
Composite (Structural)
Basit objelerden ve bu basit objeleri barındıran kompleks objelerden oluşan bir yapı istiyoruz.
«Her bir klasör içerisinde dosya olabilir ve bu dosyalar da, kendi içinde dosyalar barındıran bir klasör olabilir (rekürsif)»
![Page 20: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/20.jpg)
Composite (Structural)
*
![Page 21: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/21.jpg)
Decorator (Structural)
Objelere dinamik olarak yeni sorumluluklar yükle/becerilerini arttır
«James Bond ve bitmek bilmeyen özelliğe sahip silahları gibi»
Sadece metodlar değil, property’ler de eklenebilir/düzenlenebilir
«İliğimizi kuruttun 007...»
![Page 22: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/22.jpg)
Decorator (Structural)
![Page 23: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/23.jpg)
Facade (Structural)
Birçok sistemi bir üst sistemde toplayarak bu alt sistemlere erişim kolaylığı sağla
«Uğraşamam ben önce 1’e sonra 4’e sonra 7’ye basmakla, müşteri hizmetleriyle görüşmek istiyorum!»
![Page 24: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/24.jpg)
Facade (Structural)
![Page 25: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/25.jpg)
Flyweight (Structural)
Birbirine benzer çok sayıda obje oluşturmak istiyoruz
Bunu yaparken de memory’i tüketmek istemiyoruz
![Page 26: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/26.jpg)
Proxy (Structural)
Bol bol kaynak tüketen bir objeye sahibiz
Bu sebeple, objeyi kullanmadan önce initialize etmek istemiyoruz
![Page 27: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/27.jpg)
Chain of Responsibility (Behavioral)
Bir istek sonucu oluşacak etkiyi gerçekleştirecek yapıların birbirlerine bağlanmasıyla oluşur
Birçok yapıdan yalnızca biri yapılacak işi gerçekleştirir «ATM’lerde çekilen paraya
uygun banknot’un hazneden verilmesi gibi»
![Page 28: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/28.jpg)
Chain of Responsibility (Behavioral)
![Page 29: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/29.jpg)
Command (Behavioral)
Yapılacak bir çağrı için tüm bilgiyi bir objede tutmak istiyoruz
Alakalı komut istenen zamanda, sıralı işlemler içeren bir batch şeklinde çağrılabilir
![Page 30: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/30.jpg)
Interpreter (Behavioral)
Belirli kural kümelerini bir gramerle ifade etmek istiyoruz
Bu kural kümelerini anlamlı ifadeye çeviren bir tercüman ihtiyacı duyuyoruz
«Müziğin notayla ifade edilmesi»
«SQL ifadeleri»
![Page 31: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/31.jpg)
Iterator (Behavioral) Sırayla dolaşmak istediğimiz biraraya gelmiş
obje kümemiz var
Amacımız yalnızca sırayla dolaşmak (linked list, hash table gibi), nasıl dolaştığımızın detaylarını öğrenmek istemiyoruz
![Page 32: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/32.jpg)
Mediator (Behavioral)
Sınıfların birbirleriyle direkt konuşmasını istemiyoruz ki sınıflar arası dependency oluşturmak durumunda kalmayalım
Araya aracı koyarak sınıflar arası haberleşme detaylarını aracıya aktarıyoruz
«Hava trafik kontrol» gibi
![Page 33: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/33.jpg)
Memento (Behavioral)
Objenin bir iç durumuna ait değerler için «checkpoint» oluşturmak istiyoruz
Oyun karakterimiz öldüğünde eşyalarımızı yitirip sağlık, açlık, başlangıç noktası gibi değerlerin «varsayılan» değerlere dönmesi gibi
«Her gün aynı şey, canımdan bezdim...» - Guy Pierce, Memento
![Page 34: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/34.jpg)
Memento (Behavioral)
![Page 35: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/35.jpg)
Observer (Behavioral)
Bir objeyle alakalı değişim olduğu zaman, bu değişimden belirli objeleri haberdar etmeyi amaçlıyoruz
Dinamik biçimde bu değişikliğin takibini yapacak objeleri ekleyip/çıkartmak istiyoruz
Açık arttırma görevlisi (subject) ve açık arttırma katılımcıları (observer) gibi
![Page 36: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/36.jpg)
Observer (Behavioral)
![Page 37: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/37.jpg)
State (Behavioral) Objenin davranış biçimini kendine ait olan
belirli durumlara göre dinamik biçimde değiştirmesini istiyoruz
«State machine» gibi Play tuşuna bastıktan
sonra tekrar basınca Pause işlemi gerçekleşmesi (tersi biçimde devam etmesi) gibi
![Page 38: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/38.jpg)
Strategy (Behavioral)
Bir sınıfa ait davranışlar dinamik olarak değişebiliyorsa bu davranışlara ait algoritmaları ayrıştırarak saklamamız mantıklı olacaktır
Böylece runtime’da davranışları karışıklık yaşamadan değiştirebilir hale geleceğiz
![Page 39: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/39.jpg)
Strategy (Behavioral)
![Page 40: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/40.jpg)
Template Method (Behavioral)
Bir sınıfa ait birbirine benzer yapıya sahip algoritmalarda yalnızca bazı adımları değiştirmek istiyoruz
![Page 41: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/41.jpg)
Visitor (Behavioral)
Sınıflarımıza yeni bir metot eklemek istiyoruz
Eklenmesi gereken sınıflara tek tek manuel biçimde ekleyip kod bakımını zorlaştırmak istemiyoruz (güncelleme gerektiğinde her yeri güncellemek gerekecek)
Birden fazla sınıfın implement ettiği interface’e ekleyip tek tek sınıflarda implementasyonunu da gerçekleştirmek istemiyoruz
![Page 42: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/42.jpg)
Visitor (Behavioral)
![Page 43: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/43.jpg)
Dilerseniz bu sunumun ve incelediğimiz
kodların kopyasına
http://koddit.com
adresinden ulaşabilirsiniz!
Teşekkürler!
![Page 44: Design Patterns (Tasarım Kalıpları)](https://reader034.vdocuments.net/reader034/viewer/2022052307/55ab0dfd1a28ab920c8b483f/html5/thumbnails/44.jpg)
Head First Design Patterns, O’Reilly Media
Gang of Four, Design Patterns
http://sourcemaking.com/design_patterns
http://www.codeproject.com/Articles/430590/Design-Patterns-of-Creational-Design-
Patterns
http://www.codeproject.com/Articles/438922/Design-Patterns-of-Structural-Design-
Patterns
http://www.codeproject.com/Articles/455228/Design-Patterns-of-Behavioral-Design-
Patterns
http://www.tutorialspoint.com/design_pattern/
http://www.dofactory.com/net/design-patterns
http://wwwswt.informatik.uni-
rostock.de/deutsch/Lehre/Uebung/Beispiele/PatternExamples/patexamples.htm
http://devops-tr.tumblr.com
Kaynakça