netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2007-05-31 [長年日記] ▲
_ [Java][論文] コンストラクタは引数なしが使いやすい ▲
Jeffrey Stylos, Steven Clarke: Usability Implications of Requiring Parameters in Objects' Constructors. Proceedings of ICSE 2007, pp. 529-539 [IEEE site]
Brian Ellis, Jeffrey Stylos, Brad Myers: The Factory Pattern in API Design: A Usability Evaluation. Proceedings of ICSE 2007, pp.302-312 [IEEE site]
いわゆるクラスライブラリ,API の使いやすさを評価しようという人々による論文2本です.
前者のほうは,何らかの引数が必要なコンストラクタを使うコードと,そうでないコード(引数なしで new した後に setFoo などとしてパラメータを与えるもの)とでどちらが使いやすいのか(短時間で使えるか),という比較を行っていて,後者のほうは,Abstract Factory って本当に分かりやすいのか,というのを調べています.
開発者は,コードを書くときに,とりあえずデフォルトコンストラクタの存在を仮定して new しようとし,コンパイルエラーが起きたのを見てから色々調べ始める,というパターンが多かったようです.なので,パラメータが必須なコンストラクタしかないクラスを使うのには,デフォルトで動くクラスを使う場合よりも時間がかかっています.
パラメータが必須ではない(デフォルト値つき)コンストラクタの場合は,与えるべきパラメータの組み合わせを理解することができ,それなりに便利なようです.
インタビューの結果によれば,実験対象となった開発者たちは,new してから setter を呼び出すほうが初期化の柔軟性が高くてうれしい,また,プロパティの値をセットしていく途中で適切なエラーコードを返せる(コンストラクタだと例外を投げるしかない)ことも良い,と答えていたようです.
Abstract Factory の場合は,コンストラクタを呼ぼうとする → コンストラクタが protected だからエラー発生 → 「サブクラスのために protected で用意してるよ」という決まり文句のコメントを見てサブクラスを探索 → でも見つからない → ようやくファクトリメソッドの存在に気づく というようなパターンにはまって時間を消費する場合があるようです.普通のコンストラクタで対応できるときはそうすべきだ(意味なく Abstract Factory パターンを導入すべきではない),と指摘しています.