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
C++ / C++.NET
YAZAR HAKKINDA
Eylem Uğurel
http://www.csharpnedir.com/
İletişme geçmek için
tıklayın
.
4
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:
cfactory
cproductbase
delete
device
fabrika
metodlari
paterni
pkproductbase
return
sevgili
sinifinin
specific
stop()
switch
uygulama
C++ / C++.NET
Eylem Uğurel
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
:
Başlangıç
Kategori
:
C++ / C++.NET
Yayınlanma Tarihi
:
17.10.2004
Okunma Sayısı
:
35832
Yorum Sayısı
:
2
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
Burak Selim Şenyurt
Bellek Yönetiminde Verimlilik için İpuçları (Rust Odaklı)
12.5.2025
Burak Selim Şenyurt
Rust ve Güvenli Bellek Yönetimi Hakkında
12.5.2025
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
/
Eylem Uğurel
/
C++ / C++.NET
/
Polymorphism(Çok Biçimlilik) ve Fabrika Deseni - 2
Polymorphism(Çok Biçimlilik) ve Fabrika Deseni - 2
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
Sevgili okurlar, bir önceki yazımızda, CFactory ve CProductBase sınıflarının başlık yapılarını tanımış ve hatırlayacak olursak CFactory sınıfının
polymorphism
kavramını ortaya koyduğunu görmüş, CProductBase sınıfının da
inheritence
kavramına değindiğini incelemiştik. Bu yazımızda ise bu sınıfların uygulama kodlarını sizlerle paylaşacağız.
Öncelikle CProductBase sınıfıyla işe başlayalım. Bu sayede aşağıdan-yukarıya bir patern izlemiş olacağız:
CProductBase::CProductBase()
{
}
CProductBase::~CProductBase()
{
}
Gördüğünüz üzere, CProductBase sınıfı pek fazla bir iş yapmıyor. Onun tek görevi, kendisinden türetilen sınıflara,
ne gibi işleri yapmak mecburiyetinde olduklarını hatırlatmakdır
. Biz bu hatırlatmayı
pure-virtual
Play() ve Stop() metodları ile zaten sağlamıştık.
Gelelim CProductBase’ den türettiğimiz sınıfların uygulamalarına; birincisi CProductVcdPlayer:
CProductVcdPlayer::CProductVcdPlayer()
{
}
CProductVcdPlayer::~CProductVcdPlayer()
{
}
void CProductVcdPlayer::Play()
{
// TODO: Device specific play code goes here
}
void CProductVcdPlayer::Stop()
{
// TODO: Device specific stop code goes here
}
Ve ikincisi CProductDvdPlayer:
CProductDvdPlayer::CProductDvdPlayer()
{
}
CProductDvdPlayer::~CProductDvdPlayer()
{
}
void CProductDvdPlayer::Play()
{
// TODO: Device specific play code goes here
}
void CProductDvdPlayer::Stop()
{
// TODO: Device specific stop code goes here
}
Fark ettiğiniz üzere, metodlarımızın iç uygulamalarını tamamen boş bıraktık. Bunun nedeni, o noktalara yazılacak kodun aslında fabrika paterni ile
pek bir ilgisinin olmamasıdır
. Siz kendiniz, fabrika paterni ile bir nesne yapısı kurmayı amaçladığınızda, bu noktalara yazacağınız kodu zaten biliyor olacaksınız. Örnek verecek olursak, bir resim kütüphanesini ele alalım; bu kütüphane TGA, BMP, JPG, PNG, vb.. türünden nesneleri okuyacak/yazacak olsun. İşte yukarıda boş bırakılmış kısımlar, bu farklı türlere özel okuma/yazma rutinlerini içermiş olacak.
Ve son olarak CFactory sınıfına bakalım:
CFactory* CFactory::Create(const int nProductID)
{
CProductBase* pkProductBase =NULL;
switch (nProductID)
{
case PRODUCTID_VCDPLAYER:
pkProductBase = new CProductVcdPlayer;
break;
case PRODUCTID_DVDPLAYER:
pkProductBase = new CProductDvdPlayer;
break;
}
if (!pkProductBase)
return NULL;
return new CFactory(pkProductBase, nProductID);
}
CFactory::~CFactory()
{
switch (m_nProductID)
{
case PRODUCTID_VCDPLAYER:
delete (CProductVcdPlayer *)m_pkProductBase;
break;
case PRODUCTID_DVDPLAYER:
delete (CProductDvdPlayer *)m_pkProductBase;
break;
}
}
CFactory::CFactory(CProductBase* pkProductBase, const int nProductID)
{
m_pkProductBase = pkProductBase;
m_nProductID = nProductID;
}
void CFactory::Play()
{
m_pkProductBase->Play();
}
void CFactory::Stop()
{
m_pkProductBase->Stop();
}
Görüldüğü üzere arayüz sınıfımız olan CFactory üretimi gerçekleştiriyor ve işi biten nesnelerin doğru bir şekilde yok edilmelerini sağlıyor. Bunların yanında, Play() ve Stop() metodları ile, sadece tanıdığı CProductBase sınıfımızın
pure-virtual
metodlarını çağırarak, program akışının ilgili türemiş nesnelere ulaşmasını sağlıyor.
Sonuç olarak; fabrika paterni
OOP
uygulama geliştirirken kullanılabilecek etkin tekniklerden biridir. Uygulama alanları genelde
compiler
ve
interpreter
’lar, geometrik nesne uygulamaları, 3-boyutlu canlandırma uygulamaları gibi yerlerdir.
Tekrar görüşmek üzere, kendinize iyi bakın ve güzel kodlar yazın.
Eylem Uğurel
eylemugurel@hotmail.com
Makale:
Polymorphism(Çok Biçimlilik) ve Fabrika Deseni - 2 C++ ve C++.NET dili Eylem Uğurel
Yazılan Yorumlar
Yorum Yaz
ŞUB
13
2009
Eylem Uğurel
/
üye hakkında
Elbette sizi anlıyorum. Ancak, Interface Polymorphism kavramından bahsetmek için OLECOMActiveX teknolojisinden de bahsetmek gerekecektir. Burada üzerinde durduğum konu daha çok standart C++ üzerinden (interface kullanmadan) kavramı anlatmaktır. Ayrıca, interface tipi için daha çok Javayı tercih etmelisin belki de. İyi çalışmalar.
ŞUB
3
2005
Elzem ÖZGÜRCE
/
üye hakkında
Sanırım Factory pattern i Design Patternların creational olanlarından olan. yalnız, abstract class ya da inheritance polymorphismindense interface poylmorphismini anlatsaydınız sanırım daha iyi olurdu.
Sayfalar :
1
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