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



Benzer belgeler
Builder Tasarım Şablonu KurumsalJava.com

Adapter Tasarım Şablonu

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

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

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

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

Business Delegate Tasarım Şablonu KurumsalJava.com

Decorator Tasarım Şablonu

Digifresh Kullanım Kılavuzu

Temel Bilgisayar Programlama

Spring Framework Eğitimi

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

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

11. TASARIM ŞABLONU KULLANARAK SUNU HAZIRLAMAK

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;

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

Cebir Notları. Bağıntı. 1. (9 x-3, 2) = (27, 3 y ) olduğuna göre x + y toplamı kaçtır? 2. (x 2 y 2, 2) = (8, x y) olduğuna göre x y çarpımı kaçtır?

Yukardaki örneğe dayanarak, aşağıdakiler tanımlar Object Oriented açısından doğrudur:

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

Şekil İki girişli kod çözücünün blok şeması. Tablo İki girişli kod çözücünün doğruluk tablosu. Şekil İki girişli kod çözücü devre

Intercepting Filter Tasarım Şablonu KurumsalJava.com

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

Almanca da Sıfatlar (Adjektive) ve Sıfat Tamlamaları - Genç Gelişim Kişisel Gelişim

YSÖP KULLANIM KILAVUZU

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

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

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

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.

SLCM - Modül (Ders) Yaratılması

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

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

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

İŞLEM BASAMAKLARI, KARŞILAŞILABİLECEK HATALAR ve ÇÖZÜM YOLLARI

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

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

ENF TEMEL BİLGİSAYAR BİLİMLERİ Eğitim/Öğretim Yılı Bahar Dönemi DÖNEM SONU LAB. ÖDEV TESLİM DUYURUSU

BİL-141 Bilgisayar Programlama I (Java)

Java String İşlemleri

Proje konularından istediğiniz bir konuyu seçip, hazırlamalısınız.

D İ Z İ L E R A R R A Y S

BÖL-1B. Fatih University- Faculty of Engineering- Electric and Electronic Dept.

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

VEZNE PROGRAMINDA POSTA ÜCRETİ İLE İLGİLİ YAPILAN DÜZENLEMELER (Vezne Sürüm: )

Bilgisayar Uygulamaları PSİ105

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

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

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

Q-BIZ VIEWER KULLANIM KILAVUZU

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

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

BLM5504 NESNEYE DAYALI KAVRAMLAR VE PROGRAMLAMA Şubat 2016 Yrd.Doç.Dr. Mehmet Sıddık AKTAŞ GENEL BİLGİLER

Yandaki resimlerde Excel Pazartesi den başlayarak günleri otomatik olarak doldurmuştur.

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

VEGAWINA VERSION

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

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

B02.8 Bölüm Değerlendirmeleri ve Özet

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

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

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

ö ö ö İ İ Ş Ş ö ö ö ö ö Ç ö Ö ö

R.G UBAN (ULUSAL BANKA HESAP NUMARASI) TEBLİĞİ

MESS ALTIN ELDİVEN İSG YARIŞMASI BAŞVURU VE DEĞERLENDİRME PROSEDÜRÜ

Derleyici Kuramı (Compiler Theory)

DOKÜMAN YÖNETİM SİSTEMİ KULLANIMI GELEN EVRAK

NOTERLERİN MÜNHAL NOTERLİKLERE ATAMA VE VAZGEÇME TALEPLERİNİN VATANDAŞ PORTALI ARACILIĞI İLE ALINMASINA İLİŞKİN AYRINTILI AÇIKLAMA

Kursların Genel Görünümü

TEHLİKELİ ATIK BEYAN FORMU

Autobiographie - Istanbul - Orhan Pamuk

EPKAS (ELEKTRONİK PROJE KONTROL ARŞİVLEME SİSTEMİ) WEB KULLANIM KILAVUZU

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

2. KUVVETLERİN VEKTÖREL TOPLANMASI. Hazırlayan Arş. Grv. A. E. IRMAK

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

ÜNİTE 5 KESİKLİ RASSAL DEĞİŞKENLER VE OLASILIK DAĞILIMLARI

SQL Server'ı Uzaktan Bağlantı İçin Ayarlamak

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

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

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

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

Sayın Bakanım, Sayın Rektörlerimiz ve Değerli Katılımcılar,

İÇİNDEKİLER. Bölüm 1 / Mantık Oyunları / Mantık Oyunlarına Genel Bakış...1. Bölüm 2 / Sözel Mantık Oyunları... 2

YATIRIM FONU ALIM SATIM İŞLEMLERİ KULLANICI KILAVUZU

MICROSOFT EXCEL SOLVER PROGRAMI. Y. Doç. Dr. Y. İlker Topcu

ŞEFKAT KOLEJİ İMFO SINIF MATEMATİK SORULARI

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

OFİS 365 ÖĞRENCİ MAİL SİSTEMİ KULLANIM KLAVUZU. Office 365

Kesirler. Yrd.Doç. Dr. Güney HACIÖMEROĞLU BAHAR 2011

Öncelikle Markamıza göstermiş olduğunuz ilgiden dolayı teşekkür ederiz.

Kümenin özellikleri. KÜMELER Burada x : ifadesi öyle x lerden oluşur ki diye okunur. Örnek: Kilis in ilçeleri

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

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

4.2. SAYISAL MANTIK SEVİYELERİ VE DALGA FORMLARI

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

in Kullanımı tamamlamış gerçekleştirmiş

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

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

Şekil 1.2:Programa giriş penceresi

AB Mevzuatının Uygulanmasına Yönelik Teknik Desteğin Müzakere Edilmesi

Transkript:

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

Java dilinde yazılan programlar içinde sınıflar ve bu sınıflardan oluşturulan nesneler kullanır. Bazen aynı sınıftan yüzlerce, belki binlerce nesne oluşturup, kullanıyor olabiliriz. Bu gibi durumlarda çok nesne oluşturulduğu için sistem performansı kötüye gidebilir. Flyweight tasarım şablonu kullanılarak, kullanılan nesne adedini aşağıya çekebiliriz. Bu satırlar oluşurken, büyük bir ihtimalle kullandığım editör flyweight tasarım şablonunu kullanıyor olabilir. Yazdığım her cümle kelimelerden, her kelime birden fazla harften oluşmaktadır. Kullandığım editörün Java dilinde yazıldığını ve her harf için bir nesne kullandığını farzedersek, bir satırlık doküman için 80 ila 100 arası harf nesnesi oluşturması gerekir. 100 satırlık bir doküman için bu 10.000 civarı harf nesnesinin oluşturulması anlamına gelir. Uml diagramında da görüldüğü gibi her harf bulunduğu satırı ve pozisyonu bilmektedir. Flyweight tasarım şablonu yardımı ile gerekli harf nesne adedini elliye düşürebiliriz. Her kelime ve satırda aynı harfler mutlaka birden fazla kullanılacaktır. Örneğin kullanılacaktır kelimesi içinde üç L harfı, üç A harfi, iki ı harfi vs. mecvuttur. L harfi için üç yeni L harfi nesnesi oluşturmak yerine, L harfini bir kere oluşturup, üç yerde kullanabiliriz. Böylece onlarca L harfi kullanmaktansa, L harfini bir kere oluşturup, L harfinin gerektiği her yerde kullanabiliriz. Aynı işlemi alfabedeki diğer harf, rakam ve işaretler içinde yaptığımız zaman, sistem bünyesinde kullanılan harf nesnesi adedi elliyi geçmeyecektir. Her harf nesne olarak bir kere mevcut olacağından, harfin nerede kullanıldığı bilgisini başka bir mekanizma aracılığıyla sabitlememiz gerekiyor. İmplementasyonumuzu aşağıdaki şekilde değiştiriyoruz. package org.javatasarim.pattern.flyweight; Alfabenin bir harfini temsil eder. @author Oezcan Acar

public class Harf private String harf; public Harf(String h) this.harf = h; public String getharf() return harf; public void setharf(string harf) this.harf = harf; Tüm sistem bünyesinde, her harf sadece bir nesne olarak kullanılacağı için bu nesnelerin sahip olduğu satır ve o satırdaki pozisyon değişkenlerini yok etmemiz gerekiyor. Aynı harf birden fazla yerde kullanıldığı için satır ve pozisyon değişkenleri anlamlarını yitiriyorlar. Bir harfin nerede kullanıldığını bilmek için HarfManager isminde yeni bir sınıf programlıyoruz. HarfManager bünyesinde harfarrray2d isminde iki boyutlu bir Harf array tanımlıyoruz. Bu oluşan dokümanın satırlarını ihtiva eden bir yapı olacaktır. Birinci boyut satırları, ikinci boyut her satırın belirli bir pozisyonunu adreslemek için kullanılır. Örneğin 5. satırın 16. pozisyonunda L harfini kullanmak istiyorsak harfarray2d[5][16] = Harf.getHarf("L"); şeklinde bir tanımlama yapabiliriz. package org.javatasarim.pattern.flyweight; import java.util.arraylist; Flyweight tasarım şablonunu kullanarak, kullanilan harf nesne adedi alfabedeki harf adedine indirilir. @author Oezcan Acar public class HarfManager Singleton degisken private static final HarfManager manager = new HarfManager();

Harf nesnelerinin yeraldigi liste private ArrayList<Harf> harflist = new ArrayList<Harf>(); Doküman satirlarinin ve satirlarda kullanilan harf pozisyonlarinin tutuldugu iki boyutlu array. private Harf[][] document = new Harf[50][50]; Singleton oldugu için konstrüktörü private olarak deklare ediyoruz. private HarfManager() public static final HarfManager instance() return manager; Bir harf nesnesi olusturur. Mevcut harf nesneleri harflist degiskeninde tutulur. Bu listede yeralmayan harfler new ile olusturularak listeye dahil edilirler. @param h Harf @return Harf harf nesnesi public static Harf getharf(string h) Harf harf = null; for(int i=0; i < manager.harflist.size(); i++) Harf temp = manager.harflist.get(i); if(temp.getharf().equals(h)) harf = temp; break; // harf bulunamadi, listeye ekliyoruz. if(harf == null) harf = new Harf(h); manager.harflist.add(harf); return harf;

Dokümana bir satir ekler. @param satir Doküman satiri @param satirno Dokümandaki satir no public void addsatir(string satir, int satirno) Bir döngü içinde satirin tüm harflerini ziyaret ederek, dokümanin satirini harf nesneleri ile olusturuyoruz. for(int i=0; i < satir.length(); i++) String harf = satir.substring(i, i+1); document[satirno][i] = getharf(harf); Doküman ekranda görüntülenir. public static void getdokument() for(int x=0; x < 50; x++) for (int y=0; y < 50; y++) if(manager.document[x][y]!= null) System.out.print(( manager.document[x][y]).getharf()); else break; if(manager.document[x][0]!= null) System.out.println(""); public ArrayList<Harf> getharflist() return harflist; public void setharflist(arraylist<harf> harflist) this.harflist = harflist; public Harf[][] getdocument() return document; public void setdocument(harf[][] document) this.document = document;

HarfManager sınıfını bir singleton olarak tanımlıyoruz. Static olarak tanımlanmış olan getharf() metodu ile harf nesneleri oluşturulmaktadır. Harf nesneleri oluşturulduktan sonra harflist isimli listede tutulur. addsatir() metodu bünyesinde dokümana bir satır eklenir. satirno doküman içinde hangi satırın kullanılacağına işaret eder. package org.javatasarim.pattern.flyweight; Test programi @author Oezcan Acar public class Test public static void main(string[] args) Dokümanin ilk satiri String ilksatir ="Bu ilk satirdir"; Dokümanin ikinci satiri String ikincisatir ="Bu ikinci satirdir"; Dokümana ilk satiri ekliyoruz HarfManager.instance().addSatir(ilkSatir, 1); Dokümana ikinci satiri ekliyoruz. HarfManager.instance().addSatir(ikinciSatir, 2); HarfManager.getDokument(); Test programı ile ekran çıktısı şöyle olacaktır: Bu ilk satirdir Bu ikinci satirdir Olusturulan harf nesnesi adedi: 13 ilksatir ve ikincisatir String leri ile dokümanın birinci ve ikinci satırları tanımlanır. HarfManager sınıfının sahip olduğu addsatir() metodu ile bu satırlar HarfManager sınıfı bünyesinde tanımlanmış olan dokümana (document değişkeni) eklenir. HarfManager.getDokument() metodu ile iki boyutlu array (harfarray2d değişkeni) içinde

yer alan satırlar ekranda görüntülenir. İki satır için toplam 29 harf kullanıldı. harflist listesinde 13 harf bulunmaktadır. Örneğin i harfi 8 değişik yerde kullanılmıştır. Flyweight tasarım şablonu uygulandığı için 8 i harfi nesnesi oluşturmak yerine, sadece 1 kere oluşturarak, 8 değişik yerde kullanmış olduk. Flyweight tasarım şablonu ne zaman kullanılır? Aplikasyon için kullanılan nesne adedini signifikant bir şekilde düşürmek için Flyweight tasarım şablonu kullanılır. Nesne adedinin düşmesi ile performans iyileşir ve daha az hafıza alanı kullanılır. İlişkili tasarım şablonları: State ve Strategy tasarım şablonlarında kullanılan nesnelerin Flyweight olarak implemente edilmelerinde fayda vardır. EOF (End Of Fun) Özcan Acar