Nano'nun Günlüğü…

Ideallerimi gerceklestirmek icin arastiriyorum, Unutmamak icin yaziyorum!

  • Bulundugunuz Sayfa: 
  • Ana Sayfa
  • .Net ile Prototype Design Pattern

.Net ile Prototype Design Pattern

Gönderim Mayıs 9th, 2012

Bu yazimda sizlere yazilim tasarim desenlerinden birisi olan Prototype Design Pattern’dan bahsediyor olacagim. Fakat bu konuya baslamadan once, bahsetmek istedigim; bilindigi uzere bir cok design pattern bulunmaktadir. Kendilerine gore yazilimda bir cok probleme cozum olabilmesi icin olusturulmus tasarim kaliplaridir. Object Oriented programlama mantigina uygun olarak olusturulan bu tasarim kaliplari cok sik bir sekilde karsilasilan problemlere cozum olabilmesi icin en basarili yontem oldugu icin yazilim muhendisliginde onemli bir  rol almaktadir. Object Oriented programlama mantigi uzerinden dusunmeye devam edersek eger calistigimiz class’larin diger class’lar ile aralarinda ki bagin en aza indirilmesi gerektiginde veya programa yeni bir kod eklenmesi gerektiginde kullanilan kodlarin rahat bir sekilde anlasilmasi ve esnek bir sekilde algilaniyor olmasi gerekir. Iste bu ve bunun gibi durumlarda kullanacagimiz tasarim kaliplari ile yazilimimizin kalitesini arttirabiliriz.

Prototype Design Pattern

Yeni bir nesne olusturmak yerine daha onceden olusturmus oldugumuz nesneyi klonlayarak yeni bir nesne ornegi elde ederek kullanmamiz icin var olmus bir tasarim desenidir. Ozellikle de new operatoru ile olusturabilecegimiz her bir yeni gelen nesnenin olusum sayisini en aza indirmek amaciyla kullaniyoruz. Bir nevi her bir olusabilecek nesnenin yaratilis maliyetini azaltmis oluyoruz. Ayni zamanda sistemde var olan buyuk ve olusturulmasi zaman alabilecek nesnelerin varligi ile yine bu nesnelerin sinif icerisinde ki hiyerarsilerini kuculterek, kullanilabilecek sinif adedini de azaltabiliyoruz. Yani new operatoru ile surekli bir sekilde nesne yaratmayim klonlanmis halinden nesneleri set ediyoruz.

Bu tasarim desenin diger faydalarindan bahsedecek olursam eger ;

Uygulamalarinizin runtime esnasinda nesnenin kopyasi uzerinden devam etme imkaniniz olacaktir. Bu sekilde orjinal nesne kalibiniz saklaniyor olacak. Olusturdugunuz nesnelerin bircogunun ortak oldugu durumlarda, yeni  nesneniz oncekilerden kolonlanacaktir ve ek ozelliklerde guncel bir sekilde varligini surdurecektir.

 

 

 

 

 

 

 

 

 

 

Bu tasarim deseninde yukarida gordugunuz bilinen uml semasi ile konuyu anlatmaya devam edecegimden dolayi uml diagraminda ki siniflardan vede metodlardan bahsedecek olursam ; 3 yapi kullanilmistir.

Prototype ; Bir interface veya abstract class olacak sekilde kullanilir. Icerisinde nesnelerimizde kolonlayabilecegimiz metodlar barindirilacaktir.

ConcretePrototype ; Prototype nesnemizi implement edebilecegimiz bir class olacaktir. Haliye kolonladigimiz metoda da sahip olmak zorundadir bu yuzden Prototype class’in da ki kullandigimiz metodu ezmesi gerekecektir.

Client ; ConcretePrototype’ da olusturdugumuz nesnelerin kopyalari kullanmak icin talepte bulanacak olan istemci nesnemizdir.

Ek bir bilgi olarak bahsetmem gereken bir diger onemli nokta ise ; .Net’le birlikte gelen bir ozellik olan MemberwiseClone() metodunun kullanilmasinin vazgecilmezligidir. .Net icerisinde ki IClonable interface’i icerisinde bulunan MemberwiseClone() metodu, nesnelerimizin bire bir kopyasini olusturmamizda yardimci oluyor. Kendisi bellekte deep copy olayi ile yeni bir nesne olusturmaktadir.

Simdi dilerseniz ufak bir uygulama ile paylasmis oldugum bu bilgileri biraz daha detayli bir sekilde inceleyelim…

Oncelikle sizlere olusturacagim uygulamanin Uml diagrami olan Class diagramini paylasmak istiyorum ;

 

 

 

 

 

 

 

 

 

 

Bu class’larin icerigini asagida ki diagram’da daha detayli bir sekilde gorebilirsiniz ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Abstract Urunler class’nin kod yapisi ;

 

 

 

 

 

 

 

 

 

 

 

 

 

Kitaplar Class’inin kod yapisi ;

 

 

 

 

 

 

 

 

 

 

Dvdler Class’inin kod yapisi ;

 

 

 

 

 

 

 

 

 

 

 

Program.Cs Kaynak Kodu ;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Design_Pattern_MyPrototype
{
abstract class Urunler
{
private string _UrunId;
private string _Tanim;
public Urunler(string UrunId,string Tanim)
{
this._UrunId = UrunId;
this._Tanim = Tanim;
}
public string UrunId
{
get { return _UrunId; }
}
public string Tanim
{
get { return _Tanim; }
}
public abstract Urunler Kolonlama();
}

class Kitaplar : Urunler
{
public Kitaplar(string id, string tanim) : base(id,tanim)
{
}
public string _SayfaNo;
public string SayfaNo
{
get { return _SayfaNo; }
}
public override Urunler Kolonlama()
{
return (Urunler)this.MemberwiseClone();
}
}

class Dvdler : Urunler
{
public Dvdler(string id,string tanim): base(id,tanim)
{
}
public string _Sure;
public string Sure
{
get { return _Sure; }
}
public override Urunler Kolonlama()
{
return (Urunler)this.MemberwiseClone();
}
}

class Program
{
static void Main(string[] args)
{
Kitaplar kitap1 = new Kitaplar(“ktp492”, “C Sharp Egitim Seti”);
kitap1._SayfaNo = “20 bin sayfa”;
Kitaplar kitap1_clone = (Kitaplar)kitap1.Kolonlama();
Console.WriteLine(“KITAPLAR Kolonlama()”);
Console.WriteLine(“Id’si ; {0} “, kitap1_clone.UrunId);
Console.WriteLine(“Tanimi ; {0} “, kitap1_clone.Tanim);
Console.WriteLine(“Sayfa No ; {0} “, kitap1_clone._SayfaNo);

Console.WriteLine(“”);

Dvdler dvd1 = new Dvdler(“dvd812”, “.Net Gorsel Egitim”);
dvd1._Sure = “2 saat 89 dakika”;
Dvdler dvd1_clone = (Dvdler)dvd1.Kolonlama();
Console.WriteLine(“DVDLER Kolonlama()”);
Console.WriteLine(“Id’si ; {0} “, dvd1_clone.UrunId);
Console.WriteLine(“Tanim ; {0} “, dvd1_clone.Tanim);
Console.WriteLine(“Sure ; {0} “, dvd1_clone._Sure);

Console.ReadKey();
}
}
}

Uygulamanin Ekran Goruntusu ;

 

 

 

 

 

 

Bir sonra ki design pattern cesitimiz ile gorusmek dilegiyle,

Keyifli calismalar dilerim…

Etiketler: , , ,
Bulundugu Konu Etiketleri Bilgisayar Mühendisi, Design Pattern, Genel, Visual Studio, Yazilim |

Lutfen Yorumlarinizi Burdan Ulastiriniz!...

You must be Kullanici Adiniz : to post a comment.

Istatistik

  • 1 Uye
  • 334 Yazi
  • 16 Yorum Var