CHAIN OF RESPONSIBILITY

Slides:



Advertisements
Benzer bir sunumlar
Programlama-II (Java ile Bilgisayar Programlama)
Advertisements

Java Programlama Giriş/Çıkış
Yazılım Geliştirme ve Java
Saatte V km hız ile giden bir aracın t zamanda aldığı yolu bulan metodu yazınız. Metodu kullanacak bir program yazınız. ( yol=hız*zaman, x=V*t) — Metot.
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar)
Tuğba DEMİREL
Programlama-II (Java ile Bilgisayar Programlama)
Hata Kontrol & İstisna durumları
Polymorphism.  Bir işlem birden fazla tip üzerinde çalışabilir  Metot temel tip arayüzünü kullanır  İşlem çalışan metot tarafından yapılır.
EDUTIME Java Day 4 Serdar TÜRKEL.
Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu
P p 8. Ünitede yinelemeli programlamanın teknikleri anlatılmaktadır. p p Gördüğünüz gibi, yinelemeli programlama bir problemin içinde problemin küçük parçalarını.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Namespaces and .NET Class Library (İsim Alanları Sınıf Kütüphanesi)
P AKET E RIŞIMLERI SıNıFLARıN YENIDEN KULLANıMı. P AKET ( P ACKAGE ) Paketler kütüphaneleri oluşturan elemanlardır. import java.io.BufferedReader; BufferedReader.
Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi Hazırlayan : Nuri AVCI
Java Programlama Koleksiyon(Collection) Sınıfları
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
NESNEYE YÖNELİK PROGRAMLAMA
DİZİLER.
P 2. Ünitede Nesneye Dayalı Programlama anlatılıyor. p Nesneye dayalı programlama yeni veri tiplerinin ve bu tipleri işletmek için gereken işlemleri oluşturmayı.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
METODLAR.
C# Metot Overloading (Aşırı yükleme)
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
İSİM UZAYLARI (NAMESPACE)
NESNEYE DAYALI PROGRAMLAMA
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
Java Sınıf ve Nesne Kavramı UML Gösterimi
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 8: Windows Formları
Chapter 13: Handling Events. 2Microsoft Visual C# 2012, Fifth Edition Olay İşleme Olay – Bir nesne için ilginç bir şey olduğu zaman oluşur. – Programın.
Net Class Framework ’ ün en üst yapısına İsim Uzayı denir. İsim uzayları ; pascal programlama dilinde 1990 ve hatta öncesinden beri varolmuş, C’de yer.
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
METOTLAR.
ÇOK BİÇİMLİLİK POLYMORPHISM
Önceki Dersi Hatırlama !!
Kalıtım.
C# ile Seri İletişim Aslı Ergün.
EDUTIME Java Day 8 Serdar TÜRKEL.
Chapter 11: Exception Handling
BTP205 – Görsel Programlama I
Polimorfizm.
Nesneye Dayalı Programlama
Class KahveFincani { public KahveFincani() { System.out.println("KahveFincani..."); } } public class YapilandirciBasitOrnek { public static void main(String[]
JAVA’DA DİZİLER Dr.Galip AYDIN.
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 5 Nesneler ve Metotlar
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
Ders 2- Veri türleri, Karar ve Döngü Yapıları, Görsel Kontröller
JAVA PROGRAMLAMA ORNEKLER
Görsel C# ile Windows Programlama
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
Modül 1: Giriş. Genel Bakış Temel.NET kavramları Geliştirme ortamında gezinti Bir C# projesi oluştur Use Visual Studio.NET Veriye eriş Hata ayıkla ve.
MOB İ L UYGULAMA GEL İ ŞT İ RME Hafta 11. VER İ LER İ SAKLAMA Android sistemlerinde hazırlanacak projelerde verileri saklamak için android sisteminin.
Kompozisyon Bir Sınıf diğer sınıf nesne referanslarını içinde barındırabilir. Bu referanslar sınıfın üyeleridir.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
ANDROİD STUDİO SAYFA NESNELERİ SAVAŞ TUNÇER
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
NİŞANTAŞI ÜNİVERSİTESİ
BLP 4210 PLATFORM BAĞIMSIZ PROGRAMLAMA
Sunum transkripti:

CHAIN OF RESPONSIBILITY Hacettepe Üniversitesi Bilişim Enstitüsü CHAIN OF RESPONSIBILITY Funda KAHRAMAN - Tuğba ÖZTÜRK 2009

İçerik Chain Of Resposibility (CoR) Pattern tanımı CoR Yapısı Örnekler Kullanım Alanları Diğer Patternlerle İlişkisi Kaynaklar Sorular

Chain Of Resposibility (CoR) GOF Tanımı “Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.” “Gönderilen istek yada çağrının birden çok işleyici(handler) sınıf üzerinden geçmesine olanak sağlayıp çağıranın alıcı nesneye olan bağımlılığından kaçının. İşleyici (Alıcı) nesnelerden kurulu bir zincir ile gelen istek ve çağrının mutlaka o zincirden geçmesini ve işlenmesini sağlayın. ”

Chain Of Resposibility (CoR) Tanımı CoR, Davranışsal (behavioral) tasarım örüntüleri içinde yer alır. CoR; gelen istek ve taleplerin, kapsamı ve kuralları belirlenmiş bir işleyici zincirinden geçmesi ve mutlaka bir işleyici tarafından karşılanmasını sağlar.Nesnelerin birbirlerinden bağımsız bir şekilde çalışabilmesini ve her sınıfın sadece kendisi ile ilgili işleri yapmasını sağlar Nesneler arasındaki ilişkiyi düzenler Birbirinden farklı olarak çalışan bu nesneler arasındaki tek bağ ise ortak bir mesaj(request) imzasıdır. Bütün nesneler bu mesaj imzasını kullanarak işlerini gerçekleştirir.

Zincirin son halkası hariç İşleyici (handler) sınıflar zincirdeki bir sonraki halkanın (successor) referansını kullanarak gelen talebin kendisi tarafından karşılanıp karşılanmayacağına karar verir, eğer bu istek zincirdeki bir üst halkanın sorumluluk alanında ise bu isteği ona yönlendirir. Bu süreç zincirdeki ara bir işleyicinin talebi karşılaması yada son işleyici sınıfa kadar talebin ulaşması ve sonlandırılmasını kapsar. CoR’ un içinde geçen sorumluluk kavramı, zincirde yer alan tüm işleyicilerin ayrı bir sorumluluk alanına sahip olduğunu gösterir. Bu sorumluluk zincirinde yer alan sınıflardan birisi gelen isteklere cevap vermekle yükümlüdür.

CoR Yapısı

Bileşenleri Handler ConcreteHandler Client Zincirini oluşturan her bir eleman bu sınıftan türemiştir. Zincirin her elemanının ortak olan mesajı işlemesi için gerekli olan arayüzü (interface) sunar. Bu sınıf içerisinde ayrıca zincirin bir sonraki halkasına referans vardır. Bu referansın türü de yine kendi cinsindendir. ConcreteHandler Bu sınıfların sayısı istenildiği kadar olabilir. Ancak pratikte Chain of responsibility deseni, zincirdeki eleman sayısının 10'u aşmadığı durumlar için uygundur. Bu sınıfların her biri tamamen birbirinden bağımsızdır ve aralarındaki tek ortak nokta temel sınıftan türemiş olması ve ortak bir mesaj üzerinde çalışmasıdır. Client Zincirdeki elemanların sırasını belirleyen, nesneleri kullanan, zinciri şekillendiren ve zincirdeki ilk elemana isteği gönderen client dır.

Not: Chain of responsibility tasarım deseninde klasik olarak mesajı işleyen yalnızca bir başarılı zincir halkası vardır. Ancak bu bir zorunluluk değildir. İstenirse mesajı birden fazla halka da başarılı bir şekilde işleyebilir. Chain of responsibility desenin temel çıkış amacı işi yapacak halkayı bulabilmektir. Eğer her halkada mesaj işlenecekse Chain of responsibility deseninin bir anlamı kalmamaktadır.

Örnek 1 Bir nesnenin toString() metodunu çağırdınız. Bu nesne içinde toString() metodu varsa o çağrılır, yoksa super (atası olan bir üst sınıf) sınıfına bakılır, onda da metot bulunmaz ise bu şekilde devam edilir en sonunda da Object sınıfının toString() metodu çalıştırılır.

Örnek 2 İçine para atarak, kahve aldığımız bir kahve otomatı düşünelim.Bir kahvenin bedeli 1 lira olabilir. Kahveyi alabilmek için 1 lira değerindeki metal parayı otomata atmamız gerekiyor.Otomatın, içine atılan metal paraları tanıyabilmesi için bir zincir oluşturmamız gerekiyor.Her metal para bu zinciri, doğru para nesnesini bulana kadar baştan sona kadar dolaşacaktır.

package MetalParaAtma; public abstract class MetalPara { // Metal paranin sahip oldugu deger. 5, 10, 50, 100 Kurus olabilir protected MetalPara para; public void setPara(MetalPara para) { this.para = para; } abstract public void checkPara(double atilanPara);

package MetalParaAtma; public class BirLira extends MetalPara { private final double kabulDeger = 100; public void checkPara(double atilanPara) { if (atilanPara == kabulDeger) System.out.println("Atilan para kabul"); } else { if (para != null) para.checkPara(atilanPara); } package MetalParaAtma; public class ElliKurus extends MetalPara { private final double kabulDeger = 50; public void checkPara(double atilanPara) { if (atilanPara == kabulDeger) System.out.println("Atilan para kabul"); } else { if (para != null) para.checkPara(atilanPara); }

package MetalParaAtma; public class OnKurus extends MetalPara { private final double kabulDeger = 10; public void checkPara(double atilanPara) { if (atilanPara == kabulDeger) { System.out.println("Atilan para kabul"); } else { if (para != null) para.checkPara(atilanPara); } package MetalParaAtma; public class BesKurus extends MetalPara { private final double kabulDeger = 5; public void checkPara(double atilanPara) { if (atilanPara == kabulDeger) { System.out.println("Atilan para kabul"); } else { if (para != null) para.checkPara(atilanPara); System.out.println("Para Uygun Değil!"); }

package MetalParaAtma; import java.io.BufferedReader; import java.io.InputStreamReader; public class KahveOtomati { public static void main(String[] args) { BirLira birLira = new BirLira(); ElliKurus elliKurus = new ElliKurus(); OnKurus onKurus = new OnKurus(); BesKurus besKurus = new BesKurus(); birLira.setPara(elliKurus); elliKurus.setPara(onKurus); onKurus.setPara(besKurus); while (true) { System.out.println("Otomata para atınız!"); double d = 0; try { d = Double.parseDouble(new BufferedReader(new InputStreamReader(System.in)).readLine()); } catch (Exception e) { e.printStackTrace(); } birLira.checkPara(d);

Otomata para atınız! 100 Atilan para kabul 50 10 5 500 Para Uygun Değil!

Örnek 3 Şirketinizin parasından harcama yapmak istediğinizde patronunuzdan izin almalısınız. Yada patronunuzun patronundan yada onun patronundan... Yönetici -->Müdür-->Başkan Yardımcısı--->Başkan

Kullanım Alanları Kullanıcı sınıf ile servis sağlayan nesne arasında sıkı bağ oluşmasını engellemek için kullanılır. Kullanıcı sınıf ile servis sunucu nesneler birbirini tanımak zorunda değildirler. Loglama gereksinimlerini mümkün olan en güvenli şekilde CoR kalıbı ile gerçekleştirebilirsiniz. Örneğin oluşan istisnai durumları mutlaka loglamak istiyorsunuz ve bunu yaparken sadece veritabanını kullanmak istemiyorsunuz. Bu ihtiyaç için veritabanı, text log dosyaları ve event log gibi log kaynaklarını kullanan işleyicilerden kurulu bir zincir ile oluşan hataları ve ististanaları loglamanız mümkün.

Kullanım Alanları Mail Sunucularındaki Mesaj Filtreleri Derleyiciler Mail sunucusundan mesaj mail kutunuza gelene kadar birçok filtreden geçer. Mail ilk önce spam filtresinden geçer eğer başarılı ise ardından çeşitli mail filtrelerinden de geçtikten sonra en son mailin iletilmesi modülüne gönderilir. Spam belirleme, fake mail belirleme ve mail gönderme modülleri birbirinden tamamen bağımsız ve habersizdir dolayısıyla mail gönderme işlemini bir bütün olarak ele alabilmek için her bir modülün ortak mesaj/request olan mail nesnesi üzerinde çalışması gerekir. Derleyiciler Bir metodu çağırdığımızda derleyici o metodun hangi sınıflarda bulunduğunu tespit etmek ve hangi sırada çalışacağını belirlemek amacıyla CoR desenindeki mantıktan faydalanır. Çağrılan metot ilk sınıfta yok ise bir sonraki sınıfa eğer ondan da yoksa daha üstlere doğru ilerleyerek uygun sınıfı bulana kadar zincirde ilerlemeye devam eder. Eğer zincirde uygun çağrılabilecek metot yok ise derleyiciler çoğunlukla derleme hatası dediğimiz hataları vermektedir.

Kullanım Alanları Yorumlayıcılar Görsel Olay(Event)'ların Yakalanması Birçok yorumlayıcı içeren uygulama girdi olarak aldığı komutları çeşitli mekanizmalara göre kategorize eder. Örneğin komut olarak girilen yazı çalıştırılabilir dosya ise yeni bir proses açıp onu çalıştırması, komut bir resim dosyasının açılması veya mail gönderilmesi ise ilgili aksiyonların alınması hep belirli bir öncelik sırasında gerçekleşir. Görsel Olay(Event)'ların Yakalanması Bir windows uygulamasında container dediğimiz birçok kontrol bulunmaktadır. Örneğin farenin ekranda hareket etmesini Panel ,textbox veya form nesnesi yakalayabilir. Farenin hareket etmesine hangi kontroller nasıl cevap verecek noktasında olaya tepki verebilecek nesneler zinciri kurulur ve bir noktadan başlayarak zincirde devam edilir. Nesne yönelimli programlamanın temelinde türetme mantığı yatar. Birbirinden türemiş nesne zincirinde hiyerarşinin en altında bulunan bir sınıf nesnesi üzerinden herhangi bir metodu çağırdığımızda derleyici o metodun hangi sınıflarda bulunduğunu tespit etmek ve hangi sırada çalışacağını belirlemek amacıyla Chain of responsibility desenindeki mantıktan faydalanır.

Diğer Patternlerle İlişkisi Composite Pattern Bir composite nesneyi oluşturan alt nesneler zincirin parçası olarak düşünülebilir.

Kaynaklar Design Patterns - [GOF - Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides] Design Patterns - Elements of Reuseable Object-Oriented Software http://www.yazgelistir.com Java Tasarım Şablonları ve Yazılım Mimarileri

SORULAR