编写抽象函数和表示不变式
Write abstraction function and representation invariant
我知道什么是抽象函数和表示不变量,但是我自己写起来有困难。 抽象函数:从对象的具体表示到它所表示的抽象值的函数。 表示不变量: 一个条件必须对 class 的所有有效具体表示为真。 例如:
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;
}}
我的问题是:它们怎么写的?
谢谢。
这样你就可以强制扩展抽象 A 的 classes 的实现者定义它自己的不变量。
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();
}
我重新阅读了你的问题,但我仍然不确定。 或者您想在抽象中定义不变量 class 并在具体实现中检查它?
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();
}