Decorator Tasarım Şablonu



Benzer belgeler
Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Business Delegate Tasarım Şablonu KurumsalJava.com

Loose Coupling (LC) Esnek Bağ Tasarım Prensibi KurumsalJava.com

Intercepting Filter Tasarım Şablonu KurumsalJava.com

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

Builder Tasarım Şablonu KurumsalJava.com

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

BİL-141 Bilgisayar Programlama I (Java)

Adapter Tasarım Şablonu

Open Closed Principle (OCP) Açık Kapalı Tasarım Prensibi KurumsalJava.com

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Java Interface ve Abstract Sınıflar

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Sunum İçeriği. Programlamaya Giriş

Üst Düzey Programlama

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

.com. Özcan Acar 2009 Kurumsal Java.com

Flyweight (Sinek Siklet) Tasarım Şablonu KurumsalJava.com

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Nesne Yönelimli Programlama

Klavyeden Basit Giriş/Çıkış İşlemleri

HSancak Nesne Tabanlı Programlama I Ders Notları

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

Üst Düzey Programlama

Proxy (Vekil) Tasarım Şablonu KurumsalJava.com

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Nesne Tabanlı Programlama

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

public static int Toplam int x, int y

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

YZM 2105 Nesneye Yönelik Programlama

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Nesneye Dayalı Programlama

7. HAFTA. Erişim Belirleyiciler

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 4. UYGULAMA

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma

MOBİL UYGULAMA GELİŞTİRME

Nesneye Yönelik Programlama (OOP) 7.Hafta

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

BTEP243 Ders 3. class Yazım Kuralı:

Java Class Yapısında Finalize Metotunun Kullanımı

.com. Özcan Acar 2009 Kurumsal Java.com

2. Bölüm Spring İle Tanışalım

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

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

C++ Dersi: Nesne Tabanlı Programlama

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

BMH-303 Nesneye Yönelik Programlama

EĞİTİM-ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ VE YAZILIM DERSİ 6. SINIF 2. DÖNEM 2. SINAV ÇALIŞMA NOTLARI

YZM 2105 Nesneye Yönelik Programlama

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

Nesneye Dayalı Programlama

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

Nesne Yönelimli Programlama

BİL132 Bilgisayar Programlama II

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi YAYIN ALICILARI. BLM401 Dr.Refik SAMET

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Java ile Tasarım Prensipleri ve Tasarım Örüntüleri

NESNEYE YÖNELİK PROGRAMLAMA

MARKAM SMS WEB PORTAL KULLANIM KILAVUZU

Listview Kullanımı. Aşağıdaki örnekte bir ListView'ı birkaç ülke ismiyle dolduracağız.

Özcan Acar 2010 Kurumsal Java Akademisi.com

Genel Programlama II

Lambda İfadeleri (Lambda Expressions)

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Yazılım Kodlama ve İ simlendirme Standartları v1.0

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 9. UYGULAMA

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

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:

Front Controller Tasarım Şablonu KurumsalJava.com

İskambil Kağıtları. Bir İskambil kağıdı

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Üst Düzey Programlama

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

Android Ders Notları

Lecture 11: Generics

Java Dersi. Altuğ Bilgin Altıntaş

CBÜ Teknoloji Fakültesi, Yazılım Mühendisliği. Nesneye Yönelik Programlama

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

Transkript:

Decorator Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com http://www.javadergisi.com

Mevcut bir sınıf hiyerarşisini ya da sınıfın yapısını değiştirmeden, oluşturulan nesnelere yeni özelliklerin eklenme işlemini gerçekleştirmek için Decorator tasarım şablonu kullanılır. Alt sınıfların oluşturulması yöntemiyle, sınıflara yeni özelliklerin eklenmesi, daha sonra sisteme eklenecek alt sınıflar için değiştirilmesi zor kalıpların oluşmasını beraberinde getirir. Bu durumda, üst sınıflarda tanımlanmış olan bazı özellikler statik ve alt sınıflar için değistirilemez ya da kullanımı engellenemez bir hal alabilir. Kullanıcı sınıflar içinde bu sorun teşkil edebilir, çünkü kendi istekleri doğrultusunda bir nesnenin ne zaman ve nasıl oluşturulması gerektiğini yönlendiremeyebilirler. Nesnelere, sahip oldukları sınıfların yapılarının değistirilmeden yeni özelliklerin eklenmesini sağlayan Decorator tasarım şablonu ile, istenilen özelliklerin ekleneceği nesne başka bir nesne içine gömülür. Yeni özellik eklenen nesneyi içine alan nesneye dekoratör ismi verilir. Dekoratör nesnesi ile yeni özellik eklenen nesne aynı üst sınfa dahil olduklarından, birbirleriyle değiştirilebilir haldedirler. Bu özellikten dolayı kullanıcı sınıf, dekoratör sınıf ile dekoratör nesne bünyesinde bulunan diğer nesne arasında ayrım yapmaz. Nesneler arası ilişkiye aşagıda ye ralan Uml diagramında görüyoruz. Ev eşyaları üzerine uzmanlasmış bir firma, bir fabrikadan hammadde halinde ayna satın alıp, bunları çesitli ürünler haline getirdikten sonra sonra pazarlamaktadır. Programcı olarak bize verilen görev, mevcut Ayna sınıfını kullanarak bir üretim modeli oluşturmaktır. Ayna sınıfı üzerinde bir değişiklik yapılması istenmemektedir. Daha ziyade, değişik aynalı ürünleri modellemek için yeni sınıfların oluşturulması istenmektedir. Pazarlama firması ilk etapta değişik çerçevelere sahip aynaları piyasaya sürmeyi planladığından, hazırlıyacağımız program bu ihtiyaca cevap vermelidir. Pazarlama firmasının ihtiyaçlarını analiz ettikten sonra, Decorator tasarım şablonu ile istenilen modelin oluşturulabileceği kanaatına varıyoruz. Bir ayna nesnesini kullanarak,

çerçeveli bir ayna nesnesi oluşturabiliriz. Burada yapılması gereken tek işlem, mevcut bir ayna nesnesine çerçeve eklemektir yani bir ayna nesnesini değişik özellikler kullanarak (örneğin çerçeve sahibi olması) dekore etmektir. EvEsylari interface sınıfı ve Ayna sınıfı aşağıdaki yapıya sahiptirler ve bizim tarafımızdan değiştirilmeden program içinde kullanılmaktadırlar. / Bir ev esyasini temsil eden interface sinif. @author Oezcan Acar / public interface EvEsyalari / Üretimi gerceklestirmek için kullanilan metod. / public void produce(); / Ayna sınıfi. @author Oezcan Acar / public class Ayna implements EvEsyalari public void produce() System.out.println("Ayna imal edildi."); Çerveveli aynalar üretebilmek için, EvEsyalari interface sınıfını implemente eden AynaDecorator sınıfını aşağıdaki şekilde programlıyoruz: / Degisik tipte aynali ürünleri temsil eden üstsinif. @author Oezcan Acar / public abstract class AynaDecorator implements EvEsyalari

/ Bünyesinde mevcut bir ayna nesnesi bulundurur ve degisik metodlar kullanarak bu ayna nesnesini dekore eder. / private EvEsyalari ayna = new Ayna(); public EvEsyalari getayna() return ayna; public void setayna(evesyalari ayna) this.ayna = ayna; AynaDecorator sınıfı nesne agregasyon yöntemiyle bünyesinde bir Ayna nesnesi tutmaktadır. Dekorasyonu, yani aynaya bir çerçeve ekleme işlemini gerçeklestirmebilmek için Ayna nesnesi ile böyle bir bağ oluşturulması gerekmektedir. Ayna nın üretilme işlemi Ayna.produce() metoduna delege edildikten sonra, dekorasyon için gerekli metod, yanı aynaya çerçeve takma işlemi AynaDecorator ya da bir altsınıfı tarafından kullanılacaktır. AynaDecorator sınıfını soyut olarak tanımlıyoruz. Amacımız değişik türdeki aynaları üretebilmek için esnek bir model oluşturabilmektir. Bugün çerçeveli aynalar üretimi için kullanılan programımız, yarın yeni bir altsınıf oluşturularak başka türde bir aynanın üretimine izin verebilecek yapıda olmalıdır. Bu yüzden AynaDecorator isminde bir soyut sınıf tanımlıyarak, gelecekte üretimi yapılacak tüm aynalı ürünler için bir baz oluşturmuş oluyoruz. Çerçeveli aynaların üretimi için CerceveliAyna sınıfını oluşturuyoruz. / Cerceveli ayna üretimi yapmak için kullanilan sinif. @author Oezcan Acar / public class CerceveliAyna extends AynaDecorator / Üretim için kullanilan sinif. addborder metodu ile aynaya cerceve ekler. / public void produce() getayna().produce(); addborder(); /

Cerceve ekleme islemini gerceklestirmek için kullanilan metod. / public void addborder() System.out.println("Aynaya cerceve eklendi."); CerceveliAyna sınıfı, ayna üretim işlemini üst sınıfı AynaDecorator üzerinden gerçekleştiriyor. AynaDecorator sınıfında ayna isminde bir sınıf değişkeni olduğu için, CerceveliAyna sınıfi, getayna() metodu ile, üretilen aynaya ulaşabilir. Üretimi yapılmış bir aynaya çerçeve takmak için addborder() metodu tanımlanmıştır. CerveveliAyna.produce() metodu içinde önce ayna üretiliyor, daha sonra addborder() metodu ile bu aynaya bir çerçeve takılıyor yani ayna dekore edilmiş oluyor. Sonuç itibariyle aynanın ve aynalı ürünlerin üretimini birbirinden ayırmış olduk ve mevcut bir nesneye (Ayna), sahip olduğu sınıfın yapısını değiştirmeden yeni bir özellik (çerçeve) ekleyebildik. Aşağıda yer alan Test sınıfi ile, çerçeveli ayna üretimine başlıyabiliriz: / Test programi. @author Oezcan Acar / public class Test public static void main(string[] args) EvEsyalari ayna = new CerceveliAyna(); ayna.produce(); Ekran çıktısı aşagıdakı şekilde olacaktır: Ayna imal edildi. Aynaya cerceve eklendi. Decorator tasarım şablonu ile dekore edilmiş nesneler zincirleme tarzı diğer dekorasyon işlemleri içinde kullanılabilir. Örneğin çercevesi takılmış bir ayna, AynaliDolapDecorator sınıfi bünyesinde aynalı bir dolabın oluşturulmasında tekrar kullanilabilir. Bu durumda fabrikadan çıkan ayna önce çerçeve takılarak çerçeveli bir ayna nesnesi ve daha sonra aynalı bir dolabın üretilmesi için kullanılabilir. Ayna nesnesi iki sefer dekore edilerek aynalı bir dolabın üretimi gercekleşmiş olacaktır. Decorator tasarım şablonu ne zaman kullanılır?

Mevcut nesnelere, sınıf yapıları değiştirilmeden yeni özelliklerin eklemesi gerektiği durumlarda; Daha sonra kullanımdan kaldırmak üzere yeni metod ve fonksiyonların eklemesi gerektiği durumlarda; Sınıf yapısının ya da sınıf hiyerarşilerinin, yeni özelliklerin eklenmesine izin vermedikleri durumlarda Decorator tasarım şablonu kullanılmalıdır. Đlişkili tasarım şablonları: 1. Adapter: Decorator ve Adapter arasındaki tek fark, Decorator tasarım şablonunun nesnenin sunduğu fonksiyonları değiştirmesidir. Decorator, nesnenin dış dünyaya sunduğu metod yapılarını değiştirmez. Adapter tasarım şablonu ile nesnenin dış dünyaya sunduğu metod yapıları tamamen değiştirilir. 2. Strategy: Decorator ile bir nesnenin dış görüntüsü değiştirilir. Strategy tasarım şablonu nesnenin iç dünyasını değiştirir. Kullanılan strateji tipine göre nesne başka türlü bir davranış sergileyecektir. EOF (End Of Fun) Özcan Acar