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 cfactory* cproductbase’ fabrikada farkli metodlara nesneler nesnemiz nesnenin play() public stop() taraftan virtual yerine 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 : 4.10.2004
Okunma Sayısı : 31253
Yorum Sayısı : 0     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 8.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 8.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 8.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 8.12.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
Fabrika Deseni(Factory Pattern) - 1
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu yazı dizisinde sizlere C++ ile kod yazarken kolaylıkla uygulayabileceğiniz bir yöntem setinden bahsedeceğim. Bu yöntem setini kullanarak, daha sağlıklı kod yazabilir ve yazdığınız kodları daha anlaşılır hale getirebilirsiniz. Bir taraftan da, bu yöntemlerin sizin OOP becerinizi daha da arttıracağı düşüncesindeyim. Bunun öncesinde sizlerin, inheritence, pure-virtual method, ve static method kavramlarına hakim olduğunuzu varsayıyorum.

Bir fabrika düşünelim; bu fabrikada çeşitli nesneler üretilsin. Bir taraftan ham madde girsin, diğer taraftan üretilen nesneler çıksın. Sizin göreviniz ise hangi türden nesnenin ne miktarda ve ne özellikte üretileceğine karar vermek olsun. Fabrikada üretimin CFactory nesnesinin Create metodu ile yapıldığını farzedelim:

CFactory* pakProduct1 = CFactory::Create(PRODUCTID_VCDPLAYER);

CFactory* pakProduct2 = CFactory::Create(PRODUCTID_DVDPLAYER);
Yukarıdaki örnekte iki farklı türden nesnenin üretildiğini görüyoruz. Burada dikkat edilecek nokta, nesnelerimizin bazı ortak özellikler taşıyor olmaları; öncelikle hepsi birer disk oynatıcısı, dolayısı ile Play() ve Stop() isimli gibi ortak metodlara sahip olduklarını varsayalım.

pakProduct1->Play();

pakProduct2->Stop();
Dikkat edelim ki, CFactory adlı nesnemiz aslında, bahsi geçen disk oynatıcılarından biri olmaktan çok, farklı türden olan disk oynatıcılarına ev sahipliği yapan bir arayüz nesnesidir. C++ terminolojisinde, ortak bir arayüz ile farklı olmasına rağmen ortak özellikler içeren nesnelere dolaylı yoldan ulaşma kavramına polymorphism diyoruz. Şimdi CFactory nesnemize biraz daha yakından bakalım:

class CFactory

{

public:

  static CFactory* Create(const int nProductID);

  ~CFactory();

private:

  CFactory(CProductBase* pkProductBase, const int nProductID);

public:

  void Play();

  void Stop();

private:

  CProductBase* m_pkProductBase;

  int m_nProductID;

};
CFactory adlı nesnemiz bir arayüz olduğundan bahsettik. Demek ki bu arayüzün arkasında gerçek işi yapan başka nesneler bulunmakta; yani bir VCD, bir de DVD oynatıcısı. Bu örneği daha da geliştirecek olsaydık, bunların yanına Divx, MP3, VHS, vb. gibi diğer bilinen formatların oynatıcılarını da ekleyebilirdik. O zaman gelin şimdi, arka planda bulunan bu oynatıcıları inheritence kavramı altında, CProductBase adlı ana bir sınıf altında toplayalım. Bu sayede CFactory arayüzümüz, sayısız formatı destekleyen oynatıcılar yerine, sadece bir ana sınıf nesnesi ile iletişim halinde olsun.

class CProductBase

{

public:

  CProductBase();

  virtual ~CProductBase();

public:

  virtual void Play() =0;

  virtual void Stop() =0;

};
CProductBase adlı ana sınıfımız, pure-virtual bazı metodlara sahiptir: Play() ve Stop(). Nasıl ki arayüz nesnemiz CFactory bize bu metodlar için birer arayüz sağlamış ise, CProductBase’ den türemiş tüm sınıflar da, bu metodları yerine getirmek zorundadır. Eğer bunu yerine getirmezsek, Visual C++’ ın “error C2259” ve “warning C4259” uyarıları ile karşılaşırız. Aşağıdaki örnekde, CProductBase’ den türetilmiş CProductVcdPlayer ve CProductDvdPlayer sınıfları ilan edilmiştir:

class CProductVcdPlayer: public CProductBase

{

public:

  CProductVcdPlayer();

  ~CProductVcdPlayer();

private:

  void Play();

  void Stop();

};

 

class CProductDvdPlayer: public CProductBase

{

public:

  CProductDvdPlayer();

  ~CProductDvdPlayer();

private:

  void Play();

  void Stop();

};


Bunu izleyen bir sonraki yazımızda, yukarıda anlatılan sınıfların uygulamalarına geçeceğiz. O zamana kadar, kendinize iyi bakın ve güzel yazın.

Eylem Uğurel
[email protected]


Makale:
Fabrika Deseni(Factory Pattern) - 1 C++ ve C++.NET dili Eylem Uğurel
  • 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