Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için
tıklayın
.
71
Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için
tıklayın
.
Yayınlanan diğer makaleleri için
tıklayın
.
İlgili etiketler:
deseni
islemi
kopyalama
kopyalanmasi
kopyasini
metodu
nazaran
nesneleri
nesnelerin
nesnenin
object
projelerde
prototip
tasarim
varolan
C# / VC#/.NET
Sefer Algan
YAZI HAKKINDA
Türü
:
Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır.
Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi
:
Orta
Kategori
:
C# / VC#/.NET
Yayınlanma Tarihi
:
4.12.2004
Okunma Sayısı
:
32131
Yorum Sayısı
:
0
yorum yaz
SİTE İÇİ ARAMA
Üye
GİRİŞİ
Üye girişi için
tıklayın
.
Kullanıcı Adı
Şifre
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
Şifremi / Kullanıcı Adımı unuttum.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
Serbest KÖŞE
(?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır.
Bu yazılar editör incelemesine girmeden yayınlanır.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
22.11.2024
Turhal Temizer
Mac OS/X Removing CUDA
22.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
22.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
22.11.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
C# / VC#/.NET
/
"Prototype" (Prototip) Tasarım Deseni
"Prototype" (Prototip) Tasarım Deseni
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
Bu yazımda "Creational" desenler grubunda yer alan "Prototype" tasarım deseninden ve bu deseni C# ile nasıl gerçekleştirebileceğimizden bahsedeceğim.
Bu yazıyı okumadan önce tasarım desenleri hakkında ayrıntılı bilgi edinmek ve "Creational" grubundaki diğer desenleri incelemek için aşağıdaki bağlantıları kullanabilirsiniz.
Singleton Tasarım Deseni
Abstract Factory Tasarım Deseni
Builder Tasarım Deseni
"Prototype" deseni yukarıda adı geçen diğer tasarım desenlerine nazaran daha kolay algınmaktadır. Ancak "Prototype" deseni gerçek projelerde diğerlerine nazaran daha az sıklıkta kullanılmaktadır. Bazı spesifik projelerde çok kullanılmakta ve oldukça da faydalı bir kalıptır. "Prototype" deseni adından da anlaşılacağı üzere sonradan oluşturulacak nesneler için prototip görevi üstelenen bir yapıyı oluşturmak için kullanılır. Bir yazılım geliştirici olarak projelerimin bir çok noktasında kullandığım belirli nesnelerin o an için bir kopyasını oluşturmak ve o noktadan sonra yapacağım işleri artık bu kopya nesne üzerinden yapma isteğim olmuştur. Bu isteğimi nesne yönelimli programlama tekniklerini kullanarak bir şekilde gerçekleştirebiliyorum. Böylece hem belirli bir noktadan sonra orjinal nesnemin durumunu korumasını garanti altına almış oluyorum hem de varolan bir nesneyi kopyalarak yeni bir nesne yaratma zahmetine girmemiş oluyorum. Eğer bu kopya nesnelere sık sık ihtiyaç duyarsam bu sefer de kopyalama işleminin hem verimli çalışmasını garanti etmem gerekli hemde kopyalama işlemini tek bir merkezden idare etmem gerekli. İşte bu durumda imdadımıza "Prototype" tasarım deseni yetişmekte. Bu desen varolan bir nesnenin kopyalanarak yeni bir nesneye aktarılmasını kolaylaştıran bir yapı sunmakta. Özetle, bu desen varolan nesnelerin kopyalanması yolu ile yeni nesnelerin üretilmesi için gerekli olan kalıbı sunmaktadır. Bu yapıyı aşağıda örneklendireceğim ancak öncelikle nesne kopyalama çeşitleri üzerinde durmak gerekir.
Nesnelerin kopyalanması 2 şekilde olabilmektedir. Birinci yöntem "shallow copy" denilen ve sadece nesnelerin referanslarının kopyalandığı klasik atama işlemlerinde meydana gelen kopyalama biçimidir. Bu tür bir kopyalamada yalnızca nesnenin bellekteki adresi kopyalanmaktadır. Dolayısıyla bu yöntem burada bahsedilen "Prototype" desenine pek uygun değildir. İkinci yöntem ise "Deep Copy - Derin Kopyalama -" denilen yöntemdir ki bu yöntemde nesneler birebir kopyalanarak yeni referans değişkenine atanır. C#’ta değer türlerinin birbirlerine atanması bu tür bir kopyalama işlemine örnek olarak verilebilir. Fakat "Prototype" deseninde söz konusu olan referans türden nesnelerin "deep copy" yöntemi ile kopyalanmasıdır.
.NET Framework içerisindeki IColoneable arayüzünde bulunan Clone() metodu genellikle "shallow copy" yapmak için kullanılır. IClonable arayüzünü uygulayan sınıf nesneleri ile Clone() metodu kullanıldığında geriye dönen değer bellekteki varolan nesneyi işaret eden referanstan başka birşey değildir. Ancak clone metodu değer tipleri için kullanıldığında sınıflar için birinci seviyeden "Deep Copy" olarak ta kullanılabilmektedir. "Deep Copy" işlemi için .NET’te genellikle Serialization API’si kullanılmaktadır. Bir nesnenin yeni bir kopyasını elde etmek için nesnenin durumu seileştirilerek bir dosyaya kaydedilir ve dosyadan okunan serileştirilmiş bilgiler yeni bir nesneye aktarılır. Bu yazıdaki "Prototype" deseni uygulamasında nesnelerin kopyasının çıkarılması aşamasını Object sınıfını protected üye metodu olan
MemberWiseClone()
metodunu kullanacağız.
"Prototype" deseninde üç temel yapı bulunmaktadır. Bu yazpılar aşağıdaki gibi listelenmiştir.
Soyut Prototip
:Kopyalanarak yeni nesnelerin oluşturulacağı sınıflar için temel teşkil eden ve çoğunlukla içinde kopyalama işlemini görecek özet bir metodun bulunduğu abstract sınıftır yada içinde sadece bildirimlerin yer aldığı bir arayüzdür. İhtiyaca göre bu yapı özet(abstract) bir sınıf olabileceği gibi bir arayüzde olabilir.
Somut Prototip Nesneleri
:Soyut nesneleri uygulayan ve projelerde kullanılan gerçek nesneleri temsil ederler. Kopyalama işlemi soyut sınıftan kalıtılan bir metot ile yapılır.
İstemci(Client) Uygulama
:Somut prototip nesnelerinden birer kopyasını elde edecek metot, sınıf yada başka bir üye elemandır.
Not : Görüldüğü üzere, "Prototype" deseni daha önce anlatmış olduğum desenlere nazaran çok kolay ve anlaşılırdır. Bu kolaylığın en büyük nedenlerinden biriside nesnelerin kopyalanması için .NET Framework’un sağlamış olduğu imkanlardır.
Bütün bu bilgiler ışığında "Prototype" deseninin UML sınıf diyagramı aşağıdaki gibi çizilebilir.
Yukarıdaki UML sınıf diyagramına bakarak aşağıdaki kodları çıkarmak ise son derece basittir. Aşağıdaki kaynak kod, "Prototype" tasarım desenine ait en temel kalıbın C# ile gerçekleştirilmesidir.
using System; abstract class SoyutPrototip
{
public int prototypeID;
public SoyutPrototip( int pid )
{
this.prototypeID = pid;
}
//Kopyalama işleminde kullanılacak metot
//Metodun geri dönüş değerine özellikle dikkat edin.
public abstract
SoyutPrototip Clone();
}
class SomutPrototipNesne1 : SoyutPrototip
{
public SomutPrototipNesne1(int pid) : base (pid) {}
public override SoyutPrototip Clone()
{
//Kopyalama işlemi için Object sınıfının
//protected üye elemanı olan MemberWiseClone()
//metodu kullanılıyor.
return
(SoyutPrototip)this.MemberwiseClone();
}
}
class SomutPrototipNesne2 : SoyutPrototip
{
public SomutPrototipNesne2(int pid) : base (pid) {}
public override SoyutPrototip Clone()
{
//Kopyalama işlemi için Object sınıfının
//protected üye elemanı olan MemberWiseClone()
//metodu kullanılıyor.
return
(SoyutPrototip)this.MemberwiseClone();
}
}
class İstemciUygulama
{
public static void Main()
{
SomutPrototipNesne1 sp1 = new SomutPrototipNesne1(34);
SomutPrototipNesne1 sp1_kopya =
(SomutPrototipNesne1)sp1.Clone();
sp1.prototypeID = 6;
Console.WriteLine(sp1.prototypeID.ToString());
Console.WriteLine(sp1_kopya.prototypeID.ToString());
}
}
C# kaynak kodundan da görüldüğü üzere "Prototype" tasarım deseni çok basit bir kalıp sunmaktadır. Belkide birçoğumuzun zaten projelerinde kullandığı bir yapı olabilir. Bu yazı ile birlikte kullandığımız yapıya sadece bir isim vermiş olduk.
"Protptype" deseni il birlikte "Creational" desenler grubunu bitirmiş olduk. Bir sonraki yazımda
"Structural -Yapısal-"
desenler grubundaki
"Adaptor"
tasarım desenini inceleyeceğiz.
Makale:
"Prototype" (Prototip) Tasarım Deseni C#, Visual C# ve .NET Sefer Algan
Yazılan Yorumlar
Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için
tıklayın
.
Üye değilseniz
Üyel Ol
linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
Bu Konuda Son 10
Eklenen Son 10
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl