编写抽象函数和表示不变式

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();
}