Adapter Tasarım Şablonu



Benzer belgeler
Builder Tasarım Şablonu KurumsalJava.com

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

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

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

Business Delegate Tasarım Şablonu KurumsalJava.com

Decorator Tasarım Şablonu

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

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

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

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

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

11. TASARIM ŞABLONU KULLANARAK SUNU HAZIRLAMAK

Intercepting Filter 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.*/

İKİ BOYUTLU GÖRSEL ARAÇLAR HARİTALAR

Nesneye Yönelik Programlama-JAVA, Ders sorumlusu Yrd.Doç.Dr.Hilmi KU ÇU

Spring Framework Eğitimi

CSD-OS İşletim Sistemi Projesi - Fonksiyon Açıklama Standardı

KATEGORİSEL VERİ ANALİZİ (χ 2 testi)

VEGAWINA VERSION

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;

BİL-141 Bilgisayar Programlama I (Java)

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

13 Kasım İlgili Modül/ler : Satın Alma ve Teklif Yönetimi. İlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL

Web Madenciliği (Web Mining)

BİRİNCİ BÖLÜM Amaç, Kapsam, Dayanak ve Tanımlar

1 Aralık E-Beyanname Modülünde Yapılan İşlemler

YÖNETMELİK. Hacettepe Üniversitesinden: HACETTEPE ÜNİVERSİTESİ KANSERDE İLERİ TEKNOLOJİLER UYGULAMA VE ARAŞTIRMA MERKEZİ YÖNETMELİĞİ BİRİNCİ BÖLÜM

I. HSBS KURUM AYARLARI

ÖĞRENME FAALĠYETĠ GELĠġMĠġ ÖZELLĠKLER

Evrak Ekle. Kurum İçi Giden Evrak Ekleme. Kırmızı renker; doldurulması zorunlu alanları ifade etmektedir. İleri Geri tarihli işlem yapılamamaktadır.

YSÖP KULLANIM KILAVUZU

Q-BIZ VIEWER KULLANIM KILAVUZU

uzman yaklaşımı Branş Analizi öğretim teknolojileri ve materyal tasarımı Dr. Levent VEZNEDAROĞLU

Digifresh Kullanım Kılavuzu

DOĞALGAZ SEKTÖRÜ LEAP MODELLEMESİ

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

Giresun Üniversitesi Akademik Değerlendirme Ve Kalite Geliştirme Uygulama Yönergesi

Yıllık İş İstatistikleri Sanayi ve Hizmet Soru Kağıdı Hazırlanışı

Şekil 1.2:Programa giriş penceresi

KÜLTÜR, TURİZM VE TANITIM DAİRESİ BAŞKANLIĞI İDARİ İŞLER ŞUBE MÜDÜRLÜĞÜ TEŞKİLAT YAPISI VE ÇALIŞMA ESASLARINA DAİR YÖNERGE

Genel bilgiler Windows gezgini Kes Kopyala Yapıştır komutları. 4 Bilinen Dosya Uzantıları

DERS 1. ki De i kenli Do rusal Denklem Sistemleri ve Matrisler

Merhaba! Fatih ALKAN Yasin UĞURLU Mehmet ÜZER. Biz buradayız çünkü sizi ve yazılımı seviyoruz. Bize ulaşabilirsiniz:

MikroÖdeme Servis Dökümanı

YILDIRIM BEYAZIT ÜNİVERSİTESİ İŞ SAĞLIĞI VE GÜVENLİĞİ KOORDİNATÖRLÜĞÜ YÖNERGESİ BİRİNCİ BÖLÜM

a) Birim sorumluları: Merkez çalışmalarının programlanmasından ve uygulanmasından sorumlu öğretim elemanlarını,

Biz Kimiz? Jenerasyon ile nasıl çalışabilirsiniz?

Veri Toplama Yöntemleri. Prof.Dr.Besti Üstün

Faaliyet Alanları. 22 Aralık Yıldız Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü

Emeklilik Taahhütlerinin Aktüeryal Değerlemesi BP Petrolleri A.Ş.

OYUN GELİŞTİRME AŞAMALARI-I. Oyununuzun senaryosunu kısaca tanıtınız/ amacınıda belirtiniz:

KOCAELİ İL MİLLİ EĞİTİM MÜDÜRLÜĞÜ EVRAK TAKİP SİSTEMİ

AIMCO AIMCO. Kullanım Kılavuzu. Mayıs 2016

Front Controller Tasarım Şablonu KurumsalJava.com

Görsel Tasarım İlkelerinin BÖTE Bölümü Öğrencileri Tarafından Değerlendirilmesi

Analiz aşaması sıralayıcı olurusa proje yapımında daha kolay ilerlemek mümkün olacaktır.

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

Tasarım Raporu. Grup İsmi. Yasemin ÇALIK, Fatih KAÇAK. Kısa Özet

TÜBİTAK ULUSLARARASI İŞBİRLİĞİ DAİRE BAŞKANLIĞI ÇALIŞMA USUL VE ESASLARI

Rusya'da Erken Çocukluk Bakımı ve Eğitimi (EÇBE)

BULUġ BĠLDĠRĠM FORMU/ GIDA

K12NET Eğitim Yönetim Sistemi

hendisliği kanı Bilgisayar MühendisliM Prof. Dr. Oya Kalıps

KATALOG TAKİP SİSTEMİ KULLANIMI

ATAÇ Bilgilendirme Politikası

SÜRE BİLİŞİM TEKNOLOJİLERİ ÜNİTE 1: : BİLGİ VE TEKNOLOJİ DERS SAATİ: 7

Tablo 5 Hukuk Temel Alanı

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

1.0. OTOMATİK KONTROL VANALARI UYGULAMALARI

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ


ANALOG LABORATUARI İÇİN BAZI GEREKLİ BİLGİLER

Bilgisayarla Tasarım I (GRT 207) Ders Detayları

Erişim konusunda iki taraf vardır:

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

Çılgın Yıldızlar. Soru:

BÖLÜM 11. YAPISAL SORGULAMA DİLİ (SQL) Amaçlar:

MARMARA ÜNĠVERSĠTESĠ YABANCI DĠL VE TÜRKÇE HAZIRLIK SINIFLARI EĞĠTĠM-ÖĞRETĠM ve SINAV YÖNERGESĠ Senato: 13 Ekim 2009 /

FEN BİLİMLERİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

BQTEK SMS Asistan. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

.com. Özcan Acar 2009 Kurumsal Java.com

YURTDIŞI VATANDAŞLAR DANIŞMA KURULUNUN ÇALIŞMA USUL VE ESASLARI HAKKINDA YÖNETMELİK

KDU (Kazanım Değerlendirme Uygulaması) nedir?

ARTVİN ÇORUH ÜNİVERSİTESİ ARAŞTIRMA GÖREVLİLERİ TEMSİLCİLİĞİ YÖNERGESİ

YÖNETMELİK. a) Çocuk: Daha erken yaşta ergin olsa bile 18 yaşını doldurmamış kişiyi,

En İyi Uygulamalar ve Kullanım Kılavuzu

SMART Board EĞİTİMLERİ(sürüm:10) 2. Aşama

Basit Bir Elektrik Süpürgesi

MESLEKİ GELİŞİM DERSİ 2. DÖNEM 1. YAZILI ÇALIŞMA SORULARI

.com. Özcan Acar 2009 Kurumsal Java.com

NUTRICIA ANNE BEBEK BESLENMESİ

Yürürlük Tarihi: 12/09/ Kodu: ED Rev. No/Tarihi: 00 1 / 33

Bölgeler kullanarak yer çekimini kaldırabilir, sisli ortamlar yaratabilirsiniz.

1.3. NİTEL ARAŞTIRMA YÖNTEMLERİ GİRİŞ NİTEL ARAŞTIRMALARDA GEÇERLİK VE GÜVENİRLİK SORUNLARI... 2

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

Çevrimiçi paylaşım 3.1. Baskı 1

BİLGİ TEKNOLOJİLERİ VE İLETİŞİM KURULU KARARI

Transkript:

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

Giriş Adapter tasarım şablonu yardımı ile, sistemde mevcut bulunan bir sınıfın sunduğu interface (sınıf metodları) başka bir sınıf tarafından kullanilabilir şekilde değiştirilir (adapte edilir). Bu adapter yardımı ile birbiriyle beraber çalışamıyacak durumda olan sınıflar, birlikte çalışabilir hale getirilir. Adapter tasarım şablonu kendi içinde sınıf ve nesne adapteri olarak ikiye ayrılır. Önce sınıf adapterini inceliyelim. Sınıf Adapter Tasarım Şablonu Kurumsal projelerde, sistemin parçaları değişik ekipler tarafından tasarlanır ve implemente edilir. Bu her zaman geçerli olmasada, çoğu zaman daha önceden hazırlanmış sistem komponentlerini kullanmak zorunda kalabiliriz. Aşağıda yer alan UML diagramında da görüldüğü gibi KullaniciSinif isminde bir program hazırlanmıştır ve bu program BirInterface sınıfı içinde yer alan motodları kullanmaktadır. Bu sınıfın sisteme entegrasyonunu sağlıyabilmek için ya BirInterface sınıfını implemente eden yeni bir sınıf oluşturmamız, ya da mevcut bir sınıfı kullanarak entegrasyonu saglamamız gerekiyor. Ufak bir araştırma yaptıktan sonra, KullaniciSinif ismindeki programın işlevini yerine getirebilmesi için, başka bir programcı ekip tarafından hazırlanmış olan AdapteEdilenSinif isminde bir sınıf olduğunu ögreniyoruz. Adapter tasarım şablonunu kullanarak, KullaniciSinif sınıfını AdapteEdilenSinif metodlarını kullanabilecek hale getirebiliriz. KullaniciSinif aşağıdakı yapıya sahiptir:

package org.javatasarim.pattern.adapter; import org.javatasarim.pattern.adapter.classadapter.adaptersinifi; / BirInterface sinifina bagimli olan KullaniciSinif. @author Oezcan Acar / public class KullaniciSinif public static void main(string[] args) / AdapterSinifi, BirInterface interface sinifini implemente ettigi için BirInterface olarak sistem içinde kullanilabilir. / BirInterface birinterface = new AdapterSinifi(); birinterface.birmetod(); KullaniciSinif ve BirInterface arasında sıkı bir bağ vardır. KullaniciSinif işlevini yerine getirebilmek için mutlaka bir BirInterface nesnesine ihtiyaç duymaktadır. package org.javatasarim.pattern.adapter; / BirInterface @author Oezcan Acar / public interface BirInterface public void birmetod(); BirInterface sınıfında, KullaniciSinif sınıfı tarafından ihtiyaç duyulan birmetod() metodu yer almaktadır. Daha öncede belirttiğim gibi, ya BirInterface sınıfını implemente eden bir altsınıf oluşturacağız, ya da adapter şablonu ile sistemdeki mevcut bir sınıfı adapte etmeye çalışacağız. Yeni bir sınıf oluşturmak yerine, adaptasyon metodunu seçiyoruz. Bunun için AdapterSinifi isminde, adaptasyonu sağlamak üzere yeni bir sınıf oluşturuyoruz: package org.javatasarim.pattern.adapter.classadapter; import org.javatasarim.pattern.adapter.birinterface; / Adaptasyonu gerceklestirmek için kullanilan sinif. BirInterface sinifini implemente ederek, KullaniciSinifi için

kullanilabilir bir sinif haline gelir. Extends komutu ile AdapteEdilenSinif sinifinda yeralan özellikleri miras olarak alir. @author Oezcan Acar / public class AdapterSinifi extends AdapteEdilenSinif implements BirInterface / BirInterface interface sinifinda tanimlanmis olan birmetod() metodu, AdapterSinifi tarafindan implemente edilir. / public void birmetod() / AdapterEdilenSinif içinde yeralan herhangibirmetod() metodunu miras olarak alir. KullaniciSinifi tarafindan birmetod() metodu kullanildiginda, bu metod herhangibirmetod() metoduna delege edilir ve islem AdapteEdilenSinif sinifina devredilmis (adapte) edilmis olur. / herhangibirmetod(); AdapterSinifi BirInterface interface sınıfını implemente ediyor. Bu andan itibaren KullaniciSinif sınıfı AdapterSinifi sınıfından oluşturulan bir nesneyi kullanabilir. Ancak bu yeterli degil! AdapteEdilenSinifi sınıfının KullaniciSinif tarafından dolaylı olarak kullanilabimesi için AdapterSinifi ile AdapteEdilenSinif arasinda extends komutu ile baglantı kurmamız gerekiyor. package org.javatasarim.pattern.adapter.classadapter; / Adapte edilip, sistem için kullanilan bir sinif. @author Oezcan Acar / public class AdapteEdilenSinif public void herhangibirmetod() System.out.println("Herhangi bir metod");

Sequence diagramında görüldüğü gibi AdapterSinifi.birMetod() kullanıldığı zaman, işlem otomatik olarak AdapteEdilenSinif.herhangiBirMetod() metoduna delege edilecektir ve bu şekilde adaptasyon gerçekleşmektedir. Nesne Adapter Tasarım Şablonu Bazı durumlarda sınıf adapter tasarım şablonu kullanılamayabilir. Bu gibi durumlarda nesne adapter tasarım şablonu alternatif oluşturur.

Adaptasyonu gerçekleştirmek için KullaniciSinifi sınıfının kullandıği KullanilanSinif AdapterSinifi ile genişletilir (extend). Bu durumda AdapterSinifi ile KullanilanSinif aynı tipten olduklarından, iki sınıfın nesneleride KullaniciSinif tarafından kullanilabilir. Đkinci adımda KullaniciSinif tarafından kullanılan, KullanilanSinif sınıfının metodu birmetod() AdapterSinifi bünyesinde tekrar implemente edilir. AdapteEdilenSinif ile AdapterSinifi arasındaki ilişkiyi oluşturmak için, AdapteEdilenSinifi sınıfından bir nesne sınıf degiskeni olarak AdapterSinif sınıfına eklenir (AdapteEdilenSinif değişkeni). Kullanılan sınıfların kodları aşağıda yer almaktadır. package org.javatasarim.pattern.adapter.objectadapter; / KullaniciSinif @author Oezcan Acar / public class KullaniciSinif public static void main(string[] args) KullanilanSinif kullanilansinif = (KullanilanSinif)new AdapterSinifi(); kullanilansinif.birmetod(); KullaniciSinif.main() metodunda görüldüğü gibi, new operatörü ile KullanilanSinif sınıfından bir nesne oluşturmak yerine, AdapterSinifi sınıfından bir nesne oluşturuyoruz. Nesneyi cast 1 yaparak, bir KullanilanSinif nesnesine dönüştürüyoruz, çünkü KullaniciSinif sadece KullanilanSinif nesnelerini kullanabilir. Cast işleminden sonra bu nesne üzerinde birmetod() metodunu kullanabiliriz. package org.javatasarim.pattern.adapter.objectadapter; / KullanilanSinif @author Oezcan Acar / public class KullanilanSinif public void birmetod() System.out.println("bir metod"); 1 Bir altsınıfdan oluşturulan nesneyi, üstsınıf nesnesine dönüştürmek icin cast işlemi yapılır. Her altsınıf nesnesinde, üstsınıfın da nesnesi bulunduğu için, altsınıf nesnesini üstsınıf nesnesine dönüştürebiliriz. Cast işlemi yapıldıktan sonra sadece üstsınıf değişken ve metodlarına ulaşılabililr. Bu işleme upcast adı verilir. Downcast olarak bilinen işlem Java da mümkün değildir. Bir üstsınıftan oluşturulan nesne, bir altsınıf nesnesine dönüştürülemez.

package org.javatasarim.pattern.adapter.objectadapter; / Adaptasyonu gerceklestirmek için kullanilan sinif. KullanilanSinif sinifini genisleterek, birmetod() metodunu yeniden implemente eder. @author Oezcan Acar / public class AdapterSinifi extends KullanilanSinif / Adaptasyonu gerceklestirmek için AdapteEdilen sınıfindan bir nesne olusturulur. / private AdapteEdilenSinif AdapteEdilenSinif = new AdapteEdilenSinif(); / Bu metoda gelen cagrilar, sinif degiskeni olan AdapteEdilenSinif degiskenine gönderilir. / public void birmetod() getadapteedilensinif().herhangibirmetod(); public AdapteEdilenSinif getadapteedilensinif() return AdapteEdilenSinif; public void setadapteedilensinif(adapteedilensinif AdapteEdilenSinif) this.adapteedilensinif = AdapteEdilenSinif; package org.javatasarim.pattern.adapter.objectadapter; / Adapte edilip, sistem için kullanilan bir sinif. @author Oezcan Acar / public class AdapteEdilenSinif public void herhangibirmetod() System.out.println("Herhangi bir metod");

AdapterSinifi sınıfında tanımladığımız AdapteEdilenSinif değişkeni, AdapteEdilenSinif sınıfına bir nevi köprü oluşturmaktadır. birmetod() kendisine gelen çağrıları bu nesne üzerinden AdapteEdilenSinif sınıfına iletir ve bu şekilde KullaniciSinif ile AdapteEdilenSinif arasındaki adaptasyon gerçekleşmis olur. Adapter tasarım şablonu ne zaman kullanılır? Sistemde mevcut sınıflar kullanmak istenildiginde, lakin sınıfın sunmuş olduğu arayüz (metod ve değiskenler) istenilen cinsten degilse ; Tekrar kullanılabilir ve sistemin diğer bölümlerinden bağımsız bir sınıf ya da komponent oluşturulmak istendiginde. Đlişkili tasarım şablonları: Bridge tasarım şablonu yapı itibariyle Nesne Adaptar tasarım şablonuna benzer, ama iki tasarım şablonunun kullanım amaçları değişiktir. Bridge tasarım şablonu ile soyut sınıflar ve implementasyonlar birbirinden ayrılır. Adapter tasarım şablonu bir sınıfın sunmuş olduğu arayüz (metodlar) değiştirilir. Proxy tasarım şablonu ile başka bir nesne için temsilci oluşturulur. Proxy temsil ettiği nesnenin arayüzünü değiştirmez. EOF ( End Of Fun) Özcan Acar Bilgisayar Mühendisi KurumsalJava.com KurumsalJavaAkademisi.com