stringtranslate.com

Principio de sustitución de Liskov

Retrato de Barbara Liskov
La sustitución de Liskov fue introducida por Barbara Liskov , foto tomada en 2010.

El principio de sustitución de Liskov ( LSP ) es una definición particular de una relación de subtipificación , llamada subtipificación conductual fuerte , que fue introducida inicialmente por Barbara Liskov en un discurso de apertura de una conferencia de 1987 titulado Abstracción y jerarquía de datos . Se basa en el concepto de "sustituibilidad", un principio de la programación orientada a objetos que establece que un objeto (como una clase ) puede ser reemplazado por un subobjeto (como una clase que extiende la primera clase) sin romper el programa. Es una relación semántica en lugar de meramente sintáctica, porque pretende garantizar la interoperabilidad semántica de los tipos en una jerarquía, en particular los tipos de objetos. Barbara Liskov y Jeannette Wing describieron el principio sucintamente en un artículo de 1994 de la siguiente manera: [1]

Requisito de subtipo : Sea ⁠ ⁠ una propiedad demostrable acerca de objetos ⁠ ⁠ del tipo T . Entonces ⁠ ⁠ debería ser verdadero para objetos ⁠ ⁠ del tipo S donde S es un subtipo de T .

Simbólicamente:

Es decir, si S subtipifica T, lo que se aplica a los objetos T se aplica a los objetos S. En el mismo artículo, Liskov y Wing detallaron su noción de subtipificación conductual en una extensión de la lógica de Hoare , que tiene cierta semejanza con el diseño por contrato de Bertrand Meyer en cuanto a que considera la interacción de la subtipificación con las precondiciones , las poscondiciones y las invariantes .

Principio

La noción de Liskov de un subtipo de comportamiento define una noción de sustituibilidad de objetos; es decir, si S es un subtipo de T , entonces los objetos del tipo T en un programa pueden ser reemplazados por objetos del tipo S sin alterar ninguna de las propiedades deseables de ese programa (por ejemplo, la corrección ).

La subtipificación conductual es una noción más fuerte que la subtipificación típica de funciones definidas en la teoría de tipos , que se basa únicamente en la contravarianza de los tipos de parámetros y la covarianza del tipo de retorno. La subtipificación conductual es indecidible en general: si q es la propiedad "el método para x siempre termina ", entonces es imposible para un programa (por ejemplo, un compilador) verificar que es cierta para algún subtipo S de T , incluso si q es cierta para T. No obstante, el principio es útil para razonar sobre el diseño de jerarquías de clases.

El principio de sustitución de Liskov impone algunos requisitos estándar sobre las firmas que se han adoptado en lenguajes de programación orientados a objetos más nuevos (generalmente a nivel de clases en lugar de tipos; consulte subtipificación nominal vs. estructural para la distinción):

Además de los requisitos de firma, el subtipo debe cumplir una serie de condiciones de comportamiento. Estas se detallan en una terminología similar a la de la metodología de diseño por contrato , lo que genera algunas restricciones sobre cómo los contratos pueden interactuar con la herencia :

Orígenes

Las reglas sobre precondiciones y poscondiciones son idénticas a las introducidas por Bertrand Meyer en su libro de 1988 Object-Oriented Software Construction . Tanto Meyer como, posteriormente, Pierre America, que fue el primero en utilizar el término subtipificación conductual , dieron definiciones teóricas de prueba de algunas nociones de subtipificación conductual, pero sus definiciones no tomaron en cuenta el aliasing que puede ocurrir en lenguajes de programación que admiten referencias o punteros. Tener en cuenta el aliasing fue la principal mejora realizada por Liskov y Wing (1994), y un ingrediente clave es la restricción de historial. Según las definiciones de Meyer y America, un punto mutable sería un subtipo conductual de un punto inmutable, mientras que el principio de sustitución de Liskov lo prohíbe.

Véase también

Referencias

  1. ^ Liskov, Barbara; Wing, Jeannette (1 de noviembre de 1994). "Una noción conductual de subtipificación". ACM Transactions on Programming Languages ​​and Systems . 16 (6): 1811–41. doi : 10.1145/197320.197383 . S2CID  999172.

Bibliografía

Referencias específicas

Referencia general

Enlaces externos