es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Fortalecimiento y Debilitamiento de pre y post condiciones

He estado investigando sobre el tema de Diseño por Contrato y hasta ahora tengo las siguientes notas:

Cuando se fortalece una condición, significa hacerla más restrictiva y debilitar una condición es lo opuesto.

La precondición de una subclase es más débil o igual que su superclase. La postcondición de una subclase es más fuerte o igual que su superclase.

Me gustaría confirmar un ejemplo para aclarar mi comprensión.

class exampleA {
    int processInt(int exampleInt) {
        return exampleInt;
    }
}
class exampleB extends exampleA {
    int processInt(int exampleInt) {
        return exampleInt;
    }
}

Diseño por Contrato dice que si la precondición de processInt en exampleA es, “exampleInt debe ser mayor que 10”, y la postcondición es “el valor devuelto está entre 20 y 50”, entonces la precondición del método exampleInt en exampleB debe ser la misma o más débil, y la postcondición sería la misma o más fuerte.

Esto significa que las precondiciones válidas para exampleB podrían ser:
* Mayor que 0
* Mayor o igual a 0
* Mayor que -100

Pero las precondiciones inválidas serían:
* Mayor que 20
* En el rango de 20 a 500

Del mismo modo, las postcondiciones válidas podrían ser:
* Entre 25 y 45
* Entre 30 y 40

Pero las postcondiciones inválidas serían:
* Entre 20 y 90
* Entre 0 y 50
* Mayor que 0

¿Es esta una interpretación correcta de Diseño por Contrato? Además, estoy aprendiendo esto en Java, pero supongo que el concepto se aplica a cualquier lenguaje con OOP.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, tu interpretación de Diseño por Contrato es correcta. La idea detrás de Diseño por Contrato es asegurarse de que las subclases cumplan con las obligaciones de sus superclases al tiempo que proporcionan funcionalidades adicionales. Este concepto se aplica no solo a Java, sino a los lenguajes de programación orientados a objetos en general.

Comments are closed.