Loading article…
ソフトウェア開発において、ヨーヨー問題は、プログラマがプログラムの制御フローを追うために、継承グラフが非常に長くて複雑なプログラムを読み理解しようとして、多くの異なるクラス定義の間を行ったり来たりしなければならない場合に発生するアンチパターンです。これは、オブジェクト指向プログラミングの文脈で最もよく見られます。この用語は、プログラマの注意が揺れ動く様子を、おもちゃのヨーヨーの上下運動に例えたことに由来します。Taenzer、Ganti、およびPodarは、この問題をその名で説明し、「このようなメッセージツリーの1つを理解しようとすると、ヨーヨーに乗っているような感覚になることがよくあります」と述べています。[ 1 ]
オブジェクト指向プログラミングの多くの実践では、この問題を回避するため、継承グラフをできるだけ浅くすることを推奨しています。継承の代わりにコンポジションを使用することも強く推奨されますが、それでもプログラマーは複数のクラス定義を同時に把握しておく必要があります。
深い階層構造はコードの臭いであり、コード再利用のためのサブ分類の兆候である。[ 2 ]
より一般的に言えば、ヨーヨー問題とは、ある概念を理解するために、人が様々な情報源を絶えず切り替え続けなければならない状況を指す場合もある。
全体的な動作を損なうことなく、これらの階層構造を平坦化するためのコードリファクタリング手法はいくつか存在する。
継承階層の各層を文書化するなどのオブジェクト指向設計手法は、プログラマが理解する必要のある情報を一箇所に集約するため、この問題の影響を軽減することができる。