Modularity and Modularity Properties, or Design Choice

モジュラリティの向上と設計上の選択との関係は?


そもそも モジュラリティ とは? については「デザイン・ルール」をぱっと調べても載っていなかったので省略。


質問を変えて モジュラリティが向上した という視点から考えてみる。


Hannemann と Kiczales は、AspectJ によって GoFデザインパターンを実装することでモジュラリティが向上したと報告している。向上は、locality, reusability, composability, and (un)pluggability といった、モジュラリティに関連する4つのプロパティの視点から述べている。

AspectJ implementations of the GoF design patterns show modularity improvements in 17 of 23 cases. These improvements are manifested in terms of better code locality, reusability, composability, and (un)pluggability.

疑問は、設計上の選択肢における決定にこれらのプロパティがどう影響を与えるのか、ということ。


まず、「モジュラリティが向上した」というのをどう解釈すればよいのだろう? 

Hannemann らの例でいえば、Java バージョンの実装と AspectJ バージョンの実装が選択肢としてあることになる。そして、AspectJ バージョンの実装(設計)の方が、モジュラリティが高い。

これは、AspectJ バージョンが Java バージョンを置き換えることになるのだろうか? Hannemann らはそうは主張していない(と思う)。また、自分の経験上、完全に置き換えることにはならない。例外が存在する。

また、従来の OO バージョンのパターンを適用するかどうかを決定する場合には、いわゆるフォース(トレードオフ)が影響する。


次に、平鍋さんは『「テストしやすい」ことが、良い設計』or『Ease of Testing(EoT:テスト容易性)の高い設計が、よいオブジェクト指向設計である』と主張している。

AOP のコミュニティでは、アスペクトをどうテストするのかについては、まだまだ良く理解されていないテーマである。従来の JUnit では、アスペクトを適切にテストできないかもしれない。そのため aUnit などのテスティングフレームワークが提案されている。

したがって、AspectJ バージョンのデザインパターンの実装は、Java のバージョンよりもモジュラリティを向上させるかもしれないけれど、AspectJ バージョンにおける EoT は Java バージョンの実装よりも(少なくとも一時的に)低いかもしれない。

この場合、平鍋さんの意見にしたがうならば、Java バージョンの実装(設計)を選択することになる(もちろん、選択にはその他の色々な要因が関係する)。このことは、モジュラリティの向上という議論やそれらのプロパティの役割についても疑問を生む。


ただし、平鍋さんの記事ではモジュラリティという用語を使っておらず、また EoT がモジュラリティ向上に影響するプロパティかどうかは不明である。


疑問のまとめ:

  • モジュラリティの向上は、設計に関係するいくつかのプロパティで表現できる? もしそうなら、上記の4つ以外にどんなプロパティがある?
  • モジュラリティ向上に関連するプロパティと、設計における選択との関係は? 設計におけるある選択肢をその他の選択肢よりも優先して選択する、ということは、モジュラリティのプロパティの視点から説明できる? また、プロパティ間には、優越がある?

たとえば、ある設計 A は B よりも localityと composability が優れているけれど、 reusability については B が優れているので B を選択する、ということはありえる?

  • モジュラリティの向上には影響を与えないけれど、設計上の選択肢には影響を与えるプロパティ(or 要因)は存在する? もし存在するなら、モジュラリティのプロパティと設計に影響を与える要因との関係は?

たとえば、ある設計 A は B よりも localityと composability が優れているけれど、 EoT については B が優れているので B を選択する、ということはありえる?


参考:

キム・クラーク (著), カーリス・ボールドウィン (著), 安藤 晴彦 (翻訳)

デザイン・ルール―モジュール化パワー

http://www.amazon.co.jp/exec/obidos/ASIN/4492521453/

Jan Hannemann and Gregor Kiczales.

Design Pattern Implementation in Java and AspectJ

Proceedings of the 17th Annual ACM conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), pages 161-173, November 2002.

DL:http://www.cs.ubc.ca/~jan/papers/oopsla/oopsla2002.html

「テストしやすい」ことが、良い設計(EoT=Ease of Testing)
http://blogs.itmedia.co.jp/hiranabe/2005/08/post_e66c.html

Cristina Videira Lopes and Sushil K. Bajracharya

An Analysis Of Modularity In Aspect Oriented Design

AOSD'05

DL: http://www.isr.uci.edu/~lopes/documents/aosd%2005/index.html

Kevin Sullivan, William Griswold, Yuanyuan Song, Yuanfang Cai, Macneil Shonle, Nishit Tewari, Hridesh Rajan

Information Hiding Interfaces for Aspect-Oriented Design

In the proceedings of the Joint 10th European Software Engineering Conference and 13th ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE 2005), 5-9 Sept 2005, Lisbon, Portugal.

DL: http://www.cs.virginia.edu/~yc7a/Publications.htm

Cristina Videira Lopes and Trung Ngo

Unit Testing Aspectual Behavior

Workshop on Testing Aspect-Oriented Programs

DL:http://www.isr.uci.edu/~lopes/documents/wtaop%2005/index.html