💬

オブジェクト指向について

2021/05/19に公開

オブジェクト指向が生まれた背景

初心者向けの「オブジェクト指向」についての記事で、動物をクラスとし犬や猫を派生クラスとして解説したものなどを時折見るが、そうすることによってどのようなご利益があるのかがわからないことが多い。そこでこの記事ではそれが生まれた背景から解説することでどのようなご利益(何がうれしいのか)があるのかを紹介する。

複雑さの抑制

アセンブラ言語からC言語などの高水準言語に移りソフトウェア開発の手法として、構造化プログラミングなどが提唱されてきたが、ソフトウェアが大規模になるに従って複雑さがそのまま開発の難易度を押し上げることとなり、複雑さを解決するパラダイムが求められた。

例えば規模が大きくなるにしたがって扱うデータの種類や量も増えてくるため、それらの状態を考慮しなければならず、エンジニアがいちどきに把握できる情報を上回ってしまう。このような状況を打開するために生まれたのが、一度に把握する情報の量を抑制するデータ隠蔽という考え方だ。

データ隠蔽(抽象データ型)

ソフトウェアで必要なのは、入力に対してどのような出力が帰ってくるかであって、利用者にとって出力までの途中の計算結果については知る必要はない。このようなデータや途中の計算結果とデータの処理方法を一つの入れ物に閉じこめてしまうのが、抽象データ型(Abstract Data Type)という概念だ。

抽象データ型を実装したのがSimulaと呼ばれる言語で、データとそれに対する操作をクラスと呼ぶ入れ物に閉じ込めた。現在のC++やJavaに引き継がれているクラスの誕生だ。

いったんクラスの実装が完了すると、クラスは部品として使いまわすことができ、部品を組み合わせてさらにこれを大きな部品を作ることができる。システムの構築に必要な部品が揃えば、これらを組み合わせることに集中できるため、大きなシステムを組上げることが容易になる。また変更が生じた場合も、多くは修正の範囲をクラスの中に閉じ込めることができるのだ。

例題:倉庫

ここで倉庫を例にとって考えてみよう。倉庫を使う人にとって必要なのは、倉庫にものを格納することと必要なものを取り出すことであり、倉庫の中がどうなっているかは利用者にとっては知る必要がない。

つまり利用者は倉庫の窓口に行って荷物の出し入れを頼み、倉庫の中の管理は倉庫番の役割としたのが抽象データ型のデータ隠蔽で、データ隠蔽しない場合には利用者が倉庫の中に入ってどこに格納するか、までを行うことになる。

もし倉庫の中の構造を変更しようとすると、利用者がその変更にまで対応しなければならなくなるが、倉庫の構造をクラスで隠蔽することで、利用者は倉庫の中の構造を把握する必要は無くなり、倉庫の構造を変更する場合もクラスの中での変更に局在させることになるため保守性も高くなる。

抽象データ型の利点をまとめると以下のようになる

  • 再利用
  • 保守性

続く

Discussion