Puede ser una pregunta extraña, pero ¿qué tan guitarra es una guitarra eléctrica? A diferencia que en la vida diaria, esta interrogante sí toma cierta relevancia al tratarse del diseño de un sistema informático y es que, al momento de Tocar(), ambas tienen un comportamiento muy distinto.
Mientras que la guitarra común o acústica solo depende de su caja de resonancia para emitir efectivamente un sonido.
La guitarra eléctrica depende del efecto faraday y un amplificador.
Para todas estas situaciones es importante tener en claro el Principio de Sustitución de Liskov, el cual sostiene lo siguiente:
Los subtipos deben ser sustituibles por sus tipos base.
En el anterior ejemplo nos podemos dar con el inconveniente de que al momento de tocar tengamos algunos resultados inesperados, como le hecho de que una sí suene según lo esperado y la otra no se escuche casi nada porque falta amplificar.
Podemos tener un código que tenga la responsabilidad única de validar el tipo y que ejecute el procedimiento correspondiente.
Pero en el ejemplo anterior solo tenemos un subtipo ¿Qué pasaría si hay más? Bajo esta idea podriamos tener una clase padre llamada Instrumento.cs y ocurriría lo siguiente.
Definitivamente esta clase Player.cs no es adecuada ya que es difícil de mantener y agrega una complejidad innecesaria. Por lo tanto, la solución en esta situación es crear una nueva clase abstracta de la cual deriven las demás, de tal manera que cada subtipo tenga su propia implementación.
En ese sentido ya no es necesario alterar ningún comportamiento de la base, ni tampoco es necesario recurrir a un código adicional para conocer la diferencia que hay entre el tipo base y el subtipo.
Lo mejor de esta solución es que extendemos las oportunidades de su implementación así como nos permite tener un código más ordenado.
No hay comentarios.:
Publicar un comentario