Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Design Patterns (Tasarım Kalıpları)

Benzer bir sunumlar


... konulu sunumlar: "Design Patterns (Tasarım Kalıpları)"— Sunum transkripti:

1 Design Patterns (Tasarım Kalıpları)
Caner Öncü

2 Design Patterns Nedir Tam Olarak?
Ortak dil, ortak problemler, ortak çözümler Problem... çözüm?

3 Design Patterns Nedir Tam Olarak?
Tekerleği yeniden keşfetme! «İlla bu çözümleri mi kullanmak zorundayım? Kendim daha iyisini yaparım!» «Hmm... Bu sefer çok güzel oldu!»

4 Peki Bu Bilgi Gerçek Hayatta Ne İşime Yarayacak?
Ortak dilde konuşan ekip = mutlu ekip * * *: Head First Design Patterns

5 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

6 Peki... Kaç tane kalıp var? «Gang of Four» da kim?
«Tasarım Kalıpları’nda 20 yıllık deneyim, güleryüzlü hizmet!»

7 Harika, Hemen Kullanmaya Başlıyorum!
Amaç değil, araç Ne kazandık, ne kaybettik? KISS (Keep It Simple Stupid) * «Tek sayfalık uygulama için proje yöneticisi Symfony2’de diretince.» *: devops-tr

8 Kaç Tip Tasarım Kalıbı var?
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ı

9 Singleton (Creational)
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)

10 Abstract Factory (Creational)
Ö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?!?

11 Abstract Factory (Creational)

12 Builder (Creational) 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

13 Builder (Creational)

14 Factory Method (Creational)
Oluşturacağımız objenin tipini önceden belirtmek istemiyoruz Oluşturulacak obje factory metodu içerisinde runtime’da belirlenecek *

15 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) *

16 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

17 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

18 Bridge (Structural)

19 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)»

20 Composite (Structural)
*

21 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 »

22 Decorator (Structural)

23 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!»

24 Facade (Structural)

25 Flyweight (Structural)
Birbirine benzer çok sayıda obje oluşturmak istiyoruz Bunu yaparken de memory’i tüketmek istemiyoruz

26 Proxy (Structural) Bol bol kaynak tüketen bir objeye sahibiz
Bu sebeple, objeyi kullanmadan önce initialize etmek istemiyoruz

27 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»

28 Chain of Responsibility (Behavioral)

29 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

30 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»

31 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

32 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

33 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

34 Memento (Behavioral)

35 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

36 Observer (Behavioral)

37 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

38 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

39 Strategy (Behavioral)

40 Template Method (Behavioral)
Bir sınıfa ait birbirine benzer yapıya sahip algoritmalarda yalnızca bazı adımları değiştirmek istiyoruz

41 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

42 Visitor (Behavioral)

43 Teşekkürler! Dilerseniz bu sunumun ve incelediğimiz kodların kopyasına
adresinden ulaşabilirsiniz!

44 Kaynakça Head First Design Patterns, O’Reilly Media
Gang of Four, Design Patterns


"Design Patterns (Tasarım Kalıpları)" indir ppt

Benzer bir sunumlar


Google Reklamları