Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |
wiki:psl [2024/08/30 08:33] – admin | wiki:psl [2024/08/30 08:34] (current) – admin |
---|
**Ejemplo 1**: Supongamos una clase base que calcula números primos. Supongamos también algunas subclases que implementan otros algoritmos con el mismo propósito. Específicamente, el método ''getPrimo(n)'' es un método que devuelve el enésimo número primo. Este método existe en la clase base y se redefine en todas las subclases. | **Ejemplo 1**: Supongamos una clase base que calcula números primos. Supongamos también algunas subclases que implementan otros algoritmos con el mismo propósito. Específicamente, el método ''getPrimo(n)'' es un método que devuelve el enésimo número primo. Este método existe en la clase base y se redefine en todas las subclases. |
| |
Supongamos además que el contrato del método ''getPrimo(n)'' especifique lo siguiente: //1 <= n <= 1 millón//. Es decir, el método debe ser capaz de devolver cualquier número primo para //n// variando de //1 hasta 1 millón//. En este ejemplo, una posible violación del contrato de ''getPrimo(n)'' ocurre, por ejemplo, si en una de las clases el algoritmo implementado calcula solo números primos hasta //900 mil//. | Supongamos además que el contrato del método ''getPrimo(n)'' especifique lo siguiente: $1 <= n <= 1 millón$. Es decir, el método debe ser capaz de devolver cualquier número primo para //n// variando de //1 hasta 1 millón//. En este ejemplo, una posible violación del contrato de ''getPrimo(n)'' ocurre, por ejemplo, si en una de las clases el algoritmo implementado calcula solo números primos hasta //900 mil//. |
| |
De manera más concreta, el Principio de Sustitución de Liskov define lo siguiente: supongamos que un cliente llama a un método ''getPrimo(n)'' de un objeto p de la clase ''NumeroPrimo''. Supongamos ahora que el objeto ''p'' es reemplazado por un objeto de una subclase de ''NumeroPrimo''. En este caso, el cliente comenzará a ejecutar el método ''getPrimo(n)'' de esa subclase. Sin embargo, esta sustitución de métodos no debe afectar el comportamiento del cliente. Para ello, todos los métodos ''getPrimo(n)'' de las subclases de NumeroPrimo deben realizar las mismas tareas que el método original, posiblemente de manera más eficiente. | De manera más concreta, el Principio de Sustitución de Liskov define lo siguiente: supongamos que un cliente llama a un método ''getPrimo(n)'' de un objeto p de la clase ''NumeroPrimo''. Supongamos ahora que el objeto ''p'' es reemplazado por un objeto de una subclase de ''NumeroPrimo''. En este caso, el cliente comenzará a ejecutar el método ''getPrimo(n)'' de esa subclase. Sin embargo, esta sustitución de métodos no debe afectar el comportamiento del cliente. Para ello, todos los métodos ''getPrimo(n)'' de las subclases de NumeroPrimo deben realizar las mismas tareas que el método original, posiblemente de manera más eficiente. |