• Sonuç bulunamadı

Tasarım Desenleri NESNEYE YÖNELİK PROGRAMLAMA KAVRAMLARI DR. ŞAFAK KAYIKÇI

N/A
N/A
Protected

Academic year: 2022

Share "Tasarım Desenleri NESNEYE YÖNELİK PROGRAMLAMA KAVRAMLARI DR. ŞAFAK KAYIKÇI"

Copied!
111
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

Tasarım Desenleri

NESNEYE YÖNELİK PROGRAMLAMA KAVRAMLARI

DR. ŞAFAK KAYIKÇI

(2)

Sınıf (Class)

 Taslak yada tasarı planı olarak tanımalanabilir

 Özellikler

Nelere sahip olduğu

 Metotlar (Fonksiyonlar)

Neler yapabildiği (eylemler)

Hayvan

İsim: String

boy: double

agirlik: int

sevdiğiYemek: String

hiz: double

hareketEt(int): void yemekYe(): void setName(String): void getName(): String

(3)

Kalıtım (Inheritance) (is a özelliği)

Sınıfların ortak özellikleri nelerdir ?

 Bu özellikler soyutlanır ve duruma göre ezilir (override)

 Kod tekrarını engeller ve ana sınıfta yapılan değişiklikler alt sınıflara yansır.

Hayvan (Super)

isim: String

boy: double

agirlik: int

sevdiğiYemek: String

hiz: double

hareketEt(int): void yemekYe(): void setName(String): void getName(): String

Kus (SubClass) hareketEt(int): void

Kopek (SubClass) cukurKaz() void

(4)

Kapsülleme (Encapsulation)

class Kopek{

String isim;

int agirlik;

setAgirlik (int yeniAgirlik){

if(yeniAgirlik>0){

agirlik = yeniAgirlik;

else{}

//throw error }

} }

Hayvan (Super)

-isim: String

-boy: double

-agirlik: int -sevdiğiYemek: String

-hiz: double

+hareketEt(int): void +yemekYe(): void +setName(String): void +getName(): String

Kus (SubClass) hareketEt(int): void

Kopek (SubClass) cukurKaz() void

private ve public özellikleri ayırmak gereklidir.

get ve set kullanmak gerekir.

(5)

Polymorphism (Çok Şekilcilik)

 Çokbiçimlilik (Polymorphism) bir nesnenin farklı amaçlar için de kullanılabileceği anlamına gelir Hayvan kopek = new Kopek();

Hayvan kedi = new Kedi();

 Farklı alt sınıfları bir dizi altında toplayabilirsiniz.

Ana sınıfta olmayan bir özelliği kullanamazsınız. Çevirim (cast) işlemi yapmalsınız.

((Kopek) kopek).cukurKaz();

Hayvanlar Dizisi Kedi Objesi Kopek Objesi

(6)

Soyut Sınıflar (Abstract Class)

 Soyut sınıflar diğer sınıflara taban olmak için kullanılırlar

 Nesne türetemezler

 Bütün metotların soyut olmasına gerek yoktur.

 static metotlar içerebilir.

Varlik

İsim: String

agirlik: int

setIsim(String) void

getIsim() String

setAgirlik(int) void getAgirlik() int

Zurafa

setName(String) void getName() String setAgirlik(int) void getAgirlik() int

(7)

Arayüzler (interface)

 Arayüz ,interface anahtar sözcüğü ile tanımlanır. Arayüz abstract metotlar içerir, gövdeleri yoktur.

 Yalnızca public ve ön-tanımlı (default) erişim belirtkesi alabilir.

 Bir sınıf birden çok arayüze çağırabilir. Böylece çoklu kalıtım sağlanır (multiple inheritance)

Omurgalı setIsim(String) void getIsim() String setAgirlik(int) void getAgirlik() int

Maymun

setName(String) void

getName() String

setAgirlik(int) void getAgirlik() int

(8)

Tasarım Desenleri

GİRİŞ

DR. ŞAFAK KAYIKÇI

(9)

Tasarım Desenleri

 Bir tasarım desenleri, belirli bir problemi çözmek için daha önceden başarıyla kullanılmış bir çözümlerdir. Bu çözümler, oldukça uzun bir süre boyunca sayısız yazılım geliştiricisi tarafından deneme yanılma yoluyla elde edilmiştir.

 Nesne yönelimli tasarım problemlerini çözmek için programlama dilinden bağımsız stratejilerdir.

 Tasarım desenlerini kullanarak kodunuzu daha esnek, yeniden kullanılabilir ve bakımı yapılabilir hale getirebilirsiniz.

 Java'nın kendisi de tasarım desenleri kullanılırak yapılmıştır.

 Bir uygulamanın tasarımında şeffaflık sağlarlar.

 Yazılım Geliştirme Yaşam Döngüsünün gereksinim analizi ve tasarım aşamasında kullanılır.

(10)

Gang of Four (GOF) - Dörtlü Çete

1994 yılında dört yazar Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides, yazılım geliştirmede tasarım deseni kavramını başlatan "Design Patterns - Elements of Reusable Object- Oriented Software" başlıklı bir kitap yayınladı. Bu yazarlara göre tasarım desenleri öncelikle aşağıdaki nesne yönelimli tasarım ilkelerine dayanmaktadır :

1. Uygulama yerine daha çok arayüz kullanımına yönelik program yazma 2. Kalıtım yerine nesne kompozisyonunu tercih etme

(11)

Tavsiye Kitap

(12)

1.Creational Design Pattern (Yaratıcı Tasarım Desenleri)

Factory Pattern

Abstract Factory Pattern Singleton Pattern

Prototype Pattern Builder Pattern

(13)

2. Structural Design Pattern (Yapısal Tasarım Desenleri)

Adapter Pattern Bridge Pattern

Composite Pattern Decorator Pattern Facade Pattern Flyweight Pattern Proxy Pattern

(14)

3. Behavioral Design Pattern

(Davranışsal Tasarım Desenleri)

Chain Of Responsibility Pattern Command Pattern

Interpreter Pattern Iterator Pattern Mediator Pattern Memento Pattern Observer Pattern State Pattern Strategy Pattern Template Pattern Visitor Pattern

(15)

Tasarım Desenleri

FACTORY PATTERN – ABSTRACT FACTORY PATTERN

DR. ŞAFAK KAYIKÇI

(16)

Factory Pattern – AbstractFactory Pattern

 Yaratıcı Tasarım Desenleri içerisinde yer almaktadır.

 Factory Pattern Alt sınıfların oluşturulacak nesne türünü seçmesini sağlar.

Factory design pattern’de tek bir ürün ailesine ait tek bir arayüz mevcutken,abstract factory’de farklı ürün aileleri için farklı arayüzler mevcuttur.

Birden fazla ürün ailesi ile çalışmak durumunda kaldığımızda , ürün ailesi ile istemci tarafını soyutlamak için kullanılır.

(17)

Tutorialspoint

(18)

Abstract Factory - Example

(19)

Tasarım Desenleri

SINGLETON PATTERN

DR. ŞAFAK KAYIKÇI

(20)

Singleton Pattern

 Yaratıcı Tasarım Desenleri içerisinde yer almaktadır.

En basit tasarım desenlerinden biridir.

 Nesne oluşturmayı sağlayan tek bir sınıf içerir ve bu sınıf sadece tek bir nesnenin yaratılmasını sağlar.

Bu sınıf aynı zamanda, sınıf nesnesinin somutlaştırılmasına gerek kalmadan doğrudan erişilebilen tek nesnesine erişmenin bir yolunu sağlar.

Örnek olarak veritabanı bağlantılarında sık kullanılır.

(21)

Klasik metod

public static synchronized Singleton getInstance()

(22)

Singleton - TutorialsPoint

(23)

Tasarım Desenleri

BUILDER PATTERN

DR. ŞAFAK KAYIKÇI

(24)

Builder Pattern

 Yaratıcı Tasarım Desenleri içerisinde yer almaktadır.

 Basit nesneleri kullanarak adım adım karmaşık bir nesne oluşturur.

Bu üretici diğer nesnelerden bağımsızdır.

Örnek kullanımlar

Çoklu sınıf üretimleri

Deserialization işlemi

Constructor işlemleri

(25)

Tasarım Desenleri

ADAPTER PATTERN

DR. ŞAFAK KAYIKÇI

(26)

Adapter Pattern

 Yapısal Tasarım Desenleri içerisinde yer almaktadır.

 Bir sistemi başka bir sistemi etkileşimine yönelik köprü gibi kullanılır.

 Wrapper (sarmalayıcı) olarakta tanımlanır.

Bu şekilde iki farklı sistemin varolan özellikleri kullanılabilir.

(27)

örnek

(28)

Tasarım Desenleri

PROXY PATTERN

DR. ŞAFAK KAYIKÇI

(29)

Proxy Pattern

 Yapısal Tasarım Desenleri içerisinde yer almaktadır.

 Basitçe, proxy, başka bir nesneyi temsil eden bir nesne anlamına gelir.

Orijinal nesnenin bilgisini gizleme, talep üzerine yükleme vb. gibi birçok işlemi gerçekleştirilebilir.

(30)

Tasarım Desenleri

FACADE PATTERN

DR. ŞAFAK KAYIKÇI

(31)

Facade (Cephe) Pattern

Facade , bir kütüphane, framework veya diğer karmaşık sınıf kümelerine basitleştirilmiş bir arayüz sağlayan yapısal bir tasarım modelidir.

(32)

Durum

PROBLEM

Kodunuzun karmaşık bir kitaplığa veya çerçeveye ait geniş bir nesne kümesiyle çalıştırmanız

gerektiğini hayal edin. Normalde, tüm bu nesneleri initialize etmeniz, bağımlılıkları takip etmeniz, yöntemleri doğru sırada çalıştırmanız vs. gerekir.

Sonuç olarak, sınıflarınızın iş mantığı, 3rd party sınıfların uygulama ayrıntılarına sıkı bir şekilde bağlanır ve bu da anlaşılması ve sürdürülmesi zorlaşır.

ÇÖZÜM

Facade, çok sayıda hareketli parça içeren karmaşık bir alt sisteme basit bir arayüz sağlayan bir

sınıftır. Facade, alt sistemle doğrudan çalışmaya kıyasla sınırlı işlevsellik sağlayabilir. Ancak, yalnızca müşterilerin gerçekten önemsediği özellikleri içerir.

Bir facade sahip olmak, uygulamanızı düzinelerce özelliğe sahip bir kitaplıkla entegre etmeniz gerektiğinde kullanışlıdır, ancak yalnızca işlevselliğinin küçük bir kısmına ihtiyacınız vardır.

(33)

Gerçek Dünya Örneği

Telefonla sipariş vermek için bir mağazayı aradığınızda, bir operatör mağazanın tüm hizmet ve departmanlarına karşı cephenizdir. Operatör, sipariş sistemine, ödeme ağ geçitlerine ve çeşitli teslimat hizmetlerine basit bir ses arabirimi sağlar.

(34)

Yapısı

Facade alt-sistemin işlevselliği belirli bir bölümüne kolay erişim sağlar. İstemcinin talebini nereye yönlendireceğini ve tüm hareketli parçaları nasıl çalıştıracağını bilir.

Bir Ek Facadesınıfı, alakasız özellikler kullanılarak

yapılabilecek olan Facade

sınıfının bozulmasını önlemek için oluşturulabilir. Ek cepheler hem istemciler hem de diğer cepheler tarafından kullanılabilir.

İstemci, alt sistem nesnelerini doğrudan çağırmak yerine facade kullanır.

Kompleks Altsistemiçeşitli nesneler onlarcaoluşur. Hepsinin anlamlı bir şey yapmasını sağlamak için, nesneleri doğru sırada başlatmak ve onlara uygun formatta verisağlamak gibi alt sistemin uygulama ayrıntılarına derinlemesine dalmanız gerekir.

Alt sistemsınıfları cephenin varlığından haberdardeğildir. Sistem içinde çalışırlar ve birbirleriyle doğrudan ilişkililerdir.

(35)

Facade (Cephe) Pattern

 Yapısal Tasarım Desenleri içerisinde yer almaktadır.

Facade Deseni, alt sistemin kullanımını kolaylaştıran daha yüksek bir arayüz tanımlar. İstemcileri, alt sistem bileşenlerinin karmaşıklığından korur.

 Aslında her AbsractFactory bir çeşit Facade Desenidir.

Adapter Deseni gibi birden fazla sınıfı sarmayalabilir ancak Facade Deseni karmaşık olan bir

arayüzü sadeleştirmeye yönelik bir arayüz yaparken, Adapter Deseni varolan arayüzü istemcinin gerek duyduğu arayüze çevirmekte kullanılmaktadır.

(36)

Tasarım Desenleri

FLYWEIGHT PATTERN

DR. ŞAFAK KAYIKÇI

(37)

Flyweight Pattern (cache)

Flyweight , her bir nesnedeki tüm verileri tutmak yerine birden çok nesne arasında ortak durum

parçalarını paylaşarak mevcut RAM miktarına daha fazla nesne sığdırmanıza olanak tanıyan yapısal bir tasarım modelidir.

(38)

Flyweight Pattern

 Yapısal Tasarım Desenleri içerisinde yer almaktadır.

Oluşturulan nesne sayısını azaltmak ve bellek alanını azaltmak ve performansı artırmak için kullanılır.

Flyweight modeli zaten var olan benzer türdeki nesneleri saklayarak yeniden kullanmaya çalışır ve eşleşen bir nesne bulunmadığında yeni bir nesne oluşturur.

(39)
(40)

Tasarım Desenleri

BRIDGE PATTERN (KÖPRÜ)

DR. ŞAFAK KAYIKÇI

(41)

Bridge (Köprü) Pattern

Bridge (Köprü) modeli, büyük bir sınıfı veya yakından ilişkili bir sınıf kümesini birbirinden bağımsız olarak geliştirilebilen iki ayrı hiyerarşiye (soyutlama (abstraction) ve uygulama (implementation)) ayırmanıza olanak tanıyan yapısal bir tasarım modelidir

(42)

UML

1.Abstraction (abstract class) : Soyut arayüzü, yani davranış bölümünü tanımlar. Ayrıca uygulayıcı (Implementer) referansını da ele alır.

2.RefinedAbstraction (normal class): Abstraction tarafından tanımlanan arayüzü uygular.

3.Implementer (interface) : Uygulama sınıfları için arayüzü tanımlar. Bu arayüzün doğrudan soyutlama arayüzüne karşılık gelmesi gerekmez ve çok farklı olabilir.

4.ConcreteImplementor (normal class) : Implementer arayüzünü uygular.

(43)

Sorun - Çözüm

Köprü modeli, kalıtımdan (inheritance) nesne kompozisyonuna (composition) geçerek bu sorunu çözmeye çalışır. Boyutlardan birini ayrı bir sınıf hiyerarşisine çıkararak orijinal sınıflar, tüm durum ve davranışlarına tek bir sınıf içinde sahip olmak yerine yeni hiyerarşinin bir nesnesine başvurur.

(44)

Bridge (Köprü) Pattern

Bir sınıfı birkaç ortogonal (bağımsız) boyutta genişletmeniz gerektiğinde kullanılır.

Platformdan bağımsız sınıflar ve uygulamalar ouşturulabilir. İstemci kodu, üst düzey soyutlamalarla çalışır. Platform ayrıntılarına maruz kalmaz.

(45)

Örnek

(46)

Tasarım Desenleri

DECARATOR PATTERN

DR. ŞAFAK KAYIKÇI

(47)

Decarator Pattern

Dekoratör deseni, bir kullanıcının yapısını değiştirmeden mevcut bir nesneye yeni işlevsellik eklemesine izin verir. Bu desen türü, bu desen mevcut sınıf için bir sarmalayıcı görevi

gördüğünden yapısal modele girer.

Bir nesneniz var ve içine başka bir nesne koyuyorsunuz. Her ikisi de aynı (veya benzer) arayüzleri destekler.

Dışarıdaki nesne "decorator " ve o kullanılır. İçerisindeki nesnenin yöntemlerini ya maskeler, değiştirir ya da aynen kullanılır.

(48)

Decarator Pattern

Dekoratörler, işlevselliği genişletmek için alt sınıflamaya esnek bir alternatif sağlar.

Component – çalışma zamanında kendisiyle ilişkili ek sorumluluklara sahip olabilen sarmalayıcıdır.

Concrete component– programda ek sorumlulukların eklendiği orijinal nesnedir.

Decorator- bu, component nesnesine bir referans içeren ve aynı zamanda component arayüzünü uygulayan soyut bir sınıftır.

Concrete decorator- dekoratörü genişletir ve Component sınıfının üzerine ek işlevsellik oluşturur.

(49)

Örnek

(50)

Tasarım Desenleri

COMPOSITE PATTERN (BİLEŞİK)

DR. ŞAFAK KAYIKÇI

(51)

Composite Pattern (Bileşik)

Bileşik desen, bir grup nesneyi benzer şekilde tek bir nesne olarak ele almamız gerektiğinde kullanılır.

Bileşik desen, tüm hiyerarşinin yanı sıra parçayı da temsil etmek için bir ağaç yapısı bağlamında nesneleri oluşturur. Bu desen türü, bu desen bir nesne grubu ağaç yapısı oluşturduğundan yapısal modelin altına girer.

(52)

Composite Pattern (Bileşik)

Bu desen, kendi nesnelerinin grubunu içeren bir sınıf oluşturur. Bu sınıf, aynı nesnelerden oluşan grubunu değiştirmenin yollarını sağlar.

Karmaşık ağaç yapılarıyla daha rahat çalıştırılabilir. Bu sayede gerektiği yerlerde polimorfizm ve özyineleme(recursion) kullanılabilir.

Oluşturulan ağaçta, her düğüm / nesne (kök düğüm hariç) ya bileşik ya da yaprak düğümdür.

Bileşik desen uygulamak, istemcilerin tek tek nesneleri ve kompozisyonları aynı şekilde işlemesine olanak tanır.

(53)

Örnek

(54)

Tasarım Desenleri

STRATEGY PATTERN

DR. ŞAFAK KAYIKÇI

(55)

Strategy Pattern

 Strategy tasarım deseni behavioral (davranışsal) grubuna aittir.

Nesne tarafından kullanılan bir algoritmayı çalışma zamanında dinamik olarak değiştirmeyi sağlar.

 Kod tekrarını ortadan kaldırmanıza izin verir.

(56)

Strategy Pattern UML

(57)

Örnek – Hesap Makinesi

(58)

Adımlar

1. Strategy arayüzü (interface) oluştur

2. Arayüzü kullanacak sınıfları oluştur (Addition, Subtraction, Multiplication)

3. Strateji arayüzünden strateji tipini yürütmesini isteyecek içerik (Context) sınıfı oluştur.

4. Programı çalıştıracak (main) içeren StartegyPatternDemo sınıfını oluştur.

(59)

Tasarım Desenleri

OBSERVER (GÖZLEMCİ) PATTERN

DR. ŞAFAK KAYIKÇI

(60)

Observer Pattern (Gözlemci Deseni)

 Observer tasarım deseni behavioral (davranışsal) grubuna aittir.

Geşek bağlantı (loosely coupling) sağlar. Gevşek bağlantı, etkileşime giren nesnelerin birbirleri hakkında daha az bilgiye sahip olması gerektiği anlamına gelir.

Bir objenin durum değişikliği ile birçok objenin değişikliğine ihtiyaç duyduğumuz zamanlar için kullanılır. Nesneler arasında bire çok ilişki vardır ve gözlemci nesnelerine otomatik olarak

bildirim yapılır.

 Göndericinin (subject-publisher), gözlemciler hakkında herhangi birşey bilmesine gerek yoktur.

 Gönderici, alakasız gözlemcilere (observer-subscriber) de güncelleme göndermiş olacaktır.

(61)

Örnek 1- tutorialspoint

(62)

Örnek 2- Head First Design Patterns

(63)

Örnek 2- Head First Design Patterns

(64)

Tasarım Desenleri

ITERATOR PATTERN

DR. ŞAFAK KAYIKÇI

(65)

Iterator Pattern

 Davranışsal Tasarım Desenleri içerisinde yer almaktadır.

 Nesne koleksyonlarının (list,array,queue) elemanlarını belirlenen kurallara göre elde edilmesini düzenleyen tasarım desenidir.

 Listenin iç yapısı bilinmeden gezinmeye izin verir.

(66)

Koleksiyonlar (Collections)

Koleksiyonlar, programlamada en çok kullanılan veri türlerinden olup nesne grupları için torba görevi yapmaktadır.

Koleksiyonlar basit listeler olabileceği gibi yığınlara (stack), ağaçlara (tree), grafiklere (graph) ve diğer karmaşık veri yapılarına dayanmaktadır. Ancak bir koleksiyon nasıl yapılandırılırsa tasarlansın, aynı öğelere tekrar tekrar erişmeden koleksiyonun her bir öğesi üzerinden geçmenin bir yolu olmalıdır.

(67)

Iterator Deseni

Iteratörler, çeşitli geçiş(traverse) algoritmalarını uygularlar ve geçiş ayrıntılarını (örn: geçerli konum veya sonuna kadar kaç öğenin kaldığı gibi) kapsüller. Bu sebeple, birkaç iteratatör aynı anda aynı koleksiyonda gezinebilir.

Genellikle iteratörler, koleksiyonun öğelerini getirmek için tek bir ana bir yöntem sağlar. İstemci hiçbir şey döndürmeyinceye kadar bu yöntemi çalıştırmaya devam edebilir; bu, iteratörün tüm öğeleri geçtiği anlamına gelir.

Tüm iteratörler aynı arayüzü (interface) uygulamalıdır. Bu, istemcinin uygun bir iteratör bulduğu sürece kodunu herhangi bir koleksiyon türü veya geçiş algoritmasıyla uyumlu hale getirmesini sağlar.

Bir koleksiyonda gezinmek için özel bir yol ihtiyacı doğarsa, koleksiyonu veya istemciyi değiştirmek zorunda kalmadan sadece yeni bir iteratör sınıfı oluşturulur.

(68)

Avantaj - Dezavantaj

Avantajlar

Single Responsibility Principle (Tek Sorumluluk İlkesi) : Çok yer kaplayan geçiş (traverse) algoritmalarını ayrı sınıflara çıkararak istemci kodunu ve koleksiyonları temizleyebilirsiniz.

Open/Closed Principle (Açık / Kapalı Prensibi) : Yeni koleksiyon ve iteratör türleri uygulayabilir ve bunları hiçbir şeyi bozmadan mevcut koda geçirebilirsiniz.

Her iteratör kendi iterasyon durumunu içerdiğinden, aynı koleksiyon üzerinde paralel olarak gezinme yapabilirsiniz. Aynı nedenle, bir yinelemeyi erteleyebilir ve gerektiğinde devam

edebilirsiniz.

Dezavantajlar

Uygulamanız sadece basit koleksiyonlarla çalışıyorsa, kalıbı uygulamak abartılı olabilir.

Bir iteratör kullanmak, bazı özel koleksiyonların öğelerinden doğrudan geçmekten daha az verimli olabilir.

(69)

Iterator Deseni

(70)

Tasarım Desenleri

MEMENTO PATTERN

DR. ŞAFAK KAYIKÇI

(71)

Memento (Snapshot) Pattern

 Davranışsal Tasarım Desenleri içerisinde yer almaktadır.

 Bir nesnenin durumunu kaydetmenize ve önceki bir duruma geri yüklemek için kullanılır.

Akıl Defteri

(72)

Memento Deseni

Undo veya ctrl + z bir düzenleyicide en çok kullanılan işlemlerden biridir.

(73)

Avantaj - Dezavantaj

Avantajlar

Encapsulation ihlal etmeden nesnenin durumunun anlık görüntülerini üretebilirsiniz.

Bakıcının (caretaker), oluşturanın (Originator) durum geçmişini korumasına izin vererek, oluşturanın (Originator) kodunu basitleştirebilirsiniz.

Dezavantajlar

İstemciler çok sık snaphot oluşturuyorsa, uygulama çok fazla RAM tüketebilir.

 Bakıcılar (caretaker), eskimiş snapshotları yok edebilmek için oluşturanın (Originator) yaşam döngüsünü izlemelidir.

 PHP, Python ve JavaScript gibi çoğu dinamik programlama dili, mementodaki duruma dokunulmadan kalacağını garanti edemez.

(74)

Memento Deseni

(75)

Tasarım Desenleri

CHAIN OF RESPONSIBILITY

DR. ŞAFAK KAYIKÇI

(76)

CoR – Chain of Responsibility

CoR (sorumluluk zinciri) istekleri bir işleyici (handler) zinciri boyunca iletmenize izin veren davranışsal bir tasarım modelidir. Bir istek geldikten sonra, her işleyici isteği işlemeye veya zincirdeki bir sonraki işleyiciye iletmeye karar verir.

(77)

CoR – Chain of Responsibility

Programın farklı türden istekleri çeşitli şekillerde işlemesi beklendiğinde ancak isteklerin kesin türleri ve sıraları önceden bilinmediğinde CoR kullanılır.

CoR, birkaç işleyiciyi tek bir zincire bağlamanıza ve bir istek alındığında, her işleyiciye onu işleyip işleyemeyeceğini "sormanıza" olanak tanır. Bu şekilde, tüm işleyiciler isteği işleme şansı elde eder.

Zincirdeki işleyicileri herhangi bir sırayla bağlayabileceğiniz için tüm istekler tam olarak planladığınız gibi zincirden geçecektir.

İşleyici sınıflarının içindeki bir referans alanı için setter metodları sağlarsanız, işleyicileri dinamik olarak ekleyebilir, kaldırabilir veya yeniden sıralayabilirsiniz.

(78)

Örnek

1- Sipariş sisteminde talebin bir dizi kontrolden geçmesi gerekir.

2- Kod büyüdükçe daha karmaşık hale gelir

3- İşleyiciler bir zincir oluşturacak şekilde sıraya dizilir.

(79)

Örnek 2 – JDK

try-catch logger

(80)

UML

Handler: Kendisinden türeyen ConcreteHandler' ların, talebi ele alması için gerekli arayüzü tanımlar.

Abstract class veya Interface olarak tasarlanır.

ConcreteHandler: Sorumlu olduğu talebi değerlendirir ve işler. Gerekirse talebi zincir içerisinde arkasından gelen nesneye iletir. Sonraki nesnenin ne olacağı genellikle istemci tarafında belirlenir.

Client : Talebi veya mesajı gönderir.

(81)

Örnek

ATM

50TL DAĞITICI

20TL DAĞITICI

10TL DAĞITICI

10TL katlarında miktar giriniz :

(82)

Tasarım Desenleri

COMMAND PATTERN

DR. ŞAFAK KAYIKÇI

(83)

Command Pattern (Komut Deseni)

Command deseni bir isteği, istekle ilgili tüm bilgileri içeren bağımsız bir nesneye dönüştüren davranışsal bir tasarım modelidir. Bu dönüşüm, farklı isteklere sahip yöntemleri parametrelendirmenize, bir isteğin yürütülmesini geciktirmenize veya sıraya koymanıza ve geri alınamaz işlemleri desteklemenize olanak tanır.

(84)

Command Pattern (Komut Deseni)

Command deseni, belirli bir yöntem çağrısını bağımsız bir nesneye dönüştürebilir. Bu değişiklik sayesinde komutlar yöntem argümanları olarak iletebilir, bunları diğer nesnelerin içinde

saklanabilir veya çalışma zamanında bağlantılı komutları değiştirilebilir.

Diğer nesnelerde olduğu gibi, komutta serileştirilebilir. Bu da onu bir dosyaya veya veritabanına kolayca yazılabilen bir stringe dönüştürmek anlamına gelir. Daha sonra, string ilk komut nesnesi olarak geri yüklenebilir. Böylece, komutun yürütülmesini geciktirebilir, yarlanabilir ve ağ

üzerinden iletilebilir.

(85)

Örnek

(86)

Örnek 2- JDK

Runnable interface (java.lang.Runnable)

Swing Action (javax.swing.Action)

Invocation of Struts Action class by Action Servlet (dahili olarak kullanmaktadır)

(87)

UML

Komut (Command) : Gerçekleştirilecek işlem için bir ara yüz tanımlar.

Somut Komut (Concrete Command): Alıcı ve gerçekleştirilecek işlemler arasında bir bağ kurar, alıcıda karşılık düşen işlemleri çağırarak çalıştırma eylemini gerçekleştirir.

İstemci (Client): Komut nesnesini oluşturur ve metodun sonraki zamanlarda çağrılabilmesi için gerekli bilgiyi sağlar.

Çağırıcı (Invoker): Metodun ne zaman çağrılacağını belirtir.

Alıcı (Receiver): Kullanıcı isteklerini gerçekleştirecek asıl metod kodlarını içerir.

(88)

Akıllı Ev

(89)

Tasarım Desenleri

MEDIATOR (ARACI)

DR. ŞAFAK KAYIKÇI

(90)

Mediator Pattern

Arabulucu (Meditor) tasarım kalıbı, nesneler arasındaki bağımlılıkları azaltmanıza izin veren

davranışsal bir tasarım modelidir. Model, nesneler arasındaki doğrudan iletişimi kısıtlar ve onları yalnızca bir aracı nesnesi aracılığıyla işbirliği yapmaya zorlar.

(91)

Mediator Pattern

Mediator, nesneler arasında gevşek bağlı (loosely coupled) iletişim kurulmasına yardımcı olur ve birbirine doğrudan referansları azaltmaya yardımcı olur. Bu, bağımlılık yönetiminin karmaşıklığını ve katılan nesneler arasındaki iletişimin en aza indirilmesine yardımcı olur. Nesneler, düzinelerce başka nesneye bağlanmak yerine yalnızca tek bir aracı sınıfına bağlıdır.

Birden çok nesnenin isteği işlemek için birbiriyle etkileşime girmesi gereken ve doğrudan iletişim karmaşık bir sistem oluşturabileceği durumlar için Mediator modeli kullanılabilir.

(92)

Örnekler

Havalimanları : Uçak pilotları, bir sonraki uçağa kimin ineceğine karar verirken birbirleriyle doğrudan konuşmazlar. Tüm iletişim kontrol kulesinden geçer. Bu kulelerin tüm uçuşu kontrol etmediğini

unutmamalıyız. Yalnızca terminal bölgelerinde kısıtlamalar uygularlar.

Chat Odaları: Bir sohbet uygulamasında birkaç katılımcımız olabilir. Her katılımcıyı diğerlerine

bağlamak iyi bir fikir değildir çünkü bağlantıların sayısı gerçekten çok yüksek olacaktır. En iyi çözüm, tüm katılımcıların bağlanacağı bir merkeze sahip olmaktır; bu hub mediator sınıfıdır.

(93)

JDK

 java.util.concurrent.Executor arayüzündeki execute () yöntemi bu kalıbı kullanır.

 java.util.Timer sınıfına ait schedule() yöntemlerinin farklı aşırı yüklenmiş (overloaded) sürümlerinin de bu kalıbı izlediği düşünülebilir.

(94)

UML

Mediator - Colleague nesneleri arasındaki iletişim için arayüzü tanımlar

ConcreteMediator - Mediator arayüzünü uygular ve Colleague nesneleri arasındaki iletişimi koordine eder.

Colleague - Mediator aracılığıyla diğer Colleague nesneleriyle iletişim için arayüzü tanımlar

ConcreteColleague - Colleague arayüzünü uygular ve Mediator aracılığıyla diğer Colleague nesneleri ile iletişim kurar

(95)

Tasarım Desenleri

STATE PATTERN (DURUM)

DR. ŞAFAK KAYIKÇI

(96)

State Pattern

State (durum), bir nesnenin iç durumu değiştiğinde davranışını değiştirmesine izin veren davranışsal bir tasarım modelidir. Nesne, sınıfını değiştirmiş gibi görünür.

Finite State Machine ( FSM -Sonlu Durum Makinesi) kavramı ile yakından ilgilidir.

(97)

State Pattern

Herhangi bir uygulamada, yaşam döngüsü boyunca farklı durumlarda olabilecek bir nesneyle ve mevcut durumuna göre gelen istekleri nasıl işlediğini (veya durum geçişlerini yaptığını) ele

alındığında State Pattern kullanılabilir. Böyle bir durumda State Pattern kullanılmazsa, kod

tabanında çirkin, gereksiz yere karmaşık ve bakımı zor hale getiren çok sayıda if-else ifadesi yer alacaktır.

Nesnenin olası her durumu için ayrı bir somut sınıf olacaktır. Her somut durum nesnesi,

kendisine iletilen parametrelere bağlı olarak durumunu değiştirecek veya değiştirmeyecektir.

Ayrıca, yeni durumların eklenmesi, mevcut durumların davranışını etkilememelidir.

(98)

Örnekler

TV : Uzaktan kumandadaki düğmelere basarak TV'nin durumunu değiştirilebilir. TV'nin mevcut durumuna bağlı olarak, AÇIK ise onu KAPATABİLİR, sessize alabilir veya özellikleri değiştirilebilir.

Ancak TV KAPALI ise, uzaktan kumanda düğmelerine basıldığında bir şey olmayacaktır. KAPALI TV için yalnızca bir sonraki olası durum AÇIK konuma gelmesidir.

Fast Food Otomatları : Para ile alışveriş yapılan kahve yada fastfood makineleri

(99)

JDK

Threads : Java iş parçacıkları yaşam döngüsü boyunca beş durumundan biri olabilir. Bir sonraki durumu ancak mevcut durumu alındıktan sonra belirlenebilir. Örneğin. Durdurulmuş bir iş

parçacığını başlatamayız veya bir iş parçacığı çalışmaya başlayana kadar bekleyemeyiz

(100)

UML

(101)

Tasarım Desenleri

TEMPLATE PATTERN (KALIP-ŞABLON)

DR. ŞAFAK KAYIKÇI

(102)

Template Pattern

Template tasarım deseni, programlama bağlamında algoritmaların adımlarını uygulamak için yaygın olarak kabul edilen davranışsal tasarım modelidir .

Çok adımlı bir algoritmayı yürütmek için sıralı adımları tanımlar ve isteğe bağlı olarak varsayılan bir uygulama da sağlanabilir.

(103)

Template Pattern

Şablon desen , programlama dünyasında belirli sıralı algoritma adımlarını tanımlamak ve

uygulamak için kullanılan çok kolay bir tasarım modelidir. Alt sınıflarda ezilecek veya ezilmeyecek olan bir algoritmanın iskeletini tanımlamaya yardımcı olur.

İstemcilerin bir algoritmanın yalnızca belirli adımlarını genişletmesine izin vermek, ancak tüm algoritmayı veya yapısını genişletmek istemediğimizde kullanılır.

Bazı küçük farklarla neredeyse aynı algoritmaları içeren birkaç sınıf olduğunda modeli kullanın. Sonuç olarak, algoritma değiştiğinde tüm sınıfları değiştirmeniz gerekebilir.

(104)

Önemli Noktalar

 Template methodu final yapın : Böylece uygulayan sınıflar ezemez (override) ve adımların sırasını değiştiremez.

 Ana sınıfta, soyut (abstract) olmayan tüm yöntemlerin içini default kodu ile doldurun. Böylece alt sınıfların bunları tanımlaması gerekmez.

 Alt sınıfların uygulaması gereken tüm metotları soyut (abstract) yapın.

(105)

Örnek

öntanımlı (default) yapılışı olan adımlar

Temel inşaatı

Çatı yapımı

öntanımlı (default) yapılışı olmayan adımlar

Duvar yapımı

Pencere ve kapıların yapımı

Boyama

İç dekorasyon

Amaç : Uygulamadaki tüm sınıfların bu adımları sırasına uygun olarak uygulaması

(106)

Tasarım Desenleri

VISITOR PATTERN (ZIYARETCI)

DR. ŞAFAK KAYIKÇI

(107)

Visitor Pattern

Ziyaretçi (visitor) çok sayıda ve farklı tipteki nesneler üzerinde işlem yapabilmek amacıyla kullanılır. İşlem yapılacak nesnelerde herhangi bir değişiklik yapılmaz.

(108)

Visitor Pattern

Visitor (Ziyaretçi) Tasarım kalıbı popüler bir tasarım kalıbı değildir ancak yazdığımız sınıflara sonradan modüler olarak metodlar eklememizi sağlar. Sınıfın olmayan özelliğini sonradan eklemeyi kolaylaştırır

İşlemi ziyaretçi nesneleri yapar. Eğer sisteme yeni nesneler eklenmiyor, fakat sık sık yeni işlemlerin eklenmesi gerekiyorsa bu tasarım deseni kullanılabilir. Bu tasarım deseninin kullanılmasıyla, yapılacak işlemle ilgili kodların merkezi bir nesnede toplanır.

(109)

UML

(110)

Visitor Pattern

Ziyaretçi Modeli Faydaları :

 İşlem mantığı değişirse, tüm öğe sınıflarında yapmak yerine sadece ziyaretçi uygulamasında değişiklik yapılır

 Sisteme yeni bir öğe eklemenin kolaydır. Yalnızca ziyaretçi arayüzünde ve uygulamasında değişiklik gerektirir ve mevcut öğe sınıfları etkilenmez.

Ziyaretçi Modeli Kısıtlamaları:

 Tasarım sırasında visit() yöntemlerinin dönüş türünün bilinmesi gerekir, aksi takdirde arayüzü ve tüm uygulamalar değiştirilir.

 Ziyaretçi arayüzünün çok fazla uygulaması varsa, genişletmeyi zorlaştırmasıdır.

(111)

Örnek – Alışveriş Sepeti

Farklı türde öğeler ekleyebileceğimiz bir alışveriş sepeti düşünün. Ödeme butonuna tıkladığımızda ödenecek toplam tutarı hesaplanır.

Bu hesaplama işlemini her öğe sınıfının içerisinde yapabiliriz veya bu mantığı ziyaretçi kalıbını kullanarak başka bir sınıfa taşıyabiliriz.

Referanslar

Benzer Belgeler

“ Gelecek Durak” ve “ Alice Ha­ rikalar Diyarında” ile ünlenmiş yö­ netmen Mazursky (Senaryo ile Os- car’a aday gösterilmişti) bu yol kome­ disinde

Basis vectors can be defined as the coordinates of atoms, which lie inside the unit cell paralleloid, defined by the primitive vectors and the origin. The data structure used in

Ülkemizde aile hekimli¤inin akademik geliflimine koflut olarak, üniversitelerde ve e¤itim birimlerindeki akademik aile hekimlerinin bilimsel araflt›rmalar› giderek

We also found a strong synergistic effect between the PPARγ gene and hypertension, diabetes mellitus on the risk of ischemic stroke. Furthermore, our results indicated that there

3sn’den uzun süreli alfa intrüzyonları ise öncesinde 10 sn süreli alfasız uyku olması durumunda arousal olarak skorlanır.. EMG, solunum ve EKG kanallarından ek bilgi

Üç sn’den uzun süreli alfa intrüzyonları ise öncesinde 10 sn süreli alfasız uyku olması durumunda arousal olarak skorlanır.. EMG, solunum ve EKG kanallarından

Değerlendirilen mikroyapısal parametreler: CAP oranı [(toplam CAP zamanı/NREM uyku süresi) x 100] NREM’in totali ve evreleri için ayrı ayrı hesaplanmıştır),

And here we can be discussing blood spatter, hair microscopy or soil samples, as one of the fundamentals of forensic science is entwined with the skill of blood