ObjectSquare [1999 年 6 月号]

[オブジェクト指向は本当に「オブジェクト」指向か?]


1.オブジェクト指向かクラス指向か?

みなさんは「オブジェクト指向アプローチって本当にオブジェクト指向なのだろうか?」と考えたことはありませんか?
もう少し正確に書くと「オブジェクト指向アプローチは、通常インスタンスを意味するオブジェクト指向というよりも、クラス指向アプローチと呼んだ方が適切ではないだろうか?」という疑問です。

なぜなら、私たちが実際にオブジェクト指向によるシステム開発をするときに、最初に行うのは「クラスの導出」です。その後「クラス図」を作って、最終的なコードも「クラス」の単位で記述します。もちろんクラスだけでなく、オブジェクトを列挙したり、オブジェクト図を作ることも行いますし、ソフトウェアが実行される単位はオブジェクトです。またパッケージやユースケースが重要と考える方もおられるかもしれません。しかし私にはやはりクラスが一番の主役のように思えます。
またSmalltalkやJAVAのクラスライブラリでは、継承階層の最上位はObjectですが、これも実に「Objectインスタンス」ではなく「Objectクラス」なのです。

「別に名前の定義などどうでもいいじゃないか」と言ってしまえばそれまでですが、私には以前からこの「オブジェクト指向アプローチ」という名前がずっと気になっていました。そして漠然とした違和感を感じていました。というよりも正確に言うと、私には「オブジェクト指向アプローチ」が、実は「クラス指向アプローチ」と呼んだ方が適切なように感じられていたのですが、その理由を自分自身ではっきりとうまく説明できなかったのです。

昨年「アナリシスパターン」という本の日本語訳が出版されました。この本は非常に難解でしたが、そこに紹介されているいくつかのモデルや、多重分類、動的分類という概念を理解できたとき、それまで漠然と感じていたこの違和感の正体をはっきりと整理することができ、目から鱗が落ちる思いをしたものでした。

今回は、この多重分類と動的分類について紹介するとともに、オブジェクト(インスタンス)とクラスの関係について考察してみたいと思います。


© 1999 OGIS-RI Co., Ltd.

Index

Next