Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Eylem Uğurel
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ı : 32979
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜ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.
 
.net TV RSS 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.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 23.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 23.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 23.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 23.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Polymorphism(Çok Biçimlilik) ve Fabrika Deseni - 2
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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

[email protected]
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
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
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