なんか最近「オブジェクト指向」関係の記事や書籍紹介を目にするような気がするのは、新学期が始まったせいなのかな。
オブジェクト指向がよくわかんない、という人は、いったんオブジェクト指向を忘れて、「システム」とはなんぞやという基本の基本を確認することをおすすめする。
Wikipediaのシステムの項(https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)の図(https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:System_boundary.svg)を見てほしい。
外部環境(Surroundings)において境界(Boundary)が定義されるその内部がシステム(System)なのである。
境界こそがシステムを具現化するものであり、要するにシステムの内部はおいといて、境界を通じてシステムの内部と外部でどのような入出力(インターフェース)があるかのを定義するのがシステム定義なのである。
これが決まってはじめて内部をどのように構築するのか、サブシステム(コンポーネント)間の連携をどうするのか、という話になる。
英語版のページにはしっかりとこう記載されている。
We scope a system by defining its boundary; this means choosing which entities are inside the system and which are outside – part of the environment.
日本語版の項にはなぜか訳されてないが、これが本質的な定義であり、システムときいたら即「境界」と思い浮かべるべきである。
そんなの当たり前じゃんと思われるかもしれないが、たぶんシステム関係に携わっている多くの人が、「システムって何?」ときかれたら、
「システムはいくつかの要素によって構成されるもので、その全ての要素は、他の要素に影響を与え・・」
と、いきなりシステム内部の機能的な説明を始めると思う。まず境界やインターフェースの話から始める人はむしろ少数だろう。
そうでなければ、世の中に数多あるシステムの「要件定義」「システム設計」「機能仕様書」などトップレベルでの記述はもっと明確かつトップダウンになってなければおかしい・・・
話をオブジェクト指向に戻すと、
最近話題になっている記事などは、なるほどよく噛み砕いているなあ、とは思うんだけれども、言語・実装・モデルといったものにひきずられてしまって、本来は広い分野や局面における「システム構築の手段」の広い概念であるはずのオブジェクト指向、実装例や用語から再度説明するという堂々巡りをしているという感じがする。
システムの本来の意味が身についたら、オブジェクト指向で説明されているあれやこれやが、このシステムを実現するため手段にすぎず、効率的にシステムを構築し、サブシステムの再利用を容易にするための仕組みや方法論をあるていどまとめて総称したものであることが自然に理解できると思う。