Yazılım geliştirmede modeller: model yöntemi

Adanali

Active member
Yazılım geliştirmede modeller: model yöntemi


  1. Yazılım geliştirmede modeller: model yöntemi

Kalıplar, modern yazılım geliştirmede önemli bir soyutlamadır. İyi tanımlanmış terminoloji, açık belgeler sunar ve en iyisinden öğrenirler. Desen yöntemi, şüphesiz “Design Patterns: Elements of Reusable Object-Oriented Software” kitabından en çok kullanılan tasarım desenlerinden biridir.







Rainer Grimm, uzun yıllardır yazılım mimarı, ekip lideri ve eğitim yöneticisi olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanır, aynı zamanda sık sık uzmanlık konferanslarında konuşmaktan da keyif alır. Modernes C++ blogunda yoğun bir şekilde C++ tutkusundan bahsediyor.













Model yönteminin temel fikrini anlamak kolaydır. Birkaç tipik adımdan oluşan bir algoritmanın iskeletini tanımlar. Uygulama sınıfları, iskeleti değiştiremez, yalnızca adımları özelleştirebilir. Adımlara genellikle kanca yöntemleri denir.

modeli yöntemi


amaç


  • Birkaç tipik adımdan oluşan bir algoritmanın iskeletini tanımlayın.
  • Alt sınıflar ayak izlerini özelleştirebilir, ancak iskeleti özelleştiremez.
kullanım durumu


  • Bir algoritmanın farklı varyasyonları kullanılmalıdır.
  • Algoritma değişkenleri benzer adımlardan oluşur.
çerçeve








AbstractClass

  • Birkaç aşamadan oluşan algoritmanın yapısını tanımlar.
  • Algoritmanın adımları sanal veya tamamen sanal olabilir.
ConcreteClass

  • Gerekirse, algoritmanın bireysel adımlarının üzerine yazar.
misal



// templateMethod.cpp

#include <iostream>

class Sort{
public:
virtual void processData() final { // (4)
readData();
sortData();
writeData();
}
virtual ~Sort() = default;
private:
virtual void readData(){} // (1)
virtual void sortData()= 0; // (2)
virtual void writeData(){} // (3)
};


class QuickSort: public Sort{
void readData() override {
std::cout << "readData" << 'n';
}
void sortData() override {
std::cout << "sortData" << 'n';
}
void writeData() override {
std::cout << "writeData" << 'n';
}
};

class BubbleSort: public Sort{
void sortData() override {
std::cout << "sortData" << 'n';
}
};


int main(){

std::cout << 'n';

QuickSort quick;
Sort* sort = &quick; // (5)
sort->processData();

std::cout << "nn";

BubbleSort bubble;
sort = &bubble; // (6)
sort->processData();

std::cout << 'n';

}


Sıralama üç aşamadan oluşur: readData (1), sortData (2) ve writeData (3). Üyelerin işlevleri readData Ve writeData varsayılan bir uygulama sunarlar, ancak üye işlevi sortData() tamamen sanaldır. Bu üç adım, algoritmanın omurgasını oluşturur. processData (4). Artık Hızlı Sıralama (5) ve Kabarcık Sıralama (6) uygulayabilirsiniz.

İşte programın çıktısı:








iskelet işlevim var processData ve sanal bir işlev olarak uygulanan üç aşaması. Üç sanal üye işlevi sayesinde geç bağlama gerçekleşir ve çalışma zamanı nesnesinin üye işlevleri çağrılır. Sanal e olarak iskelet işlevi final beyan etmek C++’da gereğinden fazla. final sanal bir işlevin geçersiz kılınamayacağı anlamına gelir.

Bir üye işlevin geçersiz kılınamaz olmasını istiyorsanız, onu sanal olmayan yapın.

Sanal Olmayan Arayüz Dili (NVI).

Şablon yöntemini C++’ta uygulamanın deyimsel yolu bir NVI dilidir. Sanal olmayan arayüz, iskeletin sanal olmadığı ve adımların sanal olduğu anlamına gelir. İstemci arayüzü kullandığı için iskelet değiştirilemez. İşte arayüzün karşılık gelen uygulaması Sort:


class Sort{
public:
void processData() {
readData();
sortData();
writeData();
}
virtual ~Sort() = default;
private:
virtual void readData(){}
virtual void sortData()= 0;
virtual void writeData(){}
};


Herb Sutter, 2001’de C++’da NVI’yı popüler hale getirdi. Virtuality makalesinde, NVI dilini dört ilkeye indirgiyor:

  • Kılavuz no. 1: Model Metodu tasarım modelini kullanarak arayüzleri sanal olmayan hale getirmeyi tercih edin.
  • Kılavuz no. 2: Sanal işlevleri özel yapmayı tercih ediyorsunuz.
  • Kılavuz no. 3: Sanal işlevi yalnızca türetilmiş sınıfların bir sanal işlevin temel uygulamasını çağırması gerekiyorsa güvenli hale getirin.
  • Kılavuz no. Kural 4: Bir temel sınıf yıkıcısı, genel ve sanal ya da korumalı ve sanal olmayan olmalıdır.
İlgili modeller

  • Model yöntemi ve strateji modelinin kullanım durumları oldukça benzerdir. Her iki model de bir algoritmanın varyasyonlarını sağlamanıza izin verir. Model yöntemi, sınıf hiyerarşilerine, nesneler üzerindeki strateji modeline ve kompozisyona dayalıdır. Strateji modeli, farklı stratejilerini nesneler olarak tutar ve bu nedenle çalışma zamanında stratejilerini değiştirebilir. Şablon yöntemi, kontrol akışını tersine çevirir ve Hollywood ilkesini izler: “Siz bizi aramayın biz sizi arayalımu”. Strateji şablonu genellikle bir kara kutudur. Ayrıntılarını bilmeden bir stratejiyi diğeriyle değiştirmenize olanak tanır.
  • Fabrika yöntemi genellikle şablon yönteminin belirli adımları için çağrılır.
Avantajlar ve dezavantajlar


faydalar


  • Yalnızca yeni alt sınıfların oluşturulması gerektiğinden, bir algoritmanın yeni varyantlarının uygulanması kolaydır
  • Algoritmaların ortak adımları doğrudan arayüz sınıfında uygulanabilir.
Dezavantajları

  • Artık bir algoritmanın küçük varyasyonları bile yeni bir sınıfın oluşturulmasını gerektiriyor; bu, birçok küçük sınıfın oluşturulmasına yol açabilir
  • İskelet sabittir ve değiştirilemez. Bu sınırlama bir iskelet fonksiyonu ile aşılabilir
Sıradaki ne?


“Design Patterns: Elements of Reusable Object-Oriented Software” kitabından yalnızca bir model hâlâ yolculuğumda eksik: strateji modeli. Genellikle standart şablon kitaplığında kullanılır. Strateji modelini bir sonraki yazımda ele alacağım.


()



Haberin Sonu
 
Üst