lo general tratan de asegurarse de que mis instancias de objetos cumplen con la Liskov Substitution Principle, pero siempre me he preguntado por qué la gente piensa está LSP debe aplicarse a los constructores también?¿Deberían los constructores cumplir con el Principio de Sustitución de Liskov?
he intentado buscando en Google para esto, pero no he sido capaz de encontrar cualquier opinión de cualquier manera fuertes.
Debo notar que la mayor parte de mi codificación está en Ruby, pero a veces encuentro que mis constructores de subclases son ligeramente diferentes de la clase padre. Toman el mismo conjunto de argumentos base y, a menudo, argumentos extra. Algunas veces esto también ocurre con otros métodos de clase.
En la parte posterior de mi cabeza, esto siempre se ha sentido como una violación LSP, pero quería ver si alguien más se siente de esta manera también.
"cuando usas un constructor sabes que estás tratando con el subtipo". Gracias. Es un excelente punto. – Chance
Probablemente sea importante hacer una distinción entre constructores, métodos de fábrica estáticos, métodos de fábrica que son instancias del tipo que se está produciendo (especialmente 'Clone') y otras fábricas. Las fábricas estáticas pueden producir diferentes tipos de objetos que se derivan del tipo de retorno, pero el LSP debe aplicarse a todos los objetos producidos; sin embargo, no es necesario que las clases derivadas admitan los mismos métodos estáticos que la clase base. Si una clase admite un método de fábrica como 'Clone', se debe respetar el LSP y admitir una semántica similar en los subtipos. – supercat
Para las fábricas que devuelven cosas de otros tipos, el artículo devuelto por una fábrica derivada debe ser utilizable como una instancia de un artículo que sería devuelto por la fábrica base. Entonces, si 'CarFactory' tiene un método' MakeCar() 'que devuelve' Car', que a su vez admite un método 'Drive()', uno debería poder llamar a 'SomeCarFactory.MakeCar(). Drive()' incluso si 'SomeCarFactory' es realmente un' FordFactory' (que hereda 'CarFactory') que devuelve' Ford' (que hereda 'Car'). – supercat