Builder Tasarım Şablonu KurumsalJava.com



Benzer belgeler
Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Adapter Tasarım Şablonu

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

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

Decorator Tasarım Şablonu

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

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

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

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

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

Business Delegate Tasarım Şablonu KurumsalJava.com

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

İl İlçe uygulaması. : Seçilen ile ait ilçeleri listeleyen program. //İl değişkeni için kodu aşağıdaki sayfadan kopyalayınız.

KATALOG TAKİP SİSTEMİ KULLANIMI

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

K12NET Eğitim Yönetim Sistemi

DÖNER SERMAYE MALİ YÖNETİM SİSTEMİ

Bilişim Sistemleri. Modelleme, Analiz ve Tasarım. Yrd. Doç. Dr. Alper GÖKSU

Intercepting Filter Tasarım Şablonu KurumsalJava.com

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

BIM BUILDING INFORMATION MODELING YAPI BİLGİ MODELİ

int printf (const char *format [, argument,...]);

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

BİL-141 Bilgisayar Programlama I (Java)

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

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

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;

Web Madenciliği (Web Mining)

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

Spring Framework Eğitimi

SQL'e Giriş 2. CREATE TABLE tabloadı (kolon isimleri ve veri türleri) (BOLUM_NO NUMBER, BOLUM_ADI CHAR(10));

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


SÜREÇ YÖNETİMİ VE SÜREÇ İYİLEŞTİRME H.Ömer Gülseren > ogulseren@gmail.com

Sensörler Veri İletişimi. Yrd.Doç.Dr. İlker ÜNAL

11. TASARIM ŞABLONU KULLANARAK SUNU HAZIRLAMAK

ÖĞRENME FAALĠYETĠ 6 ÖĞRENME FAALĠYETĠ NESNE ĠġLEMLERĠ

Tel: Fax: ey.com Ticaret Sicil No : Mersis No:

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

DOĞALGAZ SEKTÖRÜ LEAP MODELLEMESİ

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

Nebim Winner Ayarları

HÂKİMLER VE SAVCILAR YÜKSEK KURULU HUKUKİ MÜZAKERE TOPLANTILARI PROJE FİŞİ

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

Temel JavaFX Bileşenleri (1) Labeled, Label, Button, ToggleButton, RadioButton, ToggleGroup, CheckBox, ComboBox, Slider, ListView ve SelectionModel

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

Polimorfizm. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 1

BİLGİSAYAR PROGRAMLARI YARDIMIYLA ŞEV DURAYLILIK ANALİZLERİ * Software Aided Slope Stability Analysis*

TOLERANSLAR VE YÜZEY İŞLEME İŞARETLERİ

Sirküler no: 043 İstanbul, 15 Nisan 2009

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

İçerik. Raporları. 2 Sık Kullanılanlar. 4 Özet Raporlar. 7 Hız Raporları. Genel Rapor. Son Durum Bilgileri. Çalışma Raporu. Duraklama Süreleri

GO Plus Sistem Yönetmeni

1. Mesaj Tipi ve Mesaj Fonksiyonu Bazında Bildirim Mail Adresi Tanımlama Đşlemleri

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

Expert modülleri üretiminizi optimize eder. Expert Systemtechnik GmbH. Türkçe. Dö emeli mobilyalar

Ders 8: Metotlar. barisgokce.com

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİLGİSAYAR SİSTEMLERİ LABORATUARI YÜZEY DOLDURMA TEKNİKLERİ

Veritabanı Tasarımlarında Karşılaşılan Güçlükler ve Çözüm Önerileri

: Bilindiği üzere e-defter uygulaması Aralık 2014 de başlamıştır. Konu hakkında

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

YENİ EKLENEN FİBER PAKETLER VE ADRESTEN FİBER SORGULAMA EKRANLARI

1. RESİM DÜZENLEME. Bir resmin piksel yoğunluğu yani PPI (Pixel Per Inches) 1 inç karede (1 inç = 2.54 cm) bulunan piksel sayısıdır.

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

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.

Hazine Müsteşarlığıdan (Sigortacılık Genel Müdürlüğü): 29/05/2014

1. Defter detaylarına ait bilgilerin, örneğin yevmiye kayıtlarının olduğu dosya 2. Bir nevi kapak sayfası diyebileceğimiz Berat dosyası

ÇANKAYA BELEDİYESİ EVDE BAKIM HİZMETLERİ YÖNERGESİ

SÜRE BĠLĠġĠM TEKNOLOJĠLERĠ ÜNĠTE 1: ĠLETĠġĠM DERS SAATĠ: 1. Gelecekteki bilişim teknoloji

B E Y K E N T Ü N İ V E R S İ T E S İ S O S Y A L B İ L İ M L E R E N S T İ T Ü S Ü İ Ş L E T M E Y Ö N E T İ M İ D O K T O R A P R O G R A M I

TMMOB EH R PLANCILARI ODASI TRABZON UBES III. DÖNEM ( ) ÇALI MA PROGRAMI

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

YATIRIM FONU ALIM SATIM İŞLEMLERİ KULLANICI KILAVUZU

Şekil 1. Sistem Açılış Sayfası

MAKÜ YAZ OKULU YARDIM DOKÜMANI 1. Yaz Okulu Ön Hazırlık İşlemleri (Yaz Dönemi Oidb tarafından aktifleştirildikten sonra) Son aktif ders kodlarının

DİKKAT! SORU KİTAPÇIĞINIZIN TÜRÜNÜ "A" OLARAK CEVAP KÂĞIDINA İŞARETLEMEYİ UNUTMAYINIZ. SAYISAL BÖLÜM SAYISAL-2 TESTİ

public static int Toplam int x, int y

DENEY 2: PROTOBOARD TANITIMI VE DEVRE KURMA

TÜRKİYE BİLİMSEL VE TEKNOLOJİK ARAŞTIRMA KURUMU BİLİM İNSANI DESTEKLEME DAİRE BAŞKANLIĞI ÇALIŞMA USUL VE ESASLARI BİRİNCİ BÖLÜM

VEGAWINA VERSION

M i m e d ö ğ r e n c i p r o j e l e r i y a r ı ş m a s ı soru ve cevapları

VERİTABANI YÖNETİMİ. Veri Tabanı Tasarımı 2.HAFTA. Veritabanı Yönetimi Prof. Dr. İbrahim Çil

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

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1

SAYIN MÜŞTERİMİZ. C:\ebyn\Beyannameler\Bilset\ \K XML (buradaki => Firmanın Vergi Numarasıdır.)

T.C. SOSYAL GÜVENLİK KURUMU BAŞKANLIĞI STRATEJİ GELİŞTİRME BAŞKANLIĞI

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

NORMAL TUĞLA VE PRES TUĞLA İLE DUVAR

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

IŞIK ĐZLEYEN ROBOT PROJESĐ LIGHT FOLLOWĐNG ROBOT PROJECT. Hasan ALTAŞ, Sinop Ünv. Meslek Yüksekokulu Mekatronik Bölümü, SĐNOP

Digifresh Kullanım Kılavuzu


MOBIL UYGULAMA GELIŞTIRME

PROGRAMLAMA TEMELLER. C Program Yap s

OKUL BAZLI BÜTÇELEME KILAVUZU

Q-BIZ VIEWER KULLANIM KILAVUZU

Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek :

Ders 2: Aktüerya. Ankara Üniversitesi. İST424 Aktüeryal Risk Analizi Ders Notları. Doç.Dr. Fatih Tank. Sigortacılığın.

Transkript:

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

Daha önceki bölümlerde Abstract Factory tasarım şablonu ile değişik nesne ailelerinden nasıl nesneler üretildiğini incelemiştik. Builder tasarım şablonu da Abstract Factory tasarım şablonunda oldugu gibi istenilen bir tipte nesne oluşturmak için kullanılır. İki tasarım şablonu arasındaki fark, Builder tasarım şablonunun kompleks yapıdaki bir nesneyi değişik parçaları bir araya getirerek oluşturmasında yatmaktadır. Birden fazla adım içeren nesne üretim sürecinde, değişik parçalar birleştirilir ve istenilen tipte nesne oluşturulur. Diğer bölümlerde olduğu gibi bir örnek üzerinde bu tasarım şablonunu yakından inceliyelim. Araba sınıfından oluşturulacak bir nesne, bünyesinde Marka ve Model sınıflarından birer nesne ihtiva edecektir, yani bir araba nesnesi bereberinde bir marka ve bir model nesnesi getirir. Bu örnekte Builder tasarım şablonunu kullanma amacımız, Araba, Marka ve Model sınıflarından oluşan bir nesnenin değişik parametreler kullanarak konfigüre edilmesidir. Sipariş edilen her arabanın markası, modeli, rengi ve beygirgücü değişik olabileceğinden, sipariş için kullanılan Araba nesnesinin bu parametrelere dayalı olarak oluşturulması gerekmektedir. Builder tasarım şablonu bu işlemi, sistemin diğer bölümlerinden bağımsız bir şekilde gerçekleştirmek için kullanılır. Araba sınıfı aşağıdakı yapıya sahiptir. Her sipariş verilen arabanın markası, modeli, rengi ve hangi beygir gücüne sahip olduğu bu sınıftan oluşturulan nesne içinde tutulur. / Araba sinifi @author Oezcan Acar / public class Araba / Markayi temsil etmek icin Marka sinifi kullaniliyor. / private Marka marka = null;

/ Model temsil etmek icin Model sinifi kullaniliyor. / private Model model = null; private String renk = null; private int beygirgucu = 0; public Araba() public Model getmodel() return model; public void setmodel(model model) this.model = model; public String getrenk() return renk; public void setrenk(string renk) this.renk = renk; public int getbeygirgucu() return beygirgucu; public void setbeygirgucu(int beygirgucu) this.beygirgucu = beygirgucu; public Marka getmarka() return marka; public void setmarka(marka marka) this.marka = marka; /

Arabanin markasi. @author Oezcan Acar / public class Marka private String marka; public Marka(String marka) setmarka(marka); public String getmarka() return marka; public void setmarka(string marka) this.marka = marka; public String tostring() return marka; / Arabanin modeli. @author Oezcan Acar / public class Model private String model; public Model(String model) setmodel(model); public String getmodel() return model; public void setmodel(string model) this.model = model; public String tostring() return model;

Değişik marka ve modellerde arabaların sipariş edilebilmesi için soyut olan SiparisBuilder sınıfını tanımlıyoruz. / Siparis sürecinde konfigürasyon icin kullanilacak metodlar bu sinif icinde tanimlanir. Belirli bir marka arabanin siparis icin altsiniflarin olusturulmsi gerekmektedir. @author Oezcan Acar / public abstract class SiparisBuilder private Araba araba = null; public SiparisBuilder() public Araba getaraba() if(araba == null) araba = new Araba(); return araba; public abstract void setmarka(string marka); public abstract void setmodel(string model); public abstract void setrenk(string renk); public abstract void setbeygirgucu(int bg); Ford ve Audi marka arabaların siparişinde kullanılmak üzere SiparisBuilder sınıfının alt sınıflarını tanımlıyoruz. / Audi marka bir arabanin konfigürasyon ve siparisinde kullanilir. @author Oezcan Acar / public class AudiSiparisBuilder extends SiparisBuilder public AudiSiparisBuilder() public void setbeygirgucu(int bg) getaraba().setbeygirgucu(bg);

public void setmarka(string marka) getaraba().setmarka(new Marka(marka)); public void setmodel(string model) getaraba().setmodel(new Model(model)); public void setrenk(string renk) getaraba().setrenk(renk); / Ford marka bir arabanin konfigürasyon ve siparisinde kullanilir. @author Oezcan Acar / public class FordSiparisBuilder extends SiparisBuilder public FordSiparisBuilder() public void setbeygirgucu(int bg) getaraba().setbeygirgucu(bg); public void setmarka(string marka) getaraba().setmarka(new Marka(marka)); public void setmodel(string model) getaraba().setmodel(new Model(model)); public void setrenk(string renk) getaraba().setrenk(renk); Geriye sipariş işlemini gerçekleştirmek için kullanılan SiparisManager sınıfı kalıyor:

/ Siparis islemini gerceklestirmek icin SiparisManager sinifi kullanilir. @author Oezcan Acar / public class SiparisManager private SiparisBuilder builder; / Müsterinin istedigi marka, model, renk ve beygirgücüne sahip bir arabanin siparisi icin kullanilan metod. @param marka Siparis edilen arabanin markasi @param model Siparis edilen arabanin modeli @param renk Siparis edilen arabanin rengi @param beygirgucu Siparis edilen arabanin beygir gücü @return Araba Konfigüre edilmis araba nesnesi / public Araba createorder(string marka, String model, String renk, int beygirgucu) if(marka.equals("ford")) builder = new FordSiparisBuilder(); else if(marka.equals("audi")) builder = new AudiSiparisBuilder(); this.builder.setmarka(marka); this.builder.setmodel(model); this.builder.setrenk(renk); this.builder.setbeygirgucu(beygirgucu); return this.builder.getaraba(); / Siparis edilen arabanin özelliklerini ekranda görüntüler. / public void printorder() System.out.println("Marka: " + this.builder.getaraba().getmarka()); System.out.println("Model: " + this.builder.getaraba().getmodel()); System.out.println("Renk: " + this.builder.getaraba().getrenk()); System.out.println("Beygirgücü: " + this.builder.getaraba().getbeygirgucu());

createorder() metodu ile istenilen tipte bir arabanın siparişi gerçekleştiriliyor. Bu metod parametre olarak arabanın marka, model, rengi ve beygir gücünü alıyor. Hangi marka arabanın sipariş edildiğini marka isimli değişkene bakarak bulabiliyoruz. Eğer marka Ford ise FordSiparisBuilder, Audi ise AudiSiparisBuilder sınıflarından bir nesne oluşturuluyor. Akabinde setmarka(), setmodel(), setrenk() ve setbeygirgucu() metodları kullanılarak, Araba sınıfından oluşturulan nesnenin konfigürasyonu gerçeklestiriliyor. Sequence diagramında da görüldügü gibi, Araba nesnesini oluşturmak için dört adım atılması gerekiyor, bunlar SiparisBuilder sınıfının soyut olarak tanımlanmış olan set metodlarıdır. Daha öncede belirttiğim gibi kompleks yapıya sahip olan Araba nesnesini değişik parçaları (Marka, Model, renk, beygirgücü) bir araya getirerek oluşturduk. Nesnenin nasıl oluşturulup, parçalarının biraraya getirileceğini SiparisManager sınıfının createorder() metodunda tanımlıyoruz. Builder tasarım şablonunu kullanabilmek için, createorder() metodunda olduğu gibi, kompleks nesnenin oluşumunda kullanılan metodların tanımlanması ve belirli bir sıraya göre kullanılmasi gerekmektedir. Builder tasarım şablonu ne zaman kullanılır? Değişik parametreler kullanılarak aynı tip kompleks yapıda bir nesnenin olusturulmasında; Kompleks yapıya sahip nesnenin oluşturulma sürecinin, sistemin diğer bölümlerinden bağımsız bir şekilde yapılması gerektiği durumlarda. İlişkili tasarım sablonları: Composite Tasarım şablonunda oluşturulan composite nesne, Builder tasarım şablonunda oluşturulan kompleks nesne gibidir.

Abstract Factory kullanılarak kompleks nesneler oluşturulabilir. EOF (End Of Fun) Özcan Acar