昨今、オブジェクト指向という言葉を聞くことがあります。
なんだかよくわからないけど、ちょっと魅力的なこの言葉の意味を、その概念を探っていきたいと思います。また、この紙面だけでオブジェクト指向を説明することは、不可能であります。よって、ここでは重要語句をノート的に書いていき、おおよそどんな感じのものかということに、重点を置きます。ですから、C++でのクラスに関してなどのプログラム言語の説明などは、タッチしませんのでご了承句ださい。このオブジェクト指向は、もともとは、ソフトウエア開発におけるシステム設計の過程で生み出されたようです。
「コンピュータのプログラム作成の方法論の一つ。独立した情報処理を行う単位であるオブジェクトをプログラムの対象とみなし、オブジェクト間のメッセージのやりとりによって情報の処理を行う。」
と、いうことです。
このオブジェクト指向の発想原点は、現実の世界のモノとモノ同士の関係をそのままソフトウエアで表現することによって、実世界のしくみをコンピュータ上に再現しようとするものであります。そうなると、現実に近い形でシステム構築をあらわすことによって、その構造がより直感的でわかりやすくなります。 その結果、人間の間違いが少なくなり、プログラムが理解し易くなって、複数の人間が開発するソフトでも、開発しやすくなります。
これまでは、構造化手法というものであり、機能がコンピュータ上での実現単位であることから、分析・設計段階でも機能中心の問題把握が一般的に用いられてきた。しかし、これでは、だんだんわかりづらくなり、大型のシステムや複人数での開発になると、なおさら混乱を生じることになっていくる。
そこでいう弊害とは、主に4つある。
この点を、オブジェクト指向は、次のように改善した
特に、(2)に関しての概念は、他の分野でも用いられることがあり、例えば、野球の試合の勝敗だけを知りたいときは、その試合の内容(ヒット何本とか投手がだれだったとか)の情報などは知る必要がなく、とにかく結果だけわかればよいといった感じです。(あまり正確じゃないけど)
基本用語:オブジェクト,クラス(インスタンス),属性,メッセージ,メソッド, 関係(関連,is−a,part−of)
基本概念:状態,抽象化,カプセル化,継承
応用概念:抽象クラス,多重継承,MIX−IN,多様性,動的結合,並行性, sub-typing, アクター理論,放送,委譲,Continuation
オブジェクト指向には、次のような5つのメリットがあるといいます。
大きく開発の段階は、3つある。
第一段階 分析 :問題が何かを明らかにする
第二段階 設計 :問題をいかに解決するかを決定する
第三段階 プログラミング :解決法にしたがって実現する
しかし、このオブジェクト指向も、いまのところ発展途上である。具体的な主な4大手法もそれぞれ一長一短を持っている。というのも、オブジェクト指向の根幹である、クラス概念というものが、現在の段階ではどうしても個人の能力に依存され、画一的な方法が、はっきりしていない。
これからのオブジェクト指向環境は必然的に膨大なオブジェクト群を含み多種多様なアプリケーションの混在する環境となっていくと予想されます。これらの開発環境で効率的な作業をおこなうためには、オブジェクト管理法が重要ですが、現状は「クラスと継承」と「ユーザによる分類」などの情報を利用しています。
Smaltaik-80 艫vロトタイピングを重視した、個人開発用の純粋なオブジェクト指向言語 C++ 芟率を重視した、工業生産用のハイブリッドなオブジェクト指向言語 Eiffel艫\フトウエアの正しさを重視した、工業生産用の純粋なオブジェクト指向言語
将来的な理想としては、ユーザのほとんどが、特定の知識がなくても、自分のほしいソフトを自在に作成できるような環境である。そのためにも、このオブジェクト指向をはじめ、ソフトウエアを支える概念が成長して行くことを期待したい。
CASE(Conputer Aided Software Engineering)ツールはソフトウエア工学が提唱されて以来10年以上にわたって開発が進められてきたが、ここにきてようやく実用化の段階を迎えつつある。これは何といっても昨今のソフトウエア開発の短納期化や要求仕様の高度化により、開発作業の合理化が急務になってきたことによるところが大きい。 しかし、現在のCASEといえども、現状のツールのレベルはお絵描きツールのようなものであることは、否めない。
これからのオブジェクト指向CASEとは、知的なソフトウエア開発環境でなければならない。知的なソフトウエア開発環境(知的CASE)とは、人間とコンピュータの協調作業を効率良く支援する環境である。その環境においては、すべての作業をコンピュータがおこなうのではなく、本質的に知的な作業のみを人間が行い、コンピュータはその知的な作業を補ったり、誘導するなどのその他のさまざまな雑務を担当することが望まれる。
当初は、C++言語も含めたフォーラムの予定でしたが、結局、オブジェクト指向概念の理解のみになってしまいました。私の非力さを実感してます。すいません。でも、これに関してやってみると、単にソフトウエアに用いるだけのものではない手法であり、多くの実戦的な概念として有効であるとが分かりました。本当に、これを実社会でも使えれば効率のよい整理法になると思います。勉強不足で、間違っている事項があるかもしれませんが、そのときはお許しください。
詳しいことは、下記の本が非常に分かりやすいので、是非お勧め致します。
また、いまから言語を始めようかと考えていて、C言語かC++のどっちからやったほうがいいかと考えている人がいたら、私は迷わずいきなりC++を勉強することを勧めます。そして、オブジェクト指向の概念をしっかりと自分のものにすれば、必ずや思いどおりのプログラムを設計できることでしょう。
以上 担当:(滝口)