Design Patterns (Tasarım Kalıpları)



Benzer belgeler
İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır.

YZM 2108 Yazılım Mimarisi ve Tasarımı

YZM311 YAZILIM YAPIMI BÖLÜM 4 TASARIM KALIPLARI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

.com. Özcan Acar 2009 Kurumsal Java.com

Kitapta UML diyagramları kullanılarak, tasarım şablonları görsel olarak açıklanmıştır. İçerik aşağıdaki bölümlerden oluşmaktadır:

.com. Kurumsal Java. Özcan Acar com

(Fabrika Şablonu) Factory Pattern. Tasarım şablonlarının Creational (Yaratıcı) Sınıflandırmasına aittir. Fabrika(Factory) Şablonu

TASARIM KALIPLARI TASARIM DESENLERİ TASARIM ÖRÜNTÜLERİ TASARIM ŞABLONLARI

Özcan Acar 2010 Kurumsal Java Akademisi.com

Üst Düzey Programlama

19 Şubat 2016 Cuma

Bütünleşik İş Sürekliliği Çözümü

Decorator Tasarım Şablonu

Algoritmalara Giriş 6.046J/18.401J

Fiziki Varlık Yönetimi Talep Modülü Kullanıcı Kitabı

Tekrar

Sunu: Belli bir konunun resim, grafik, metin, ses ve görüntüler kullanılarak giriş, gelişme, sonuç bölümleriyle sıralı ve düzenli bir şekilde

ANADOLU ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ ANABİLİM DALI DOKTORA YETERLİK SINAVI OCAK 2017

Avansas Pro ile her zaman kazanın

Üst Düzey Programlama

.com. Özcan Acar 2009 Kurumsal Java.com

5. GÖSTERİ AYARLARI Geçiş Efekti

Tüm bu problemler verilerin dijital bir sunucuda tutulması ihtiyacını oluşturdu. İhtiyacı karşılamak amaçlı hastane otomasyonu geliştirildi.

1-)Projenin Adı: Küre içinde gizemli piramit. 2-)Giriş ve Projenin Amacı : 9. Sınıf geometri dersinde üç bouytlu cisimlerin hacmini

KÜMELER. A = {x : (x in özelliği)} Burada x : ifadesi öyle x lerden oluşur ki diye okunur. Küme oluşturur. Çünkü Kilis in üç tane ilçesi.

KAYISI ARAŞTIRMA İSTASYONU MÜDÜRLÜĞÜ EK 3.9 TOPRAK SU KAYNAKLARI BÖLÜMÜ

PAPERWORK DOCFLOW Doküman&Form Akış yönetimi

WORDPAD. Hızlı erişim araç çubuğu ve dosya menüsü. Kayıt, yazdırma ve sayfa yapısına yönelik işlemlerin

Demodülasyon Algoritmaları İçin En İyilenmiş Windows İşletim Sistemi Uygulamaları

YZM 2118 Yazılım Mimarisi ve Tasarımı

WORD 2010 KULLANIMI OFFICE DÜĞMESİ HIZLI ERİŞİM ARAÇ ÇUBUĞU MENÜLER ŞEKİL, RESİM EKLEME TABLO EKLEME ETKİNLİKLER

AÇIK KAYNAK İŞLETİM SİSTEMİ DERSİ

ÖZEL GÜVEN TIP MERKEZİ

YZM 2108 Yazılım Mimarisi ve Tasarımı

Faktöryel:

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

T.C. MALİYE BAKANLIĞI STRATEJİ GELİŞTİRME BAŞKANLIĞI İNOVASYON FİKİRLERİ YÖNETİM PROGRAMI PROJE FORMU

ATATÜRK ÜNĠVERSĠTESĠ ÖĞRENCĠ ĠġLERĠ OTOMASYONU ÖĞRENCĠ KULLANIM KILAVUZU ( )

Okunabilir Kod Yazım Standartları: Şiir Gibi Kod Yazmak

İÇİNDEKİLER TOPLAMA YOLUYLA SAYMA YÖNTEMİ ÇARPMA YOLUYLA SAYMA YÖNTEMİ FAKTÖRİYEL

KTO KARATAY ÜNİVERSİTESİ Temel Bilgisayar 2. Hazırlayan : Erdem YAVUZ

NESNEYE DAYALI PROGRAMLAMA VE C++

DÖĞRENCİLERİN DİKKATİNE!

Dağıtık Sistemler CS5001

Volkan Karamehmetoğlu

İnternette Çiçek satışı yapmak kar sağlayan bir ticaret modelimidir?

Structural Patterns: Adapter Bridge Composite Decorator Facade Flyweight Proxy

SAYILAR TEORİSİ - PROBLEMLER

Matematiksel İktisat-I Ders-1 Giriş

ADDIE Tasarım Modeli Analiz Basamağı

ÜNİTE - 2 İŞLETME ÇEŞİTLERİ

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Merhaba! Fatih ALKAN Yasin UĞURLU Mehmet ÜZER. Biz buradayız çünkü sizi ve yazılımı seviyoruz. Bize ulaşabilirsiniz:

POLİS AKADEMİSİ BAŞKANLIĞI POLİS AMİRLERİ EĞİTİMİ MERKEZİ EMNİYET MENSUBU ÖĞRENCİ ADAYI YAZILI SINAVI İNTERNET KAYIT KILAVUZU

PROBLEMLER. CD olduğu bilindiğine göre, trenin saatteki hızı kaç km dir? (yanıt: 32)

Mühendislik Ekonomisi. Prof.Dr. Orhan TORKUL

Android Ders Notları

ANDROID UYGULAMA YARDIM DOKÜMANI

Farklı bir çevrimiçi öğrenme

KURUMSAL RİSK YÖNETİMİ (KRY) ÖZEL SEKTÖR UYGULAMALARI & YASAL DÜZENLEMELER

Üst Düzey Programlama

KAMU PERSONEL SEÇME SINAVI ÖĞRETMENLİK ALAN BİLGİSİ TESTİ İLKÖĞRETİM MATEMATİK ÖĞRETMENLİĞİ 20 TEMMUZ 2014 PAZAR

Gerçekleştirme Raporu

DERS PROGRAMI OLUŞTURMA VE ÖĞRETİM ELEMANI GÜN-SAAT AYARLARI

III İÇİNDEKİLER ÜNİTE 1 ÜNİTE 2 ÜNİTE 3 FRAKTALLAR 2 YANSIYAN VE DÖNEN ŞEKİLLER 6 HİSTOGRAM 10 ÜSLÜ SAYILAR 14 ÜSLÜ SAYILARLA ÇARPMA İŞLEMİ 18

5.37. HEMZEMİN GEÇİTLERDE GÜVENLİK OTOMASYONU

Ekle Menüsü İşlevleri ÜNİTE 3. Bu üniteyi çalıştıktan sonra; Ekle Menüsü Çizimler Grafikler Bağlantılar Metin

YIĞIN (STACK) YAPISI. 1 Öğr.Gör.Bülent Çobanoğlu, Sakarya Üniversitesi, Adapazarı MYO

Yrd. Doç. Dr. Caner ÖZCAN

Kümenin özellikleri. KÜMELER Burada x : ifadesi öyle x lerden oluşur ki diye okunur. Örnek: Kilis in ilçeleri

YZM 2108 Yazılım Mimarisi ve Tasarımı

Emniyet Genel Müdürlüğü. Sürücü Belgesi ve Şahıslara Yazılan Ceza Sorgulama KULLANIM KILAVUZU

Modem ve Yerel Ağ Kullanıcı Kılavuzu

Nasıl yapılır: Kopyalama. Dijital Gönderme. Fakslama. İşleri Depolama. HP Color LaserJet CM6030/6040 MFP Series Hızlı Başvuru Kılavuzu

KALİTE ÇEMBERLERİ NEDİR?

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

22. Ölçü ve Kot Eklemek

b Üslü Sayılara Giriş b İşlem Önceliği b Ortak Çarpan Parantezine Alma ve Dağılma Özelliği b Doğal Sayı Problemleri b Çarpanlar ve Katlar - Kalansız

TAKI TEKNOLOJİSİ VE TASARIMI UZMANI

COĞRAFİ BİLGİ SİSTEMLERİ Building Geodatabase Eğitimi

PROGRAMLAMA TEMELLERİ DERSİ

1. Bölüm: Ağı Keşfetme

Sayfanın kaynak kodunu incelediğimde ilk olarak unicode karakterlerden oluşan karakter dizisi daha sonra ise Java class dosyası ve image.

AKM-F-193 / / Rev:00

BEÜ GEOMATİK MÜHENDİSLİĞİ BÖLÜMÜ ÖLÇME UYGULAMA II DERSİ İŞ PROGRAMI

Örnek Uzay: Bir deneyin tüm olabilir sonuçlarının kümesine Örnek Uzay denir. Genellikle harfi ile gösterilir.

Gparted İle Windows tan Linux a Yer Ayırıyoruz

Şekil1. Dönüşümleri yapılmış raster hazır

ÖRNEK OLAY. AnadoluJet

denetim mali müşavirlik hizmetleri

Alıcılar için Programatik Doğrudan rehberi

SELÇUK ÜNİVERSİTESİ FEN FAKÜLTESİ MATEMATİK BÖLÜMÜ ÖĞRETİM DEĞERLENDİRME ANKETİ

HP Mobil Uzaktan Kumanda (Yalnızca Belirli Modellerde) Kullanıcı Kılavuzu

KODLAMA SİSTEMLERİNİN TANIMI :

BİLGİ ve VERİ GÜVENLİĞİ. Bilgi Gizliliği ve Güvenliği Zararlı Yazılımlar Alınacak Tedbirler Güvenlik Yazılımları

AVRASYA ÜNİVERSİTESİ

Haz. Yrd.Doç.Dr. Yunus Emre Selçuk

17-28 EKİM 2005 SIĞACIK KÖRFEZİ-SEFERİHİSAR (İZMİR) DEPREMLERİ

TEKLİF ALMA ŞARTNAMESİ

NEY METODU SAYFA 082 NEY METHOD PAGE 082. well.

Transkript:

Design Patterns (Tasarım Kalıpları) Caner Öncü caner@koddit.com

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

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

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

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

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

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

Kaç Tip Tasarım Kalıbı var? Creational Yeni objelerin yaratılması Structural Farklı objelerin birbirleriyle ilişkilendirilerek bir bütün olması Behavioral Objeler arası iletişim kurulması *

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

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?!? *

Abstract Factory (Creational) *

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 *

Builder (Creational) *

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

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

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 *

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 *

Bridge (Structural) *

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

Composite (Structural) *

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

Decorator (Structural)

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

Facade (Structural)

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

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

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

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

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»

Chain of Responsibility (Behavioral)

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

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»

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

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

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

Memento (Behavioral)

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

Observer (Behavioral)

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

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

Strategy (Behavioral)

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

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

Visitor (Behavioral)

Teşekkürler! Dilerseniz bu sunumun kopyasına http://koddit.com/design-patterns adresinden ulaşabilirsiniz!

Kaynakça 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.unirostock.de/deutsch/lehre/uebung/beispiele/patternexamples/pate xamples.htm http://devops-tr.tumblr.com