オブジェクト指向の設計で問題が発生し、2 つの異なるクラスでコードが重複してしまいます。何が起こっているかは次のとおりです。
この例では、ゲーム オブジェクト間の衝突を検出したいと考えています。
共通メソッド (checkForCollisionWith など) を保持する基本 CollisionObject と、基本クラスを拡張する CollisionObjectBox、CollisionObjectCircle、CollisionObjectPolygon があります。
設計のこの部分は問題ないように見えますが、私を悩ませているのは次のとおりです。
aCircle checkForCollisionWith: aBox
Circle サブクラス内で円対ボックスの衝突チェックを実行します。逆に、
aBox checkForCollisionWith: aCircle
Box サブクラス内でボックスと円の衝突チェックを実行します。
ここでの問題は、Box クラスと Circle クラスの両方にあるため、Circle と Box の衝突コードが重複していることです。これを回避する方法はありますか、またはこの問題に間違った方法で取り組んでいますか? 今のところ、重複コードをすべて含むヘルパー クラスを用意し、重複を避けるために aCircle および aBox オブジェクトから呼び出します。ただし、これに対するよりエレガントな OO ソリューションがあるかどうかは興味があります。