SOLID incluye el principio de sustitución de Liskov que tiene la noción de que "los objetos en un programa deben ser reemplazables con instancias de sus subtipos sin alterar la corrección de ese programa".
Dado que las clases estáticas con métodos estáticos (un poco como la Math
clase) no tienen instancias, ¿mi sistema se considera SOLIDO si tengo clases estáticas con métodos estáticos?
language-agnostic
solid
static-access
Pacerier
fuente
fuente
Respuestas:
LSP se aplica a pasar una instancia de una clase a un método, hacer que el método haga algunas cosas con esa instancia y, a menudo, produce algún tipo de resultado. Esto no importa para las clases estáticas, ya que en C # no puede crear una instancia de una clase estática.
Aún más importante, las clases estáticas están selladas y, por lo tanto, no se pueden heredar. Esto hace que su pregunta sea discutible en lo que respecta a C #.
Se podría decir que las clases estáticas siempre cumplen con LSP, ya que nunca se puede producir una subclase que viole ese principio. También se podría decir que las clases estáticas nunca son compatibles con LSP por la misma razón.
En Java, las clases estáticas son ligeramente diferentes. No puede marcar una clase de nivel superior como "estática", por lo que si desea crear una clase de utilidad similar a las clases estáticas de C #, debe declararla
final
y ocultar su constructor. Sin embargo, una vez que haces eso, se comportan de manera similar a C #: no puedes crear instancias de ellos ni subclasificarlos. Puede declarar una clase interna comostatic
, pero eso no significa lo mismo que en C #: simplemente denota una clase anidada de nivel superior .VB.NET se comporta exactamente de la misma manera que C # en este caso, que yo sepa.
No mencionó si está interesado en los otros principios, pero los incluiré de todos modos para completar.
S principio de responsabilidad ingle : una clase estática seguir fácilmente este principio.
O lápiz / principio cerrado : como las clases estáticas están selladas, no pueden seguir este principio. Principio de sustitución de
L iskov : como arriba.
Me principio de la segregación Nterface : no se aplica a una sola clase, pero la división una gran clase estática en los más pequeños, más especializado que podría ser un paso para dar continuidad a este principio.
D principio ependency inversión : clases estáticas no pueden implementar interfaces, por lo que cualquier clase de usarlo siempre dependerá de lo que sea puesta en práctica existe en el momento. Las clases estáticas, por lo tanto, violan este principio.
Como las clases estáticas no satisfacen los 5 criterios, no son SÓLIDAS.
fuente
No clasificaría una clase como orientada a objetos y, por lo tanto, diría que no puede (y no debería tratar de) cumplir con los principios del diseño orientado a objetos.
Estas clases son simplemente una solución a la incapacidad de proporcionar código fuera de una clase en lenguajes como Java y C #. Si pudieran serlo, deberían definirse como funciones independientes ya que no obtienen ningún beneficio de la orientación a objetos.
fuente
Vale la pena mencionar, ya que no especificó ningún lenguaje, que en C ++ puede pasar clases que solo tienen miembros estáticos y acceder a esos miembros a través de la plantilla, y por lo tanto, es posible sustituir una clase con solo miembros estáticos, y posiblemente, los métodos llamado forma es "interfaz".
fuente