Tiplerin Kapsüllenmesi ve Genişletilebilirliği

NYP yazılım üretmek için dengelenmiş bir yaklaşımdır. Veri ve davranış birlikte paketlenir. Bu kapsülleme, kullanıcı tanımlı veri tipleri oluşturur, dildeki veri tiplerini genişletir ve onlarla etkileşim kurar. Tiplerin genişletilebilirliği, dile kullanıcı tanımlı yeni tipler kazandırır. Bu yeni veri tipleri de en az temel tipler kadar kolay kullanıma sahiptirler.

Bir soyut veri tipi (örneğin bir dizgi) ideal ve iyi bilinen bir davranış tipinin tarifidir.

Dizgi kullanıcısı birleştirme veya yazma gibi dizgi işlemlerini bilir. Bu tür işlemler yöntem olarak isimlendirilir.

SVT ile yapılan belli uygulamalar bir takım kısıtlamalara tabi olabilir. Örneğin, dizgilerin uzunlukları sınırlıdır. Sınırlamalar her şeye açık olan davranışı etkiler. Aynı zamanda, içsel veya özel uygulama detayları kullanıcının nesneyi görme şeklini doğrudan etkilemez. Örneğin, dahili taban adresleri ve isim kullanıcı için gerekli değilse, dizgi çoğu zaman bir dizi gibi uygulanır.

Kapsülleme, kullanıcı tanımlı tipler için açık arayüzler temin edildiğinde, uygulama detaylarını saklamaya yarayan bir yetenektir. MQL5 'da, tıpkı C++ 'da olduğu gibi, sınıf (class) ve yapı (struct) tanımları, anahtar erişim belirteçleriyle (private, protected ve public) kombine şekilde, kapsülleme provizyonları için kullanılır.

public (özel) anahtar sözcüğü kendinden sonra gelen üyeler için kısıtlamasız, açık bir erişim ifade eder. Bu anahtar sözcük olmadan sınıf üyeleri varsayılan olarak kilitli durumdadırlar. Özel üyeler sadece kendi sınıfları içinde yer alan üye fonksiyonlar için erişilebilir durumdadır.

Korunan (protected) sınıf fonksiyonları sadece kendi sınıfları için değil, aynı zamanda kalıtımsal türev sınıflar içinde kullanılabilir olacaktır. Public (genele açık) sınıf fonksiyonları, sınıf bildirimi çerçevesindeki tüm fonksiyonlar için kullanılabilir durumdadır. Koruma, sınıfın uygulama bölümünün gizlenmesine ve bu sayede veri yapısındaki değişiklerin önlenmesine olanak sağlar. Erişim kısıtlaması veya veri gizleme nesne yönelimli programlamanın bir özelliğidir.

Sınıf fonksiyonları genellikle protected şekillendiricisi ile korunarak bildirilir. Değerlerin okunup yazılması ise, ayarla-ve-al şeklinde isimlendirilen yöntemlerle gerçekleştirilir. Bu yöntemler public erişim şekillendiricisi ile belirlenirler.

 

Örnek:

class CPerson
  {
protected:
   string            m_name;                     // isim
public:
   void              SetName(string n){m_name=n;}// ismi ayarlar
   string            GetName(){return (m_name);} // isme dönüş yapar
  };

 

Bu yaklaşım bize çeşitli avantajlar sağlar. İlk olarak, isim aracılığıyla fonksiyonun ne işe yaradığını anlarız - sınıf üyesinin değerini ayarlar veya alır. İkinci olarak, gelecekte CPerson sınıfının -veya bunun türev sınıflarının içindeki m_name değişkeninin tipini- değiştirmemiz gerekebilir.

Bu durumda, CPerson sınıfının nesneleri, hiçbir kod değişimi olmadan programda kullanılabilir olacağından, sadece SetName() ve GetName() fonksiyonlarının uygulama şeklini değiştirmemiz yeterli olur. Çünkü kullanıcı m_name'in veri tipinin değiştiğini bile bilmeyecektir.

Örnek:

struct Name
  {
   string            first_name;                 // isim
   string            last_name;                  // soy isim
  };
 
class CPerson
  {
protected:
   Name              m_name;                     // isim
public:
   void              SetName(string n);
   string            GetName(){return(m_name.first_name+" "+m_name.last_name);}
private:
   string            GetFirstName(string full_name);
   string            GetLastName(string full_name);
  };
 
void CPerson::SetName(string n)
  {
   m_name.first_name=GetFirstName(n);
   m_name.last_name=GetLastName(n);
  }
 
string CPerson::GetFirstName(string full_name)
  {
   int pos=StringFind(full_name," ");
   if(pos>0) StringSetCharacter(full_name,pos,0);
   return(full_name);
  }
 
string CPerson::GetLastName(string full_name)
  {
   string ret_string;
   int pos=StringFind(full_name," ");
   if(pos>0) ret_string=StringSubstr(full_name,pos+1);
   else      ret_string=full_name;
   return(ret_string);
  }

Ayrıca Bakınız

Veri Tipleri