SOLID inclut le principe de substitution de Liskov qui a la notion que «les objets d'un programme doivent être remplaçables par des instances de leurs sous-types sans altérer l'exactitude de ce programme».
Étant donné que les classes statiques avec des méthodes statiques (un peu comme la Math
classe) n'ont pas du tout d'instances, mon système est-il considéré comme SOLIDE si j'ai des classes statiques avec des méthodes statiques?
language-agnostic
solid
static-access
Pacerier
la source
la source
Réponses:
LSP s'applique au passage d'une instance d'une classe dans une méthode, à ce que la méthode fasse quelques trucs avec cette instance et produise souvent une sorte de résultat. Cela n'a pas d'importance pour les classes statiques car en C #, vous ne pouvez pas créer d'instance d'une classe statique.
Plus important encore, les classes statiques sont scellées et ne peuvent donc pas être héritées. Cela rend votre question sans objet pour C #.
Vous pourriez dire que les classes statiques sont toujours conformes au LSP car vous ne pouvez jamais produire une sous-classe qui violerait ce principe. Vous pouvez également dire que les classes statiques ne sont jamais compatibles LSP pour la même raison.
En Java, les classes statiques sont légèrement différentes. Vous ne pouvez pas marquer une classe de niveau supérieur comme "statique", donc si vous voulez créer une classe utilitaire similaire aux classes statiques de C #, vous devez la déclarer
final
et masquer son constructeur. Une fois que vous faites cela, cependant, ils se comportent de manière similaire à C # - vous ne pouvez pas les instancier ou les sous-classer. Vous pouvez déclarer une classe interne en tant questatic
, mais cela ne signifie pas la même chose qu'en C #: cela dénote simplement une classe de niveau supérieur imbriquée .VB.NET se comporte exactement de la même manière que C # dans ce cas, pour autant que je sache.
Vous n'avez pas mentionné si vous êtes intéressé par les autres principes, mais je vais quand même les inclure pour être complet.
S principe de responsabilité Ingle : une classe statique suivre facilement ce principe.
O stylo / principe fermé : les classes statiques étant scellées, elles ne peuvent jamais suivre ce principe. Principe de substitution
L iskov : comme ci-dessus.
Je principe de ségrégation nterface : ne s'applique pas à une seule classe, mais diviser une grande classe statique en petits, plus spécialisés pourraient être une étape vers suivant ce principe.
D principe d'inversion de ependency :classes statiques ne peuvent pas implémenterinterfaces,sortetoute classeutilisant cela dépendra toujours demiseœuvre tout ceexiste à l'époque. Les classes statiques violent donc ce principe.
Comme les classes statiques ne satisfont pas aux 5 critères, elles ne sont pas SOLIDES.
la source
Je ne classerais pas une telle classe comme orientée objet et je dirais donc qu'elle ne peut pas (et ne devrait pas essayer) de répondre aux principes de la conception orientée objet.
Ces classes sont simplement une solution de contournement à l'incapacité de fournir du code en dehors d'une classe dans des langages comme Java et C #. S'ils pouvaient l'être, ils devraient être définis comme des fonctions autonomes car ils ne tirent aucun avantage de l'orientation objet.
la source
Il convient de mentionner, puisque vous n'avez spécifié aucun langage, qu'en C ++, vous pouvez passer des classes qui n'ont que des membres statiques et accéder à ces membres via un modèle, et il est donc possible de remplacer une classe avec uniquement des membres statiques, et sans doute, les méthodes appelé forme c'est "interface".
la source