目次
複雑なものを一度に理解しようとしても、なかなか難しい。
子供のとき、手に取ったおもちゃがどういう仕組みで動いているのか知りたくて、分解してみた、という経験がある人も多いと思う。
人は、複雑なものを理解するとき、それを小さく分解していく。 理解できるまで小さくなったら、理解できた小さいものを再び組み合わせて大きくしていく。 この過程を経ることにより、複雑なシステムを理解できるようになる。
分解といっても、ただやみくもに小さくしていくのでは、統一性に欠けるし、元に戻らないかもしれない。 おもちゃを分解したはいいが、結局元に戻らず壊れてしまった、という経験もまた、あるかもしれない。 それでも中がわかったのなら良いのかもしれないが、せっかく仕組みを理解したおもちゃでもう遊ぶことはできない。
複雑なシステムの多くは「階層構造」をしていることが知られている。(階層構造になっていない複雑なシステムも存在する)
この階層構造には、2種類が存在する。 Part of階層と、Is a階層である。
自動車というのは、複雑なシステムである。非常に多くの部品が集まって1台の自動車を構成している。前節の特徴の1.によれば、自動車システムは階層の形を取っているはずである。
では、どのような階層を構成するだろうか?
下の図は、自動車を構成する部品によって階層構造を作ってみたものである。
この図で行けば、自動車はインテリア系、電気系、駆動系、シャーシ系の4つの部分からなり、さらにインテリア系はシート、ルーム灯、オーディオの3つの部分からなっている。
このような「部分からなる」という階層関係は、part of 階層と呼ばれる。
これに対して、たとえばエンジンについて考えれば、
のような図を考えることができる。これも階層構造をあらわしているが、エンジンがガソリンエンジンとディーゼルエンジンの2つの部分から構成されているというわけではなく、エンジンにはガソリンエンジンとディーゼルエンジンの2種類があることを表す。言い換えれば、ガソリンエンジンとディーゼルエンジンは両方ともエンジンである、ということを意味する。
このような「~である」という階層関係は、is a 階層と呼ばれる。
part of 階層は、システムの論理的な構成を表し、is a 階層は、システムを構成する要素間の継承関係を表している。part of 階層のことをオブジェクト構造、is a 階層のことをクラス構造と呼ぶこともある。
そしてこれら2つの構造をまとめてシステムのアーキテクチャと呼ぶ。
このようにして、複雑なシステムのアーキテクチャを構築することが、そのシステムを理解するための方法となる。