オブジェクト指向システム分析/設計 Q&A

佐原伸

佐原伸 = Shin Sahara, ss@shinsahara.com
URL=http://shinsahara.com/
ゥ copyright 1996 Shin Sahara

 

はじめに

このは、オブジェクト指向システム分析/設計に関する教科書を読んで、 実際のプロジェクトに適用しようと思っているが、今一つ分からないという読者のために書きました。 私は、オブジェクト指向についてのコンサルティングやセミナーを行っていますが、 多くの方がオブジェクト指向について「どうも今一つ分からない」と思っていると日頃感じています。

分からないのには理由があるのです。それは、ある誤解から生じています。 「オブジェクト指向技術は今までとは異なる新しい技術だ」という誤解です。 それに伴って、「今まで構造化分析/設計を勉強していたが、 これからはオブジェクト指向分析/設計だ」という声も良く耳にします。 ところが、オブジェクト指向技術は20年ほど前から世の中にあった、決して新しくはない技術ですし、 構造化分析/設計はオブジェクト指向分析/設計と9割くらい共通の技術なのです。 従って、多くのオブジェクト指向技術の教科書は、構造化分析/設計や構造化プログラミングや、 その基盤になっているソフトウェア工学やソフトウェア科学、 さらにはその基礎である数学について「読者は知っている」という前提で書かれていたのです。 すなわち、オブジェクト指向技術を理解するには、 ソフトウェア工学・ソフトウェア科学・数学などの知識が必要になるのです。 オブジェクト指向技術の教科書に出てくるのは、それらの知識以外の「新しい技術」だったわけです。 これでは分からないのも当然です。

そこで、本書はQ&Aの形を取りながら、今までのセミナーやコンサルティングで出会った疑問に答えつつ、 オブジェクト指向技術の基礎となるソフトウェア工学・ソフトウェア科学についても説明するようにしました。 いわば、オブジェクト指向技術の皮を着たソフトウェア工学の教科書を目指したわけです。 さすがに、ページ数の制約と能力の限界とで、数学の説明まではできませんでしたが、 文中にある参考文献を参照して頂ければ、オブジェクト指向に必要な数学についても理解できるでしょう。

参考文献は、なるべく日本語で手に入るものを紹介しました。 従って、英語の参考文献が出てくる場合は、日本語の参考文献は「恐らく」存在しないということです。

本書では、数式や仕様記述言語で書いた仕様やプログラムについて、記号や文法の説明なしで記述しています。 必要なところは、どのような意味か日本語で説明を加えています。 このようにしたのは、数式などを日本語で置き換えると、冗長になり、かえって分かりにくくなると思ったからです。

第1章は、オブジェクト指向の考え方を説明していますが、 「オブジェクト指向の概念」が分かっている方は読む必要はありません。

第2章は、オブジェクト指向方法論がなぜ必要なのかという説明と各方法論の比較です。 方法論と関係の深いCASEについても触れています。

第3〜5章は、それぞれオブジェクト指向分析/設計/プログラミングの各工程の疑問点の説明です。 ここでは、方法論として一応OMTを想定し、プログラミング言語はSmalltalkを想定しました。 今のところ、最も実績のある方法論と言語だからです。ただし、OMTだけでなくほとんどの方法論で、 仕様記述の方法が曖昧なため、形式的仕様記述言語RSL(RAISE Specification Language)を流用して説明しています。 RSLを全部説明するとそれだけで一冊の本になってしまうため、 本書ではRSLの雰囲気を理解してもらえれば良いという目標にしています。

3章では、オブジェクト指向のモデルやプログラムの評価のためのMetricsについても説明しました。 分析や設計が「これでよい」と言えるためには、このようなMetricsが必要になります。

4章では、データ構造とアルゴリズムをかなり説明しています。 オブジェクト指向設計の教科書にはほとんど出てこないのですが、 データ構造とアルゴリズムが分からないと有効な設計ができないためです。

5章では、表明に関して少し説明しました。 これもオブジェクト指向プログラミングの教科書にはあまり出てこない話題ですが、 信頼性の高いプログラムを作るには必須の機能なのです。 また、通常のオブジェクト指向言語よりも手っ取り早くプログラムを作ることのできる コンポーネントウェアについて説明しました。

第6章は、オブジェクト指向プロジェクトの管理について説明しました。 プロジェクト管理は、オブジェクト指向に限らずどのプロジェクトにも有効なノウハウが多いので、 このあたりを説明しています。コストの見積は、ファンクション・ポイントとCOCOMOを使って説明しています。

第7章は、オブジェクト指向の教育について説明しています。 ここでは、オブジェクト指向だけでなく、 そのために必要な数学やソフトウェア科学やソフトウェア工学のカリキュラムを紹介しています。 カリキュラムだけを見るとかなりハードなようですが、学校時代の「記憶中心」の勉強方法と異なり、 我々の勉強方法は「カンニングでも何でもありで、教科書のどこに何が書いてあるか頭に入れておき、 必要なときにそこを読んで、ともかく使えればよい」というものですから見た目ほど大変ではありません。

オブジェクト指向分析/設計や形式的仕様記述言語や段階的詳細化(Refinement Calculus)の 勉強と実践を通して分かってきたことがあります。それは「ソフトウェアを作るのは難しい」ということです。

昔、Fortranでプログラムを作っていた頃、 「フローチャートさえ書ければ、どんなプログラムでも簡単に作れる」と思った時期がありましたが、 やがてそれは幻想であることが分かってきました。UNIXやCを使い始めた頃にも「 これでほとんどのプログラムは簡単に作れる」と思ったのですが、これも幻想でした。

およそどんな小さなプログラムでも、正しく作るのは非常に難しい作業です。 そのためには、あらゆる技術・ノウハウを動員しなければなりません。 オブジェクト指向分析/設計は、再利用性があり保守性の高い高品質のプログラムを作るための有力な武器ですが、 それを使う人の能力を増幅する武器でしかありません。自分の能力を磨かないと活きてこないのです。 本書が、読者の能力を磨くためのきっかけとなれば幸いです。

本書を執筆するにあたって、オブジェクト指向技術については、 多くのことを同僚の酒匂寛青木淳渡邊克宏の各氏に学びました。 また、形式的仕様記述言語については(日本とともに)山崎利治氏にご指導いただきました。 特に、実用的な規模のシステムに使用可能な形式的仕様記述言語として、RSLを紹介して下さったことに感謝しています。 また、同僚の澤田寿実・中川中両氏にも、代数的仕様記述言語OBJ3に関してご指導いただきました。 段階的詳細化に関しては、奈良先端科学技術大学院大学の荒木教授に助言を頂きました。

北陸先端科学技術大学院大学の 二木教授と国連大学ソフトウェア技術国際研究所のビョルナー所長と SRAの上司である岸田孝一氏には、金沢及びマカオで、 形式的仕様記述の技術を勉強する機会を与えていただいたことを感謝します。

1995年5月19日 武蔵野市にて
佐原伸