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

Benzer belgeler
Business Delegate Tasarım Şablonu KurumsalJava.com

Decorator Tasarım Şablonu

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

Intercepting Filter Tasarım Şablonu KurumsalJava.com

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

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Adapter Tasarım Şablonu

.com. Özcan Acar 2009 Kurumsal Java.com

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

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

BİL-141 Bilgisayar Programlama I (Java)

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

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

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.

Builder Tasarım Şablonu KurumsalJava.com

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

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

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

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

Üst Düzey Programlama

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

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;

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

Özcan Acar 2010 Kurumsal Java Akademisi.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. Özcan Acar 2009 Kurumsal Java.com

Java Interface ve Abstract Sınıflar

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

Front Controller Tasarım Şablonu KurumsalJava.com

BIL101 07/11/2012 Lab5 Programlama Sorulari

İç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.

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

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

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

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

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

19 Şubat 2016 Cuma

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

Nesne Yönelimli Programlama

Sunum İçeriği. Programlamaya Giriş

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

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

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

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

.com. Kurumsal Java. Özcan Acar com

7. HAFTA. Erişim Belirleyiciler

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

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

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

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

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

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.

Erişim konusunda iki taraf vardır:

Spring Framework Eğitimi

BİL-142 Bilgisayar Programlama II

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

Üst Düzey Programlama

ECLIPSE PROGRAMININ ÇALIŞTIRILMASI

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

Örnek 1: Programı yazın ve çalıştırın.

NESNEYE YÖNELİK PROGRAMLAMA

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

BİL132 Bilgisayar Programlama II

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

public static int Toplam int x, int y

Lecture 11: Generics

Spring Framework Eğitimi

BİL-141 Bilgisayar Programlama I (Java)

Client Server Database

Nesneye Dayalı Programlama

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

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

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

Ders 8 Konu Özeti ve Problemler

Test Güdümlü Yazılımın Tasarım Üzerindeki Etkileri KurumsalJava.com

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Proje 1. Arayüz Tasarımı

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

ATATÜRK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BIM 205 GÖRSEL PROGRAMLAMA GÜZ DÖNEMİ ÖDEV-1

TASARIM KALIPLARI-DEVAM. Singleton Adapter

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

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

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

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

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

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

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

Süreç Yönetimi. Logo

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Nesne Yönelimli Programlama

Swing ve JDBC ile Database Erişimi

BM208- Nesneye Dayalı Analiz ve Tasarım. Sunum 7

«BM364» Veritabanı Uygulamaları

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Transkript:

Facade (Cephe) Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com

Profesyonel yazılım sistemleri birçok komponentin birleşiminden oluşur. Yazılım esnasında bir çok ekip birbirinden bağımsız, sistemin bütününü oluşturan değişik komponentler üzerinde çalışırlar. Bir komponent, belirli bir işlevi yerine getirmek için hazırlanmış bir ya da birden fazla Java sınıfından oluşmaktadır. Bir komponentin sunmuş olduğu hizmetten yararlanabilmek için, komponentin dış dünya için tanımlamış olduğu giriş/çıkış noktaları (input/output interface) kullanılır. Komponent sadece bu giriş/çıkış noktaları üzerinden dış dünya ile iletişim kurar ve iç dünyasını tamamen gizler. Bu komunikasyon noktaları genelde Facade tasarım şablonu kullanılarak programlanır. Uml diagramında görüldüğü gibi Komponent1 isminde bir sistem komponenti, dış dünya ile komunikasyonu KomponentFacade interface sınıfı üzerinden sağlıyor. Kullanıcı sınıfın (client) tanıması gereken sınıflar FacadeFactory ve KomponentFacade sınıflarıdır. FacadeFactory ile, kullanıcı sınıfın kullanabileceği şekilde bir KomponentFacade nesnesi oluşturulur. Komponentin sunduğu hizmetlere, KomponentFacade interface sınıfında tanımlanmış metodlar aracılığıyla ulaşılır. Komponenti kullanmak için tanımlanan giriş noktası KomponentFacade.doSomething() metodudur. KomponentFacade sınıfını bir interface olarak tanımlıyoruz. Bu sayede komponentin kullanıldığı yere göre sunduğu hizmet, kullanıcı sınıf (client) etkilenmeden değiştirilebilir hale gelir. Bu amaçla komponent içinde değişik KomponentFacade implementasyon sınıfları programlanır. Kullanıcı sınıfın gereksinimleri doğrultusunda FacadeFactory tarafından gerekli görülen interface implementasyon nesnesi oluşturulur ve kullanılmak üzere kullanıcı sınıfa verilir. Örneğimizde gördüğümüz gibi, interface sınıfları kullanarak, sistemin parçaları arasında çok esnek bağlar oluşturabiliyoruz. Esnek ve bakımı kolay sistemler oluşturmak için interface sınıfları tercih edilmelidir. Java dilinde Facade tasarım şablonunu nasıl implemente edebileceğimizi bir örnekle inceliyelim. Önce KomponentFacade interface sınıfını tanımlıyoruz: package org.javatasarim.pattern.facade.komponent1; / Komponentin sundugu hizmetlerin kullanilmasi için olusturulan

metodlarin bulundugu facade interface sınıfi. @author Oezcan Acar / public interface KomponentFacade / Implementasyon siniflari tarafindan implemente edilmesi gereken bir metod. / public void dosomething(); Komponentin sunduğu hizmetlerden yararlanabilmek için öncelikle bir KomponentFacade nesnesinin oluşturulması gerekiyor. Bu görevi FacadeFactory sınıfı üstleniyor: package org.javatasarim.pattern.facade.komponent1; / KomponentFacade olusturmak için kullanilan singleton factory sinifi. @author Oezcan Acar / public class FacadeFactory / Singleton tasarım şablonunu kullanmak için bu sınıftan bir degisken tanimliyoruz. / private static FacadeFactory instance = new FacadeFactory(); / Singleton olabilmesi için sınıf konstruktörünün private olmasi gerekiyor. Bu durumda baska bir sınıf new FacadeFactory() seklinde nesne olusturamaz. Amacimizda bunu engellemek ve bu sınıftan sadece bir nesnenin sistemde bulunmasini saglamak (singleton tasarım şablonuna bakiniz) / private FacadeFactory() / Sistemde bulunan tek FacadeFactory nesnesine ulasmak için instance() metodu kullanilir. @return FacadeFactory singleton nesne /

public static FacadeFactory instance() return instance; / Kullanici sinif tarafindan kullanilmak üzere olusturulan KomponentFacade implementasyonu. @return FacadeImpl facade implementasyon sınıfi / public KomponentFacade getfacade() return new FacadeImpl(); FacadeFactory sınıfını singleton olarak implemente ediyoruz. Böylece sistem içinde sadece bir tane FacadeFactory nesnesi olmuş oluyor. FacadeFactory sınıfının görevi, komponenti kullanan sınıf için bir KomponentFacade nesnesi oluşturmaktır. Bunu gerçekleştirebilmek için, komponent içinde KomponentFacade interface sınıfını implemente eden sınıfların bulunması gerekmektedir. FacadeImpl isminde bir implementasyon sınıfı aşağıdaki yapıya sahiptir: package org.javatasarim.pattern.facade.komponent1; / KomponentFacade interface sinifinin bir implementasyonu. @author Oezcan Acar / public class FacadeImpl implements KomponentFacade public void dosomething() new BirSinif().doSomething(); FacadeImpl sınıfı KomponentFacade interface sınıfında bulunan dosomething() metodunu implemente etmek zorundadır. FacadeImpl sınıfı implemente ettigi dosomething() metodu içinde BirSinif sınıfından bir nesne oluşturarak, bu nesnenin dosomething() metodunu kullanıyor. Bu sayade, komponenti kullanan sınıfın (Test sınıfi) KomponentFacade interface sınıfında bulunan dosomething() metodunu kullanmış olması, BirSinif.doSomething() metoduna kadar iletilmiş oluyor. Komponenti ve sunduğu hizmeti test etmek için aşağıda yer alan Test sınıfı kullanilabilir: package org.javatasarim.pattern.facade; import org.javatasarim.pattern.facade.komponent1.facadefactory; / Test programi.

@author Oezcan Acar / public class Test public static void main(string[] args) FacadeFactory.instance().getFacade().doSomething(); Test sınıfı, FacadeFactory.instance() metodunu kullanarak, önce bir FacadeFactory nesnesine sahip olur. FacadeFactory sınıfı singleton olduğu için, sınıf içinde oluşturulmuş ve bilgisayarın hafızasında bulunan FacadeFactory nesnesi Test sınıfına verilir. FacadeFactory.getFacade() metodu üzerinden, komponentin sahip olduğu bir KomponentFacade implementasyon nesnesi oluşturulur. getfacade() metodu içinde new FacadeImpl() ile KomponentFacade interface sınıfını implemente eden bir nesne oluşturulur. Akabinde FacadeImpl.doSomething() metodu kullanılarak, komponentin KomponentFacade.doSomething() metodunda tanımlanmış olan servis, Test sınıfı tarafından kullanılmış olur. Bu şekilde modellenmiş ve implemente edilmiş bir komponentin bir çok avantajı bulunmaktadır. Bunlar: Komponenti kullanan sınıf (Test sınıfi) komponentin sunduğu hizmeti KomponentFacade interface sınıfında tanımlanmış metodlar üzerinden sağlar. Kullanıcı sınıfın tanıması gereken sadece KomponentFacade ve FacadeFactory sınıflarıdır. Komponent, bünyesinde barındırdığı sınıfları, kullanıcı sınıf kodunun tekrar derlenmesine gerek kalmadan değiştirebilir. Komponent ile kullanıcı sınıf arasındaki tek bağ, KomponentFacade interface sınıfından tanımlanmış olan metodlardır ve bu metodlar değişmediği sürece, kullanıcı sınıf, komponent içinde yapılan değişikliklerden etkinlenmez. Komponent, bünyesinde barındırdığı ve sunduğu hizmeti implemente eden sınıfları dış dünyadan saklar. Örneğin komponent içinde yer alan BirSinif sınıfını kullanıcı sınıf (Test) kesinlikle tanımaz ve new BirSinif() şeklinde kullanamaz. Eğer Test sınıfı BirSinif sınıfını direk kullanabilseydi, bu Test sınıfı ve komponent arasında sıkı bir bağ oluşturur ve komponentin yapısı değiştirildiğinde, Test sınıfinıda negatif etkilerdi. Komponent çesitli KomponentFacade implemenstasyon sınıfları (örneğin FacadeImpl) sunarak, verdiği hizmetin değişik yöntemlerle ve kullanıcı sınıfın ihtiyaçları doğrultusundan oluşturulmasını sağlıyabilir. Bu gibi değişikliklerden kullanıcı sınıf etkilenmez. Facade tasarım şablonu, daha sonra detaylı olarak inceliyeceğimiz katmanlı mimarilerde, katmanlar arası izolasyonu gerçekleştirmek içinde kullanılır. Her katmanın belirlenmiş bir görevi vardır ve üst katmanlar kendi görevlerini yerine getirmek için bir alt katmanın sunduğu hizmetlerden faydalanırlar. İki katman arasındaki bağı esnek tutmak için, üst katman, alt katmanın sunduğu hizmete, alt katmanda tanımlanmış olan KatmanFacade interface sınıflarından erişir. Bir katman içinde meydana gelen değişiklikler, diger katmanları etkilemez ve böylece katmanlar arası izolasyon sağlanmış olur.

Facade tasarım şablonu ne zaman kullanılır? Kullanıcı sınıf ve sistemin parçalarını oluşturan alt sistemler (subsystem) ya da komponenter arasındaki bağ, Facade tasarım şablonu ile esnek bir yapıda oluşturulur. Alt sistemlerde oluşan değişikliklerden kullanıcı sınıflar etkilenmez. Komponent ve alt sistem tasarımlarında Facade tasarım şablonu kullanılmalıdır. Refactoring 1 yöntemiyle mevcut kod, alt sistem ya da komponent olarak yeniden düzenlenmelidir. Bu sayede görevi ve sunduğu hizmet tanımlanmış ve bakımı kolay komponentler oluşur. Bu komponentlerin yapılandırılmalarında Facade tasarım şablonu kullanılmalıdır. İlişkili tasarım şablonları: Facade yerine Abstract Factory kullanılarak sistem içinde kullanılan nesnelerin oluşumu ve kullanımı saklı tutulabilir. EOF (End Of Fun) Özcan Acar 1 Mevcut bir sınıf yada kodun, yeniden yapılandırılıp, bakımı ve kullanımı daha kolay bir hale getilrilmesi işlemine refactoring adı verilir. Yazılım sistemleri, genelde uygun tasarım şablonları kullanılarak yeniden yapılandırılır (refactor edilir).