O SOLID inclui o princípio de substituição de Liskov, que tem a noção de que "objetos em um programa devem ser substituíveis por instâncias de seus subtipos sem alterar a correção desse programa".
Como as classes estáticas com métodos estáticos (um pouco como a Math
classe) não possuem instâncias, meu sistema é considerado SOLID se eu tiver classes estáticas com métodos estáticos?
language-agnostic
solid
static-access
Pacerier
fonte
fonte
Respostas:
O LSP se aplica à passagem de uma instância de uma classe para um método, fazendo com que o método faça algumas coisas com essa instância e geralmente produza algum tipo de resultado. Isso não importa para classes estáticas, pois em C # você não pode criar uma instância de uma classe estática.
Ainda mais importante, as classes estáticas são seladas e, portanto, não podem ser herdadas. Isso torna sua pergunta discutível no que diz respeito ao C #.
Você poderia dizer que as classes estáticas são sempre compatíveis com LSP, pois você nunca pode produzir uma subclasse que viole esse princípio. Você também pode dizer que as classes estáticas nunca são compatíveis com LSP pelo mesmo motivo.
Em Java, as classes estáticas são um pouco diferentes. Você não pode marcar uma classe de nível superior como "estática"; portanto, se você quiser criar uma classe de utilitário semelhante às classes estáticas do C #, precisará declará-la como
final
e ocultar seu construtor. Depois de fazer isso, no entanto, eles se comportam de maneira semelhante ao C # - você não pode instanciar ou subclassificar. Você pode declarar uma classe interna comostatic
, mas isso não significa o mesmo que em C #: simplesmente denota uma classe de nível superior aninhada .O VB.NET se comporta exatamente da mesma maneira que o C #, neste caso, até onde eu sei.
Você não mencionou se está interessado nos outros princípios, mas vou incluí-los de qualquer maneira para garantir a integridade.
S princípio da responsabilidade ingle : uma classe estática facilmente seguir esse princípio.
O princípio caneta / fechado : como as classes estáticas são seladas, elas nunca podem seguir esse princípio.
L iskov princípio de substituição : como acima.
I princípio nterface segregação : não se aplica a uma única classe, mas dividindo uma classe estática grande em partes menores, mais especializado poderia ser um passo na direção seguindo este princípio.
D princípio ependency inversão : classes estáticas não podem implementar interfaces, portanto, qualquer classe de usá-lo dependerá sempre o que quer implementação existe no momento. As classes estáticas, portanto, violam esse princípio.
Como as classes estáticas não atendem a todos os 5 critérios, elas não são SOLID.
fonte
Eu não classificaria uma classe como orientada a objetos e, portanto, diria que ela não pode (e não deve tentar) atender aos princípios do design orientado a objetos.
Essas classes são apenas uma solução alternativa para a incapacidade de fornecer código fora de uma classe em linguagens como Java e C #. Se possível, devem ser definidos como funções independentes, pois não obtêm nenhum benefício com a orientação a objetos.
fonte
Vale ressaltar, como você não especificou nenhuma linguagem, que em C ++ é possível passar classes em torno das quais apenas membros estáticos e acessá-los via modelo e, portanto, é possível substituir uma classe com apenas membros estáticos e, sem dúvida, os métodos chamado formulário é "interface".
fonte