【问题标题】:Write abstraction function and representation invariant编写抽象函数和表示不变量
【发布时间】:2018-09-07 08:57:34
【问题描述】:

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

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

我的问题是:它们怎么写?

谢谢。

【问题讨论】:

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

标签: java abstraction contract


【解决方案1】:

通过这种方式,您可以强制扩展抽象 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多