我知道什么是抽象函数和表示不变式,但是我很难自己编写它们。 抽象函数:从对象的具体表示到其表示的抽象值的函数。 表示形式不变:对于一个类的所有有效具体表示形式,必须为真的条件。 例如:
class Appointment{
/**
* AF:
* IR:
*/
private Time time;
private Intervention intervention;
private Room room;
/** EFFECT initializes to null an appointment
* @param time REQUIRE != null
* @param intervention REQUIRE != null
* @param room REQUIRE != null
*/
public Appointment(Time time, Intervention intervention, Room room){
time = null;
intervention = null;
room = null;
}}
我的问题是:怎么写?
谢谢。
答案 0 :(得分:0)
这样,您可以强制扩展抽象A的类的实现者定义其自己的不变式。
abstract class A {
public void doSth(){
Invariant invariant = getInvariant();
check(invariant);
//do some work
check(invariant);
}
//define your invariant in concrete impl
protected abstract Invariant getInvariant();
}
我再次重新阅读了您的问题,但我仍然不确定。 还是要在抽象类中定义不变式并在具体实现中进行检查?
abstract class A {
private void checkInvariant(){
//check state
//if state is breaking invariant throw exception
}
public void doSth() {
checkInvariant();
doActualWork();
checkInvariant();
}
protected abstract void doActualWork();
}