ヨーヨー問題

ソフトウェア開発におけるヨーヨー問題アンチパターンとは、プログラムを読んで内容を理解しようとしたときに、継承関係が深すぎる・複雑すぎるなどの理由で、たくさんのクラスを行ったり来たりしないと処理フローが追えない状況のことである。この問題はオブジェクト指向プログラミングでよく発生する。「ヨーヨー問題」という名前は、プログラマが注目している場所がヨーヨーの動きのように上下することから来ている。Taenzer, Ganti, Podarらは、この問題を特に取り上げて、「メッセージツリーの内容を理解しようとする際、ヨーヨーの上に乗っているかのような感じがすることがよくある」と説明している。

オブジェクト指向プログラミングにおける「継承関係のグラフの深さはできるだけ浅い方がよい」という慣習に従うことで、この問題をある程度は回避できる。また、継承よりコンポジションを使用することも、プログラマが複数のクラスを頭に入れておく必要があるという点は変わらないが、強く推奨される。

より一般には、あるコンセプトを理解しようとする際に、複数の情報源を行ったり来たりする必要があるという状況を指して「ヨーヨー問題」と言うこともある。

また、継承の階層構造のレイヤー分けをドキュメント化しておいて、プログラマの理解に必要な情報を1箇所に集めておくなど、オブジェクト指向設計のテクニックを利用することでも、この問題の影響を軽減できる。

 関連項目 
 複雑性
 Hrair limit
継承 (プログラミング)
リスコフの置換原則
仮想継承

 参考文献 

Category:コンピュータに関する法則
Category:オブジェクト指向
Category:アンチパターン