作成日 2007/5/20
最終更新日 2008/6/1
[ Japanese | English ]

オブジェクト指向の限界

 ここでは、オブジェクト指向の限界というか、オブジェクト指向では実現できないことについて説明します。
 やはり、オブジェクト指向で設計する際は、その限界についても頭に入れておかないと駄目です。

 オブジェクト指向の限界、オブジェクト指向では実現できない設計とはどんなものがあるのか?を調べる方法はアスペクト指向 (※1)の勉強をすること(※2)です。
 アスペクト指向の勉強すれば、冒頭部分にオブジェクト指向の限界について書かれていると思います。

-----
※1:ここではアスペクト指向がどのようなものであるかは説明しません。
アスペクト指向やアスペクト指向型言語がどのようなものであるかを知りたい人は参考文献にリンクが張ってあるので、それを見るか、Googleで検索してください。
※2:もちろん、他の方法もあると思います。
他の方法で調べた場合、アスペクト指向の勉強をすることによってわかったオブジェクト指向の限界や欠点以外の、限界や欠点が見つかるかもしれません。

1.オブジェクト指向の限界
2.オブジェクト指向ではうまく設計できない例(ログ出力)
3.オブジェクト指向ではうまく設計できない例(アクセス制御)
4.参考文献など


1.オブジェクト指向の限界

 だるまがアスペクト指向を勉強して得た「オブジェクト指向の限界」について説明します。
 参考文献のリンク先を見てもらった方が早い気もするけど…。まあ、いいや。

 例えば、どっかのクラスにメソッドを定義して、中身をプログラミングするとしましょう。
 そのときに、本来のメソッドの処理ではない処理を書くことが少なくないです。
 例えば、ログ出力、権限チェック(※1)などですが、これらの処理はいろんなところに、記述する必要があるわけです。
 だから、実装するのが面倒だし(眠くなるし)、一度書いたら修正するのが大変です。
 
 このように、一箇所にまとめられない処理というか機能のことを横断要素と呼ぶみたいです。

 そして、その横断要素が出てくる場合(多くの場合そうなのですが)、オブジェクト指向で設計する際は、もう、きれいな設計は無理と割り切った方が良いと思います。
 無理なものは無理。
 実装工数や修正にかかる工数も半端ではないと腹をくくりましょう。
 

-----
※1:参考文献のリンク先にはもっと書いてあるんだけど、だるまにはこれしか理解できなかった…。ごめん。
ちなみに、ログ出力とアクセス制御についてはだるまも経験があります。
本当に大変です。
このページのトップへ

2.オブジェクト指向ではうまく設計できない例(ログ出力)

 オブジェクト指向ではうまく設計できない例としてログ出力があるので、これについて説明します。
 え?ログ出力の例は他のサイトでも説明しているから新鮮味がないって?
 まあ、そうだけど、とりあえず、一番簡単なものから説明しないと駄目かなぁと思った。

 オブジェクト指向では例えば、図1のようなログクラスを作ることはできます。
 (まあ、オブジェクト指向でなくとも、ログを出力する関数を作ることはできますよね。)

図1 ログクラスの例(※1)

 で、問題は、このログクラスを使う側です。
 例えば、ログを出力したい箇所が1000個あったら、その1000箇所すべてにLoggerクラスのlogメソッドを呼び出す処理を書かないといけません。

-----
※1:これはだるまが適当に考えたログクラスの例です。
javaであれば、実際にログ出力をする場合は自分で作るのではなく、java.util.loggingパッケージを使った方が良いと思います。

このページのトップへ

3.オブジェクト指向ではうまく設計できない例(アクセス制御)

 アクセス制御の例についても説明します。
 あ、アクセス制御と言っても、クラス図の可視性(+:public、-:private…)のことではないです。
 たとえば、部長クラスの人はあるデータの読み書きができるけど、平社員は読むことしかできないようにするというもの(ロールベースのアクセス制御)。

 オブジェクト指向では(オブジェクト指向でなくても)、あるユーザが所属しているグループ名を調べて、あるデータに対するアクセス権があるか調べるメソッドは作れます。

 で、問題はアクセス権をチェックするメソッドを使用する箇所の個数だよ。 
 例えば、あるクラスにデータが50個あって、そのアクセスメソッドがgetterとsetterで2つづつあり、そのアクセスメソッドすべてにアクセス制御をかけたら、100箇所にアクセス権チェック処理を組み込まないといけない…。
 アクセス制御をしたいのはアクセスメソッドに限らず、コンストラクタや通常のメソッドもだからね…。
 これは、つらいなぁ。

このページのトップへ

4.参考文献など

 このページを作成するのに参考にしたページです。
 ただし、だるまは、このページを作成するにあたり、これらのページを100%理解してから作成したわけではない(おいおい。)です。
 間違い(リンク先のページではなく、このページに)があったら、ごめんなさい。

番号

リンク先の名称

リンク先の説明

リンクした日

1 @IT:アスペクト指向のバリエーション解説(1) アスペクト指向についての解説 2007/5/20
2 @IT:アスペクト指向のバリエーション解説(5) アスペクト指向の適用例(つまりオブジェクト指向ではうまく設計できない例)が書かれています。 2007/5/20
3 横断的関心事 - アスペクト指向なWiki 横断的関心事についての説明があります 2007/5/26

番号

著者名

書籍名

ISBN

1 千葉 滋 アスペクト指向入門 -Java ・ オブジェクト指向から AspectJプログラミングへ 978-4774125817

 
Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
JavaおよびJavaに関する商標は、米国およびその他の国における米国Sun Microsystems, Inc.の商標または登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。