Üst Düzey Programlama Tasarım Şablonları Üst Düzey Programlama-ders01/ 1
Tasarım Şablonları (Design Patterns) Şablon bir işi yapmak için bir yoldur. Yemek yaparken kullanılan tariflerde birer şablondur. Nesneye yönelik programlama 1980 lerden bu yana kullanılmaktadır. Nesneye yönelik programlama paradigmasını kullanan programcılar uygulamalarında çeşitli zorluklarla, problemlerle karşılaşmışlar ve bunları çözmüştür. Yıllar geçtikçe belirli bir tip problemi çözmek için yapılan işler benzer olmuştur. Bu benzer problem çözümlerine TASARIM ŞABLONLARI denilecektir. Her programcının probleme özel kendi mantığı olabilir ama başka bir kodu görüp o kodun sizin probleminize daha iyi bir çözüm getirdiğini gördüğünüzde o çözümü kullanmak daha akıllıca olacaktır. Üst Düzey Programlama-ders01/ 2
ADAPTER ŞABLONU Amacı var olan bir sınıfın arayüzünü (yani metotlarını) bu sınıfı kullanmak isteyen kişinin istediği bir arayüze dönüştürür. Diğer adı Wrapper dır. Kullanım nedenleri: Bazen bir uygulamada kullanılacak olan bir sınıf arayüzünün uyumsuzluğu nedeniyle kullanılamayabilir. Bu sınıfın elimizde sadece.class yani kapalı kodu olabilir; bu yüzden de sınıfın kodlarını değiştiremeyiz. Kodu açık olsa dahi kendi uygulamamız nedeniyle sınıfın arayüzünü yani kodlarını değiştiremeyiz; bu gibi durumlarda Adapter Şablon u kullanılır. Üst Düzey Programlama-ders01/ 3
ADAPTER ŞABLONU UML Diyagramı: İstemci Hedef İstek() Adaptee ozelistek() Adapter İstek() implementation adaptee.ozelistek() Üst Düzey Programlama-ders01/ 4
ADAPTER ŞABLONU Örn: Üst Düzey Programlama-ders01/ 5
ADAPTER ŞABLONU İstemci kullanıcı, bu sınıfların çizme işlemlerini ciz() isimli metodu kullanarak yapmalarını istemektedir. Daire sınıfında metot ismi ciz() değil ciztahtaya() dır. Bu durumda Daire sınıfının arayüzünü istediğimiz şekile çeviren bir ADAPTER sınıfı yazmalıyız. Üst Düzey Programlama-ders01/ 6
ADAPTER ŞABLONU İstediğimiz ADAPTER Sınıfı Örneği Üst Düzey Programlama-ders01/ 7
ADAPTER ŞABLONU Bu sınıfları kullanan bir örnek uygulama Üst Düzey Programlama-ders01/ 8
ADAPTER ŞABLONU Yazmış olduğumuz Adapter sınıfının her iki sıfıf gibi davranmasını istersek ne yapmalıyız? Bu tip durumlarda kullanılan Adapter a çift yönlü adapter denilir. Üst Düzey Programlama-ders01/ 9
ADAPTER ŞABLONU Sınıfların arayüzlerini Interface lere aktarırız. Üst Düzey Programlama-ders01/ 10
Çift Yönlü Adapter: ADAPTER ŞABLONU Üst Düzey Programlama-ders01/ 11
ADAPTER ŞABLONU Java dilinde grafik kullanıcı arabirimi işlemlerinde olaylarda kullanılan olay listener(dinleyicileri) yerine kullanılmak amacıyla Event Adapter (Olay adapter) ları geliştirilmişdir ve Java API içinde bulunmaktadır. Üst Düzey Programlama-ders01/ 12
BRIDGE ŞABLONU Bir sınıfın arayüzünü gerçekleştiriminden ayırmak için(metotların tanımı ile kodlanmasını) kullanılır. Böylece ikiside ayrı ayrı yapılabilir. İlk bakışta Adapter şablonuna benzemektedir. Adapter şablonu bir yada birden fazla sınıfın arayüzlerinin belirli bir sınıf gibi görünmesini sağlar. Bridge ise; arayüz ile gerçekleştirimi ayırır, böylece istemci de herhangi bir değişiklik olmadan sınıfın gerçekleştirimini değiştirebiliz. Ayrıca istemciden (yani sizin sınıfınızı kullanan kişiden) sınıfınızın gerçekleştirimini saklayabiliriz. Üst Düzey Programlama-ders01/ 13
BRIDGE ŞABLONU Örn: Üst Düzey Programlama-ders01/ 14
BRIDGE ŞABLONU Örn: Üst Düzey Programlama-ders01/ 15
BRIDGE ŞABLONU Örn: Üst Düzey Programlama-ders01/ 16
Composite ŞABLONU Composite bir nesnedir ve aynı yada benzer tipli nesneleri tutmak için kullanılır. Bir parça-bütün ilişkisi, bir ağaç yapısı sunar. Yani bir nesne içinde bir ve ya daha fazla aynı tipli nesne tutar ve bu nesnelerin her birinde aynı şekilde bir yada birden fazla nesne tutabilir yada tutmayabilir. Örneğin; bir şekil nesnesinin ekranı kaplamasını istiyoruz. Bu şekil içindeki bir grup şeklinde aynı şekilde yeniden boyutlanmasını isteyebiliriz; bu gibi durumlarda kullanılır. Üst Düzey Programlama-ders01/ 17
UML Diyagramı: Composite ŞABLONU İstemci Component defaultmethod() getchild() addcomponent() removecomponent() Leaf Composite defaultmethod() getchild() addcomponent() removecomponent() Üst Düzey Programlama-ders01/ 18
Composite ŞABLONU Örn: Üst Düzey Programlama-ders01/ 19
Composite ŞABLONU Örn: Üst Düzey Programlama-ders01/ 20
Composite ŞABLONU Örn: Üst Düzey Programlama-ders01/ 21
Composite ŞABLONU Örn: Üst Düzey Programlama-ders01/ 22
Decorator ŞABLONU Decorator şablonu belirli nesnelerin davranışlarını yeni türetilmiş sınıflar oluşturmadan değiştirmimize yardımcı olur. Varsayılım ki sekiz nesneyi kullanan bir uygulamamız var, fakat bunlardan üç tanesinin ek özelliklere ihtiyacı var. Bu el özellikleri dinamik olarak ekleme işlemini sağlar. Örneğin; bir GUI bileşenine kenarlıklar(border) eklemek istiyoruz yada kaydırma çubuğu (scrollbars) eklemek istiyoruz. Bu nesneden iki yeni nesne türeterek bu işlemi yapabiliriz. Bu şekilde yaparsak her nesne için kenarlık çizdirmek için kenarlık çizimide yapabilen yeni nesneler türetmemiz gereklidir. Hepsinde yapılan işlem kenarlık çizmedir, buna rağmen tüm kenarlığa ihtiyacı olan bileşenler için yeni sınıflar türetmemiz gerekir. Bu gibi durumlarda Decorator kullanılır. Üst Düzey Programlama-ders01/ 23
Decorator ŞABLONU UML Diyagramı: Component operation() ConcreateComponent operation() Decorator dostuff() Decorator(component) ConcreateDecoratorA dostuff() ConcreateDecoratorB dostuff() Üst Düzey Programlama-ders01/ 24
Decorator ŞABLONU Ör: Bir window nesnemiz olsun ve bu pencereye dinamik olarak kaydırma çubuğu(scroll) ve kenarlık(border) özelliği eklemek istiyelim. Üst Düzey Programlama-ders01/ 25
Decorator ŞABLONU Üst Düzey Programlama-ders01/ 26
Decorator ŞABLONU Üst Düzey Programlama-ders01/ 27
Decorator ŞABLONU Üst Düzey Programlama-ders01/ 28
Üst Düzey Programlama Tasarım Şablonları Üst Düzey Programlama-ders01/ 29