SOLIDには、 「プログラム内のオブジェクトは、そのプログラムの正確性を変更することなく、サブタイプのインスタンスで置き換えられるべきである」という概念を持つLiskov置換原則が含まれています。
静的メソッド(Math
クラスに少し似ている)を持つ静的クラスにはインスタンスがまったくないため、静的メソッドを持つ静的クラスがある場合、システムはSOLIDと見なされますか?
SOLIDには、 「プログラム内のオブジェクトは、そのプログラムの正確性を変更することなく、サブタイプのインスタンスで置き換えられるべきである」という概念を持つLiskov置換原則が含まれています。
静的メソッド(Math
クラスに少し似ている)を持つ静的クラスにはインスタンスがまったくないため、静的メソッドを持つ静的クラスがある場合、システムはSOLIDと見なされますか?
回答:
LSPは、クラスのインスタンスをメソッドに渡し、メソッドにそのインスタンスで何らかの処理を行わせ、多くの場合何らかの結果を生成することに適用されます。C#では静的クラスのインスタンスを作成できないため、これは静的クラスには関係ありません。
さらに重要なことに、静的クラスはシールされているため、継承できません。これにより、C#に関する限り、あなたの質問は意味がなくなります。
静的クラスは常にLSPに準拠していると言えます。なぜなら、その原則に違反するサブクラスを作成することはできないからです。同じ理由で、静的クラスがLSPに準拠しないと言うこともできます。
final
、コンストラクタを宣言して非表示にする必要があります。ただし、一度実行すると、C#と同様に動作します。インスタンス化やサブクラス化はできません。として内部クラスを宣言できますがstatic
、それはC#の場合と同じことを意味するものではなく、単にネストされたトップレベルクラスを示します。
私の知る限り、この場合、VB.NETはC#とまったく同じように動作します。
Sイングル責任の原則:静的クラスは簡単にこの原則に従ってください。
Oペン/クローズの原則:静的クラスが密閉されているので、彼らはこれまで、この原則に従うことができません。
L iskovの置換原理:上記のとおり。
私はインターフェイスの分離の原則をインターフェイスします:単一のクラスには適用されませんが、1つの大きな静的クラスをより小さく、より専門的なクラスに分割することは、この原則に従うための一歩です。
D ependency反転原則:それを使用して、任意のクラスは、常に時間に存在するものは何でも、実装に依存しますので、静的クラスは、インタフェースを実装することはできません。したがって、静的クラスはこの原則に違反します。
静的クラスは5つの基準すべてを満たさないため、SOLIDではありません。
私はそのようなクラスをオブジェクト指向として分類しません。したがって、オブジェクト指向設計の原則を満たすことはできません(しようとしてはいけません)。
これらのクラスは、JavaやC#などの言語でクラスの外部にコードを提供できないことに対する単なる回避策です。可能な場合は、オブジェクト指向から利点を得られないため、スタンドアロン関数として定義する必要があります。