Supponiamo di avere due interfacce non correlate con lo stesso metodo:
interface Table {
/**
* @param width (0 < width <= 100)
*/
void setWidth(int width);
}
interface Square {
/**
* @param width (50 <= width <= 10000)
*/
void setWidth(int width);
}
Quindi creo una classe che implementa entrambe le interfacce:
class SquareTable implements Square, Table {
void setWidth(int width) {
precondition = ...
if (!precondition)
throw new PreconditionFailedException("Precondition failed: ...");
}
}
In che modo le espressioni di precondizione dovrebbero essere combinate per soddisfare il principio di sostituzione di Liskov? Dovrebbero e 'o o o ' ed? Cioè cosa dovrebbe essere scritto al posto di ...
:
width > 0 && width <= 10000 // using OR
width >= 50 && width <= 100 // using AND
E quale regola dovrebbe essere usata per le postcondizioni?
interface Table {
/**
* @return width (0 < width <= 100)
*/
int getWidth();
}
interface Square {
/**
* @return width (50 <= width <= 10000)
*/
int getWidth();
}
class SquareTable implements Square, Table {
int getWidth() {
postcondition = ...
if (!postcondition)
throw new PostconditionFailedException("Postcondition failed: ...");
}
}
width > 0 && width <= 10000 // using OR
width >= 50 && width <= 100 // using AND