MQL5超入門(4)/データ型/クラス(class)

今日は、MQL5超入門の続きです。
クラスは、オブジェクト指向言語を習得する上では避けられない話なのですが・・・・。


結論から申し上げますと、MQL4 からMQL5 への移植だけを目的としている人は、
現時点ではクラスについて知る必要はありません

断言は出来ませんが、おそらくクラスを使わずに移植できるので、今回は読み飛ばしてもOKです。




前回は、関連性の深いデータ ( 始値/高値/安値/終値 ) を1つにまとめて四本値というデータ構造体で扱うと、なんとなく便利という話でしたが、データ構造体をもっと便利に擬人化するのがクラスという概念です。


今、手元に四本値のデータがあるとして、その値幅を知りたいとします。
四本値構造体は、ただのデータの集合ですから、値幅を知りたかったら自分で 値幅=(高値-安値) を計算する必要があります。
でも、四本値構造体を擬人化 (クラス化) して、賢く育てると、

四本値さん、値幅を教えて。

と聞くだけで、四本値さんが値幅を内部で計算して教えてくれるようになります。


値幅ぐらい自分で計算できるわっっという人には、擬人化(クラス化) は不要ですが、構造体として内部でまとめて扱うデータが増えて、そのデータから何かを計算処理する方法(メソッド)が複雑になってくると、クラス化は便利に感じてきます。自分専用のクラスを持つことは、個人秘書を雇うイメージに近いかもしれません・・。



実際のクラスの定義は

class CBars4 // struct の代わりにclass と書く。クラス名は大文字のC から始めるのが通例。
{
public:           //public は誰でもアクセスできる宣言
  double m_open;  //
  double m_high;  //データ(メンバ変数)は構造体と同様に並べる
  double m_low;   //
  double m_close; //
          //以下がメソッド(メンバ関数)の定義
  double  GetNehaba(){return ( m_high - m_low);};
};

という書き方をします。
使い方は、

CBars4 a;// CBars4型の変数a を宣言。ここで初めて、四本値さんが誕生(実体化) する。

a.m_open = 100;// 生まれたばかりの四本値さんのメンバ変数に値を設定
a.m_high = 101;//
a.m_low  =  99;
a.m_close= 100;

Print( a.GetNehaba() );//「値幅を教えて。」

といった感じです。




この程度ならクラス化はほとんど意味がなさそうですが、

単機能でバグの無い親クラスを作成

単機能な親クラスの能力を継承しつつ、新機能を持った子クラスを作成

新機能を持った子クラスの能力を継承しつつ、わずかな修正で特定の処理に特化した孫クラスを作成

という拡張ができるので、オブジェクト指向言語の根幹となっています。


もう少しだけクラスについて知りたい人は、C++の基礎を参照してください。
言語は違いますが、わずか 12 ページの分量で、MQL5 のクラスでも通じる内容がほとんどなので、読んでも損は無いと思います..^^;



もしも、オブジェクト指向について本格的に勉強してみたいという人がいらっしゃいましたら、
オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
がお勧めです。私のいい加減な例え話よりも正確な理解ができると思います...。((((((^_^;) ニゲニゲ