📜  门| GATE CS 1996 |问题24(1)

📅  最后修改于: 2023-12-03 15:28:36.995000             🧑  作者: Mango

门| GATE CS 1996 |问题24

这是GATE CS 1996年的问题24,它考查的是面向对象的程序设计。问题描述如下:

你要设计一个门类(Gate),表示进入一座建筑物的门。该门类包含两个状态:打开(open)和关闭(closed)。门的状态可通过方法setOpensetClosed进行改变,该方法要求使用密钥(key)进行验证。另外,门类还包含一个isOpen方法,它用来检查门是否处于打开状态。

请根据上述问题描述完成以下任务:

  1. 设计门类(Gate)的构造函数和三个方法(setOpensetClosedisOpen);
  2. 设计密钥类(Key);
  3. 设计一个测试程序,测试门类和密钥类。

下面是解决该问题的代码实现。

门类的实现

首先,我们需要设计一个门类(Gate)。

public class Gate {
    private boolean open;
    
    public Gate() {
        this.open = false;
    }
    
    public void setOpen(Key key) {
        if (key.isValid()) {
            this.open = true;
        } else {
            System.out.println("Invalid key");
        }
    }
    
    public void setClosed() {
        this.open = false;
    }
    
    public boolean isOpen() {
        return this.open;
    }
}

上述代码实现了要求的构造函数和三个方法:setOpensetClosedisOpen。其中,setOpen方法中添加了对密钥的验证,如果密钥有效,就将门的状态改为打开;否则,输出"Invalid key"。

密钥类的实现

接下来,我们需要设计一个密钥类(Key)。

public class Key {
    private boolean valid;
    
    public Key(boolean valid) {
        this.valid = valid;
    }
    
    public boolean isValid() {
        return this.valid;
    }
}

密钥类只需要一个布尔变量valid来表示密钥是否有效。它只有一个构造函数,并提供了一个方法isValid,用于检查密钥是否有效。

测试程序的实现

最后,我们需要设计一个测试程序来测试门类和密钥类的实现。

public class TestGate {
    public static void main(String[] args) {
        // create a gate and a key
        Gate gate = new Gate();
        Key key = new Key(true);
        
        // test methods
        System.out.println("Initial gate status: " + gate.isOpen()); // false
        
        gate.setOpen(key);
        System.out.println("Gate status after opening: " + gate.isOpen()); // true
        
        gate.setClosed();
        System.out.println("Gate status after closing: " + gate.isOpen()); // false
        
        Key invalidKey = new Key(false);
        gate.setOpen(invalidKey); // output "Invalid key"
    }
}

该测试程序创建了一个门和一把钥匙,并测试了门类的三个方法和密钥类的isValid方法的正确性。在测试setOpen方法时,我们通过创建一把无效的钥匙来测试门类的密钥验证功能。