stringtranslate.com

Principio de sustitución de Liskov

Retrato de Bárbara 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 titulada Abstracción y jerarquía de datos . Se basa en el concepto de "sustituibilidad", un principio de 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 más que meramente sintáctica, porque pretende garantizar la interoperabilidad semántica de tipos en una jerarquía, tipos de objetos en particular. 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 sobre objetos de tipo T. Entonces debería ser cierto para objetos de tipo S donde S es un subtipo de T .

Simbólicamente:

Es decir, si S subtipo T, lo que es válido para los objetos T es válido para 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 guarda cierta semejanza con el diseño por contrato de Bertrand Meyer en el sentido de que considera la interacción de la subtipificación con precondiciones , postcondiciones e invariantes .

Principio

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

La subtipificación conductual es una noción más sólida 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 de comportamiento 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 sea cierto para algún subtipo S de T , incluso si q sí se cumple 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 los lenguajes de programación orientados a objetos más nuevos (normalmente a nivel de clases en lugar de tipos; consulte subtipos nominales versus estructurales para conocer la distinción):

Además de los requisitos de firma, el subtipo debe cumplir una serie de condiciones de comportamiento. Estos 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 condiciones previas y posteriores son idénticas a las introducidas por Bertrand Meyer en su libro de 1988 Construcción de software orientada a objetos . Tanto Meyer como, más tarde, Pierre America, que fue el primero en utilizar el término subtipo conductual , dieron definiciones basadas en la teoría de la prueba de algunas nociones de subtipo conductual, pero sus definiciones no tuvieron en cuenta los alias que pueden ocurrir en los lenguajes de programación que admiten referencias o punteros. . Tener en cuenta el alias fue la principal mejora realizada por Liskov y Wing (1994), y un ingrediente clave es la restricción histórica. 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.

Ver también

Referencias

  1. ^ Liskov, Bárbara; Ala, Jeannette (1 de noviembre de 1994). "Una noción conductual de subtipificación". Transacciones ACM sobre lenguajes y sistemas de programación . 16 (6): 1811–41. doi : 10.1145/197320.197383 . S2CID  999172.

Bibliografía

Referencias específicas

Referencia general

enlaces externos