Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Análisis y diseño II
Temas
Instrucciones
Ejemplo
// Clase de prueba
public class Biblioteca {
public static void main(String[] args) {
Libro libro = new LibroImpl();
libro.prestar();
System.out.println("¿Está prestado? " + libro.estaPrestado());
libro.devolver();
System.out.println("¿Está prestado? " + libro.estaPrestado());
}
}
En este ejemplo, tenemos una interfaz llamada Libro que define los métodos prestar(),
devolver() y estaPrestado(). Luego, implementamos la interfaz en la clase LibroImpl,
donde se definen las funcionalidades específicas de un libro. La clase Biblioteca se encarga
de probar el funcionamiento de la implementación.
Al utilizar el diseño con interfaces, podemos trabajar con cualquier objeto que implemente
la interfaz Libro, sin necesidad de conocer los detalles de implementación de la clase
LibroImpl. Esto nos permite agregar nuevas implementaciones de libros en el futuro sin
afectar el código existente.
En la programación, un contrato es un acuerdo entre dos partes (por ejemplo, dos clases o
componentes) que define las responsabilidades y garantías mutuas. Los contratos se utilizan
para establecer reglas y restricciones claras sobre el comportamiento y las interacciones
entre los componentes de un sistema.
La especificación de contratos implica definir las precondiciones (lo que se espera antes de
la ejecución de un método), las pos condiciones (lo que se garantiza después de la ejecución
de un método) y las invariantes (condiciones que se mantienen durante la vida de un
objeto). Estas especificaciones pueden expresarse utilizando lenguajes formales o
anotaciones en el código.
El uso de contratos implica que los componentes deben cumplir con las especificaciones
establecidas. Esto implica que los métodos deben cumplir con las precondiciones antes de
ejecutarse y garantizar las pos condiciones después de ejecutarse. Los contratos
proporcionan una forma de validar y verificar el comportamiento de los componentes,
ayudando a detectar y prevenir errores en tiempo de desarrollo y ejecución.
Ejemplo
cuenta.depositar(500);
console.log("Saldo después del depósito:", cuenta.saldo);
cuenta.retirar(200);
console.log("Saldo después del retiro:", cuenta.saldo);
En este ejemplo, tenemos una clase CuentaBancaria que representa una cuenta bancaria y
tiene métodos para depositar y retirar dinero. Antes de ejecutar estas acciones, se realizan
verificaciones de precondición para asegurarse de que las cantidades proporcionadas sean
válidas (mayores a 0) y de que haya suficiente saldo para realizar el retiro. Después de cada
acción, se realizan verificaciones de postcondición para asegurarse de que el saldo se haya
actualizado correctamente.