ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
オブジェクト指向のはなし

ここまでのまとめ

解説

復習をしましょう。それと、より深い洞察を少々・・・。

カプセル化と再利用可能性

オブジェクトは、カプセル化された状態機械です。オブジェクトの状態を変えることができるのは、基本的にそのオブジェクトのメソッドだけです。

メソッドを実行するためにはメッセージを送信します。メッセージに含まれる情報は次のものです。

  • 送信先のオブジェクト
  • 起動するメソッド
  • 必要なら、メソッドのパラメータ

完了通知が必要なメッセージの場合は(つまりメソッドに戻り値がある場合は)、返信のメッセージが送信者に届きます。

オブジェクトはブラックボックスなので、あるオブジェクトの内部的な修正が他のオブジェクトに波及することはありません。極端に言えば、オブジェクトをまるごと差し替えることも可能です。これは、ビデオデッキを新しくするときにテレビごと交換する必要がなかったり、コンポのアンプだけ高性能なものに交換することができたりするのと同じことです。オブジェクト間のインターフェイスが規格化されている限り、どのようなオブジェクトも結合可能であり、代替が可能です。

オブジェクトの差し替えと同様に、オブジェクトの流用も可能です。汎用性を重視して設計され、よくテストされたオブジェクトは、ブラックボックスとして再利用できます。つまり、良く作られたオブジェクトは別のプロジェクトでも利用できる可能性があります。その結果、ソフトウェアの生産効率と信頼性が増します。C++ Builder や Real Basic や Visual Basic などの開発環境に見られるコンポーネントは再利用の見事な例です。

再利用が可能であるということは、ソフトウェアをゼロからつくる必要がない可能性を示しています。つまり、必要なコンポーネントは過去のプロジェクトから検索したり別のソフトウェア会社が販売しているものを購入したりして入手可能かもしれないのです。これは、日曜大工のために DIY ショップへ行って釘やボルトやナットや蝶番やペンキやニスを買ってくるのと同じです。せっかくお店に売っているのに、「どこの誰が設計したのかもわからないものは信頼性がない」などと言って独自の蝶番を設計したりはしませんね。

クラスとインスタンス

すべてのオブジェクトには2つの名前があります。すなわち、

  1. そのオブジェクトが属するグループ、つまりオブジェクトの種類
    = クラス
  2. そのオブジェクト自体の識別子
    = インスタンス

クラスは一般名詞、インスタンスは固有名詞に相当します。例えば「ネコ」は、われわれがそういう名前で呼んでいる特定の種類の動物を表す概念(=一般名詞)であり、クラスです。「ぶち」という名前(固有名詞)のネコがいたとすれば、そのネコは「ネコ」クラスのインスタンスです。

補足:「モジュール」という言葉について

以前にモジュール分割について説明しましたが、「モジュール」という言葉は実は状況によって意味が変わります。プログラマの間で慣例的に「モジュール」と呼ばれているのは、複数の関数をひとまとめにした1組のソースファイルのことです。これは厳密にはコンパイルユニット(=翻訳単位)と呼ぶのが正しいですが、そういう習慣なのでしかたがありません。

ある定義によると、

あるものがより小さな部品によって構成されているとき、その部品のひとつひとつをモジュールと呼ぶ。
ということになっています。しかしまたある定義によると、
システムをコンポーネントによって構成する場合、コンポーネントにアルゴリズムとデータを隠蔽する(=カプセル化する)ことによって、それぞれのコンポーネントを交換可能にすることができる。このコンポーネントをモジュールと呼ぶ。
となります。またある定義によると、
入力を受け付け、何らかの処理を行い、その結果を出力するブラックボックスをモジュールと呼ぶ。
です。

つまり、システムをどのようなスケールで見るかによって、「モジュール」という言葉が指すものは違ってくるようです。ある場面では関数のことをモジュールと呼ぶでしょうし、別の場面ではインスタンスのことをモジュールと呼ぶでしょう。しかし慣例としてはコンパイルユニットのことを指す場合が多いでしょう。

(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)