[Prev][Up][Next]


計算機事始め

2部  オブジェクト指向

 

1.構造化プログラムからオブジェクト指向プログラムへ

科学計算のためのプログラム言語であるFortranは、一部分を切り取り他のプログラムに応用するということがなかなか難しい言語であった。この反省から、Pascalなどの次世代のプログラムでは、プログラムの一部をサブルーチン化(あるいはモジュール化)し、プログラムをモジュールの集まりとして作成することが一般的となった。またデータもできるだけ構造体を使用し、まとまったデータの扱い方ができるように工夫した。
Fig2_1

しかし、いろいろな種類のデータを扱う場合には、データが異なるだけではなく、そのデータの扱いも異なってくることが予想される。例えば画面上に円を2つ描いた場合に、一つの円はクリックしたときに色が変わり、もう一つの円はクリックしたときに大きさが変わるといったような場合である。

このような状況に対処するために、いくつかの対策がなされた。

 
(1) データだけをまとめて構造体とするのではなく、そのデータの処理を担うサブルーチン(モジュール)も含めた形での(データ+関連コード)複合体を作る。この複合体はクラス(class)と呼ばれる。

(2) クラスは階層的に定義できるようにする。子供のclassは原則的に親のデータと関連コードを受け継ぐが(継承、inheritance)、データ・関連コードを書きかえることも可能であるし付け足すことも可能である。

(3) クラス内のデータ・コードへのアクセスに制限を加え、予期せぬデータの破壊を予防する(カプセル化)。このことは特に大規模なプログラムを多くの人の共同作業で行う場合に重要である。

(4) クラスを鋳型として、メモリー上に置かれるオブジェクトを生成する。インスタンスとも呼ばれる。クラスはintやdoubleにあたるいわゆる型・鋳型であり、変数の形を定義するものである。言葉を変えて表現するなら、スタンプ・はんこのようなものである。

(5) オブジェクトは互いにメッセージを送る。
 
 

このような考えを発展させたプログラム言語がいわゆるオブジェクト指向言語と言われるものであり、C++はその代表的なものである。プログラムは多くのオブジェクトの集まりであり、それぞれのオブジェクトはデータと関連コードを持っている。より正確に言うなら、オブジェクト自体もオブジェクトからできている。オブジェクトの相互間でメッセージのやり取りが行われる。

Windwos 95/98/NT/2000/XPやMacOSのようなウインドウやアイコンをマウスで操作するプログラムはどのようになっているのであろうか? ウインドウプログラムは、いろいろなオブジェクトの集まりとして作られることが多い。マウスの入力やキーボード〜の入力、あるいはタイマーからの信号や、外部に接続した機器からの信号は、イベントと呼ばれる。イベントはシステムで受け取られてどのオブジェクトに対するイベントであるかが決定され、そのオブジェクトにイベントが発生したとのメッセージが送られる。メッセージが送られて来られたオブジェクトは、イベントハンドラーでイベントを処理する。

このようなWindowsプログラムに対して、コマンドラインから入力してプログラムを起動し結果をコンソールに出す従来のプログラムは、コンソールプログラムと呼ばれる。Windowsプログラムはコンソールプログラムに較べて全ての面で優れているのであろうか?Windowsプログラムではメッセージのやりとりが多いため、数値計算がプログラムの大部分であるようなプログラムは、コンソールプログラムの方が早いといわれている。またリアルタイム性を要求されるプログラムでは、コンソールプログラムの方が高い精度で動かすことが容易である。

もしオブジェクト指向のプログラムをしなければ、if else if  やswitch文を用いなくてはならず、見かけが非常に複雑になってしまう。Windowsプログラムには、オブジェクト指向プログラム開発環境が必須であるといってよい。

Windowsでは、Delphi、C++Builder、Visual C++のようなオブジェクト指向のプログラム開発環境が整っている。Mac OSでは、Apple社が提供するプログラム環境を購入するのが標準的であるが、このシステムはあくまで商業的なプログラム開発のためのものであり、個人が比較的単純なプログラムを開発するには向いていない。MetroWorks社のCode Warriorは個人向けであるが、少なくとも以前のバージョンではコンパイル等の速度が遅く、あまり快適な開発環境ではなかった。

より劣悪な環境しか無いのがUNIX/Linuxの世界である。UNIX/Linuxでは、通常X-Windowsと呼ばれるウインドウシステムが用いられるが、オブジェクト指向の開発環境は未整備である。Gtk++などのtoolkitが普及して来ているが、オブジェクト指向化はほとんどされていない。しかしDelphiのLinux版であるKylixが提供され始めるなど変化の兆しが見られ、近い将来にはもう少し便利になっていくことが期待される。

 
 
  [Prev][Up][Next]