オブジェクト指向解説

ぼんやりと考えるでもなく考えていると、萌えとはどんなものかイメージが出来上がってきました。それを書く前に、ここでオブジェクト指向について話をします。知っている人は読み飛ばしてくださってかまいません。


まず、ここでオブジェクト指向について話をします。オブジェクト指向とは、プログラムをデータと動作のセットである「クラス」に分割し、クラスからできたオブジェクト同士がやり取りしてプログラム全体が動作する、というものです。この方法には次のようなメリットがあります。

  • クラスごとに分割して開発できる。
  • クラスの内部仕様は(外からみた動作が変わらなければ)自由に変えられる。
  • 汎用的なクラスは他のプログラムにも転用できる。
  • すでにあるクラスから新しいクラスを作れる。

最後についての解説ですが、例えばテキストボックスのクラスがあるとして、数値専用のテキストボックスを作りたいとします。オブジェクト指向流に話を進めると、元のクラスに後から数値への制限機能だけを付ければよくなり、全部書き直す必要性はありません*1。このように、元のクラスから新たなクラスを作ることを「継承」といって、元となるクラスを「基本クラス」、新たなクラスを「派生クラス」といいます。

継承の使い方は他にもあって、WindowsなどのGUIプログラミングではウィンドウを準備するだけでかなりのコードが必要ですが、このコードの基本的な部分はどんなプログラムでもそう変わるものではありません。そこで、あらかじめ必要なコードを組み込んだクラスを作っておいて、実際のプログラミングではそこから派生させて作る、というMFCのようなクラスライブラリが存在します。

こういったライブラリの内部でも継承は多用されています。たとえば、テキストボックスや押しボタン、チェックボックスのクラスがあります。これらにはウィンドウ上の位置や表示する文字列などの共通する属性や、有効化・無効化のような共通する操作があります。こういったものを抽出して「ウィンドウ上のコントロール」という基本クラスとしておけば、それらの操作は統一的に管理できて便利です。

しかし、チェックボックスやボタンはウィンドウ上に作れますが、「コントロール」なるものは作ることができません。そういうわけで、この「コントロール」というクラスは実際には作れない抽象クラスということになります。実際には作れなくても、各コントロールに共通する操作をする時には役に立ちます。

*1:もちろん、元から拡張することを考えていたらの話ですが。