プログラムだけではなく、工学などにも出てくる概念に「モジュール」というモノがあります。モジュールは「まとまりのある機能を持った部品」「交換可能な構成要素」といった意味合いのものです。
モジュールの本来の意味は「基準になる基本寸法」のことで、建築の世界の「モジュール」はまさにその意味合いで使われています(インチモジュール/メーターモジュール/尺モジュール)。
ただ、それ以外の多くのところでは「基本寸法が同じである→同じ基本寸法のものであれば別のものに交換ができる→その基準によって交換可能となった構成要素」というような流れから「交換可能な構成要素」をモジュールと呼称するケースが多々あります。
例えば「部屋のドアの鍵が壊れた」ときに、ドアごと交換をするのではなく「鍵だけを交換できる」のは、鍵が「一つのモジュールとして適切に設計されているから」になります。
クラスは、この「モジュール」という概念を踏まえておくと理解がしやすいでしょう。クラスは「まとまりのある機能を持った部品」です。また、クラスは「機能を拡張したい」や「問題があったから修正したい、書き直したい→交換したい」という状況があり得るために、それが可能なように設計と実装をする必要があります。
こういった「交換が容易」な設計や実装を、プログラムの世界だと「疎結合」といった言われ方をされることも多いです。
また、大規模のプログラムを書くときにも、このモジュール化はとても重要になります。
人間が理解できる複雑さには、個人差はもちろんありますが、いずれにしても「限界」があります。モジュール化によって「ある程度大きいサイズの部品」を、その全てを把握するのではなくて「こんな機能があるまとまりなんだ」という部分的な理解で「使える」ようにします。これにより、「取りあえず理解しなくても使える」部分の複雑さを、いったん、思考から「隠蔽する」ことができます。
そうすると「全てを理解していなければ書けない」状況と比較して、モジュール化した場合には「より複雑なプログラムを、複雑さをある程度隠蔽した状態で」書くことができるために、結果として「全体としてはより複雑度の高いプログラム」を書くことができるようになります。
これは「大規模なプログラミング」をするときに、とても重要なアプローチになります。
このように「モジュール化」することは、とても重要です。オブジェクト指向プログラミングでは、これを「情報隠蔽」「カプセル化」などと呼称します。
「モジュール化」「情報隠蔽」「カプセル化」は、厳密には少し意味合いが異なる部分もあるのですが、今は「同じようなものである」と理解してください。
カプセル化の一部として「データ隠蔽」という考え方があり、その実装方法として「アクセサー」というものがあります。「常に必ず使われる」ものではないですし、今なお「アクセサーの是非」は議論されているものではありますが、それでも比較的多くのところで「実際に使われている」概念であり実装なので、把握しておくとよいでしょう。
アクセサーを実装する場合、以下のようなルールで実装されることが多いです。
前回の連載でもsetterは実装していたのですが、実際にアクセサーの付いたクラスの実例を書いてみましょう。
<?php class hoge { public function setVal($v) { $this->_val = $v; } public function getVal() { return $this->_val; } // private $_val; } // $obj = new hoge(); $obj->setVal('test'); var_dump( $obj->getVal() );
PHPでは、アクセサーを実装するもう一つ「とても大きな理由」があるのですが、それについては後の連載で説明します。ここでは、アクセサーの存在と書き方を覚えておいてください。
Copyright © ITmedia, Inc. All Rights Reserved.