私は関連する質問について多くの類似の投稿を見つけました。この回答はtaylonrで終わりましたが、私のシナリオにはあまり答えていませんでした。どのようにOOとSOLIDの原則を使用してこれをより良く設計できますか?
は、私はインターフェイスを持っていると仮定します
public interface IShape
{
decimal GetArea();
}
私は、このインタフェース
public class Rectangle : IShape
{
public decimal GetArea()
{
...
}
}
public class Triangle : IShape
{
public decimal GetArea()
{
...
}
}
public class Circle : IShape
{
public decimal GetArea()
{
...
}
}
を使用して3つのクラスを作成し、私は今int GetNumberOfSides()
機能(またはにのみ関連し、いくつかの他の機能を追加したいです私のIShapeの一部)。明らかにこれはCircleクラスには関係ありません。私がList<IShape>
のオブジェクトを持っていて、関連するIShapesでこの関数を繰り返し呼び出す場合、オブジェクト指向の設計原則を使ってどうやってこれに対処しますか?
私はIShapeインターフェイスbool HasSides { get; set; }
にブール値を追加してこれのロジックを実行することができますが、GetNumberOfSides()
関数にアクセスするには特定のクラスにキャストする必要があります。私はこれが正しいとは思いませんが、これが正しいとは思いませんが、これをどうやって行うのかは分かりません。
ISidedShape
がIShape
から継承されていると考えましたが、私のリストの反復処理に戻って、この特定の方法がどのような形状を持っているかをどのように知っていましたか?
ご協力いただければ幸いです。
おかげ
「サークル」は、半円のような他の奇妙な形はどうでしょうか?それは合法的に1つの "側"と同様に1 "他の何か、あなたが側をどのように定義するかに依存します"。たぶん「面」はあなたが探している用語ではないでしょうか?この用語の名前がより適切であれば、モデリングがより理にかなっているかもしれません。 – David
私の例は最高ではなかったかもしれません。私は他の知識が必要な私の実際のシナリオを使わずに例を見つけるのに苦労していました。私は0を返すことについてあなたのポイントを得るが、それはどちらかといえば気分が悪い。 – user1244893
なぜそれは正しく感じませんか?それは完全に論理的です。 – jrahhali