Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写抽象函数和表示不变量_Java_Abstraction_Contract - Fatal编程技术网

Java 写抽象函数和表示不变量

Java 写抽象函数和表示不变量,java,abstraction,contract,Java,Abstraction,Contract,我知道什么是抽象函数和表示不变量,但我自己写它们有困难。 抽象函数:从对象的具体表示到它所表示的抽象值的函数。 表示不变量:在类的所有有效具体表示上必须为真的条件。 例如: class Appointment{ /** * AF: * IR: */ private Time time; private Intervention intervention; private Room room; /** EFFECT in

我知道什么是抽象函数和表示不变量,但我自己写它们有困难。 抽象函数:从对象的具体表示到它所表示的抽象值的函数。 表示不变量:在类的所有有效具体表示上必须为真的条件。 例如:

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的类的实现者定义自己的不变量

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();
}
我重新阅读了你的问题,但我仍然不确定。 或者您想在抽象类中定义不变量并在conrete实现中检查它吗

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

这个问题我看了两遍,还是不明白:(@Eugene抱歉,我赶时间。我只是编辑了一下。除了我不知道你实际上在问什么之外,代码甚至都不正确。构造函数没有做任何有用的事情,它将所有参数设置为
null
。首先,你的构造函数必须命名为
约会
(大写
a
).我还是不知道你在问什么,对不起