Pregunta

He tenido recientemente una serie de escenarios donde los pequeños cambios en el código se han traducido en el cambio de las condiciones previas a través de múltiples clases y me preguntaba si el diseño por contrato se supone que es de esa manera o no.

public Goal getNextGoal() {
    return goalStack.pop();
}

Si goalStack.pop() tiene una condición previa de que la pila no está vacía, entonces hace getNextGoal() necesidad de tener explícitamente la misma condición? Parece que la herencia de las condiciones previas haría las cosas frágiles, y cambiando a una cola u otra estructura cambiaría las condiciones previas a getNextGoal(), es que llaman, y las personas que llaman de TI de las personas que llaman. Pero parece que no heredar las condiciones previas se ocultaban los contratos y las personas que llaman y llaman las personas que llaman, no sé nada de las condiciones previas.

código tan frágil, donde todos los que llaman conocen y heredan las condiciones previas y condiciones posteriores del código que llaman, o código misterioso donde las personas que llaman nunca se sabe lo que las condiciones previas y condiciones posteriores son más profundas?

¿Fue útil?

Solución

Depende de lo que su método de llamada hace exactamente. Lo importante con condiciones previas es que la persona que llama es responsable del cumplimiento de las condiciones previas .

Así que si las personas que llaman de su método de GetNextGoal deben ser responsables de proporcionar una pila no está vacía, entonces también deberá establecer condiciones previas de hecho en su método de GetNextGoal. La claridad de las condiciones previas es una de las grandes ventajas de los contratos de código, por lo que te sugiero que los pone en todos los lugares en los que las personas que llaman tienen que cumplir las condiciones previas.


Si su código parece frágil sin embargo, podría ser una señal de que necesita algo de código refactorizar .

Parece que heredar el precondiciones harían cosas frágil, y cambiando a una cola o otra estructura cambiaría la condiciones previas para getNextGoal (), que es las personas que llaman y llamadas de TI de las personas que llaman.

Si expone la cola a las personas que llaman y cambiar más tarde (a otra estructura, como usted ha dicho), es que llaman también tendría que cambiar. Esto suele ser un signo de código frágil.

Si desea exponer una interfaz en lugar de una implementación de cola específica , sus condiciones previas también podrían utilizar la interfaz y no tendrían que cambiar las condiciones previas cada vez que cambie su implementación. Por lo tanto resulta en código menos frágil.

Otros consejos

Las excepciones son una solución, pero quizás no sea factible para su situación.

documentar lo que sucede si no hay metas es normal.E.G. Esto es lo que malloc () hace en C

No se puede saber si está utilizando Java o C ++ o cualquier otra cosa, ya que cada lengua puede tener formas ligeramente más naturales para que el lenguaje específico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top