itgle.com

请仔细阅读以下关于某传输系统的技术说明、状态转换图及Java程序,根据要求回答问题1~问题2。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、 StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout3种。事件与其相应的状态转换如图7-16所示。下面的[Java代码1]与[Java代码2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。[Ja

题目

请仔细阅读以下关于某传输系统的技术说明、状态转换图及Java程序,根据要求回答问题1~问题2。

[说明]

传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、 StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout3种。事件与其相应的状态转换如图7-16所示。

下面的[Java代码1]与[Java代码2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。

[Java代码1]

请将以上[Java代码1]与[Java代码2]程序段中,(1)~(7)空缺处的语句填写完整。


相似考题
更多“ 请仔细阅读以下关于某传输系统的技术说明、状态转换图及Java程序,根据要求回答问题1~问题2。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、 ”相关问题
  • 第1题:

    阅读以下说明和C++代码。

    【说明】

    传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

    下面的C++代码1与C++代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。

    【C++代码1】

    const int CLOSED=1; const int PENING=2;

    const int PEN=3; const int CLOSING=4;

    const int STAYOPEN=5; //定义状态变量,用不同整数表示不同状态

    class Door {

    Private:

    int state; //传输门当前状态

    void setState(int state){ this->state=state;} //设置当前状态

    public:

    Door():state(CLOSED){};

    void getState(){ //根据当前状态输出相应的字符串

    switch(state){

    case OPENING: cout<<"OPENING"<<endl; break;

    case CLOSED: cout<<"CLOSED"<<endl; break;

    case OPEN: cout<<"OPEN"<<endl; break;

    case CLOSING: cout<<"CLOSING"<<endl; break;

    case STAYOPEN:cout<<"STAYOPEN"<<endl; break;

    }

    };

    void click() { //发生click事件时进行状态转换

    if ((1)) setState(OPENING);

    else if ((2)) setState(CLOSING);

    else if ((3)) setState(STAYOPEN);

    }

    void timeout(){ //发生timeout事件时进行状态转换

    if (state == OPEN) setState(CLOSING);

    }

    void complete(){ //发生complete事件时进行状态转换

    if (state == OPENING) setState(OPEN);

    else if (state == CLOSING) setState(CLOSED);

    }

    };

    int main(){

    Door aDoor;

    aDoor.getState();aDoor.click(); aDoor.getState();

    aDoor.complete();aDoor.getState(); aDoor.click();

    aDoor.getState();aDoor.click(); aDoor.getState(); return 0;

    }

    【C++代码2】

    class Door {

    public:

    DoorState *CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state;

    Door();

    virtual~Door(){……//释放申请的内存,此处代码省略);

    void setState(DoorState *state) { this->state = state;}

    void getState(){

    //此处代码省略,本方法输出状态字符串,

    //例如,当前状态为CLOSED时,输出字符串为“CLOSED”

    };

    void click();

    void timeout();

    void complete();

    };

    Door::Door(){

    CLOSED = new DoorClosed(this); OPENING = new DoorOpening(this);

    PEN = new DoorOpen(this); CLOSING = new DoorClosing(this);

    STAYOPEN = new DoorStayOpen(this);state = CLOSED;

    }

    void Door :: click() {(4);)

    void Door :: timeout() {(5);)

    void Door :: complete() {(6);}

    class DoorState//定义一个抽象的状态,它是所有状态类的基类

    {

    protected:Door *door;

    public:

    DoorState(Door *door) {this->door = door;}

    virtual~DoorState(void);

    virtual void click() {}

    virtual void complete(


    正确答案:(1)state == CLOSED || state == CLOSING (2)state == OPENING || state == STAYOPEN (3)state == OPEN (4)state->click() (5)state->timeout() (6)state->complete() (7)door->setState(door->OPENING)
    (1)state == CLOSED || state == CLOSING (2)state == OPENING || state == STAYOPEN (3)state == OPEN (4)state->click() (5)state->timeout() (6)state->complete() (7)door->setState(door->OPENING) 解析:本题考查的是状态转换图的程序设计与实现。
    空(1)、(2)和(3)需要根据状态转换图来填写,空(1)、(2)和(3)所在的方法为click,表示当发生click事件时应该发生什么状态转换。根据代码可知,发生click事件时,状态分别跳转到OPENING,CLOSING和STAYOPEN,则发生click前的状态由状态转换图可以得到,分别为CLOSED或CLOSING、STAYOPEN或OPENING以及OPEN。
    代码2中空(4)、(5)和(6)考查当发生click、timeout以及complete事件的时候,状态应该如何迁移。类Door的state成员变量用于记录类Door所处的状态,而state变量的类型为DoorState *,DoorState中分别具有click、timeout和complete方法用来响应对应的事件,因此,空(4)、(5)和(6)分别为:state->click()、state->timeout()和 state->complete()。
    空(7)主要考查门的当前状态为CLOSED时,发生click事件时状态的迁移。根据状态图可知,CLOSED状态的在click事件下将迁移到OPENING,因此,此处应该将传输门状态设置为OPENING,DoorState变量存储了当前其存储的传输门的实例,因此,可直接调用其方法setState来设置状态,由于传输门状态采用类的实例变量表示,所以此处应该填写door->setState(door->OPENING)。
    代码1和代码2的区别是:代码2将状态间的转换规则封装到具体的类中,当状态转换图的转换规则发生变化时,只需更改部分对应类中的状态迁移规则,而代码1中的迁移规则散落在程序中,维护起来较为困难。

  • 第2题:

    阅读以下关于网络安全的技术说明,根据要求回答问题1~问题5。

    【说明】

    某企业采用Windows Server2003操作系统部署企业虚拟专用网(VPN),将企业的两个异地网络通过公共Internet安全的互联起来。微软Windows Server 2003操作系统中对IPSec具备完善的支持,图1-16示出了基于Windows Server 2003系统部署IPSec VPN的网络结构图。

    使用VPN技术,是为了保证内部数据通过Internet安全传输。VPN技术主要采用哪些技术来保证数据安全?


    正确答案:①隧道技术 ②加解密技术 ③密钥管理技术 ④使用者与设备身份认证技术
    ①隧道技术 ②加解密技术 ③密钥管理技术 ④使用者与设备身份认证技术 解析:这是一道要求读者掌握VPN安全关键技术的基本常识题。本题所涉及的知识点如下。
    虚拟专用网(VPN)指的是依靠Internet服务提供商(ISP)和其他网络服务提供商(NSP),在公用网络中建立专用的数据通信网络的技术。其中,“虚拟”是指用户不再需要拥有实际的长途数据线路,而是使用公共Internet网的数据线路。“专用网”是指用户可以为自己制定一个最符合自己需求的网络。
    目前VPN技术主要采用隧道技术(Tunneling)、加解密技术(Encryption & Decryption)、密钥管理技术(Key Management)、使用者与设备身份认证技术(Authentication)等来保证内部数据在Internet网上的安全传输。
    ①隧道技术是VPN的基本技术,类似于点对点连接技术,它在公用网建立一条数据通道(隧道),让数据包通过这条隧道传输。隧道是由隧道协议形成的,分为第二、三、四层隧道协议。第二层隧道协议是先把各种网络协议封装到PPP帧中,再把整个数据包装入隧道协议中。第二层隧道协议有L2F、PPTP、 L2TP等。第三层隧道协议是把各种网络协议直接装入隧道协议中,形成的数据包依靠第三层协议进行传输。IPSec协议是第三层隧道协议的典型代表。SSL协议是第四层隧道协议的典型代表。
    ②加解密技术是数据通信中一项较成熟的技术,VPN可直接利用现有的对称密码和非对称密码加解密技术。通过公共Internet网络传递的数据经过加密后,以确保网络其他未授权的用户无法读取该信息。
    ③密钥管理技术的主要任务是如何在公用数据网上安全地传递密钥而不被窃取。
    ④使用者与设备身份认证技术,通常使用用户名和密码认证、卡片式认证或USB加密狗认证等方式。

  • 第3题:

    请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1和问题2。

    【说明】

    传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout 3种,事件与其相应的状态转换如图6-18所示。

    下面的【C++代码1】与【C++代码2】分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。

    【C++代码1】

    const int CLOSED = 1; const int PENING = 2;

    const int PEN = 3; const int CLOSING = 4;

    const int STAYOPEN = 5; //定义状态变量,用不同整数表示不同状态

    class Door {

    private:

    private:

    int state; //传输门当前状态

    void setState(int state) { this->state = stale; } //设置当前状态

    public:

    Door () :state (CLOSED) { };

    void getState() { //根据当前状态输出相应的字符串

    switch(state) {

    case OPENING: cout <<"OPENING" << endl; break;

    case CLOSED: cout << "CLOSED" << endl; break;

    case OPEN: cout << "OPEN" << endl; break;

    case CLOSING: cout << "CLOSING" << endl; break;

    case STAYOPEN: cout << "STAYOPEN" << endl; break;

    }

    }

    void click() { //发生click事件时进行状态转换

    if ( (1) ) setState(OPENING);

    else if ( (2) ) setState(CLOSING);

    else if ( (3) ) setState(STAYOPEN);

    }

    void timeout() { //发生timeout事件时进行状态转换

    if (state == OPEN) setState(CLOSING);

    }

    void complete() { //发生complete事件时进行状态转换

    if (state == OPENING) setState(OPEN);

    else if (state == CLOSING) setState(CLOSED);

    }

    };

    int main(){

    Door aDoor;

    aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.complete();

    aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.click();

    aDoor.getState(); return 0;

    }

    【C++代码2】

    class Door {

    public:

    DoorState *CLOSED, *OPENING, *OPEN, *CLOSING, *STAYOPEN, *state;

    Door();

    virtual ~Door() { ... //释放申请的内存,此处代码省略};

    void s


    正确答案:(1)state==CLOSED || state==CLOSING (2)state==OPENING || state==STAYOPEN (3)state==OPEN (4)state->click() (5)state->timeout() (6)state->complete() (7)door->setState(door->OPENING)
    (1)state==CLOSED || state==CLOSING (2)state==OPENING || state==STAYOPEN (3)state==OPEN (4)state->click() (5)state->timeout() (6)state->complete() (7)door->setState(door->OPENING) 解析:这是一道要求读者掌握状态转换图的程序设计与实现的综合题。本试题的解答思路如下。
    根据(1)空缺处所在的程序段给出的注释信息“发生click事件时进行状态转换”可知,(1)空缺处所在的方法为click,表示当发生click事件时应该发生什么状态转换。找出传输门响应事件与其状态转换图(见图6-18)与click事件相关的内容,并特别注意箭头所指的方向。由于发生click事件前的状态Closed、Closing分别跳转到状态Opening,因此(1)空缺处所填写的内容是“state == CLOSED || state == CLOSING”。
    同理,由如图6-18所示中的状态转换关系可知,发生click事件前的状态Opening、Stayopen分别跳转到状态Closing,即(2)空缺处所填写的内容是“state == OPENING || state == STAYOPEN”;发生click事件前的状态Open跳转到状态StayOpen,即(3)空缺处所填写的内容是“state == OPEN”。
    仔细阅读【C++代码2】程序段,由语句“private DoorState state=CLOSED;”可知,类Door的state成员变量用于记录类Door所处的状态,而state变量的类型为Doorstate*。由语句“virtual void click(){}”、“virtual void complete(){}”和“virtual void timeout(){}”可知,Doorstate中分别具有click、timeout和 complete方法用来响应对应的事件。根据(4)空缺处所在程序段“voidDoor::click()”可得,(4)空缺处所填写的内容是“state->click()”。
    同理,根据(5)空缺处所在程序段“void Door::timeout()”可得,(5)空缺处所填写的内容是“state->timeout()”:根据(6)空缺处所在程序段“void Door::complete()”可得,(6)空缺处所填写的内容是“state->complete()”。
    根据(7)空缺处所在程序段给出的注释信息“定义一个基本的Closed状态”和语句“void DoorClosed::click()”可知,(7)空缺处所填写的内容与传输门当前状态为Closed且发生Click事件时状态的迁移有关。结合如图6-18所示中的状态转换关系可知,在Click事件下Closed状态将迁移到Opening,因此(7)空缺处应该将传输门的状态设置为Opening。由于Doorstate变量存储了当前其存储的传输门的实例,因此可直接调用其方法setState设置状态。同时考虑到传输门的状态采用类的实例变量表示,故(7)空缺处所填写的内容为“door->setState(door->OPENING)”。

  • 第4题:

    请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1~问题2。

    [说明]

    传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、 StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout3种。事件与其相应的状态转换如图7-15所示。

    下面的[C++代码1]与[C++代码2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。

    [C++代码1]

    请将以上[C++代码1]与[C++代码2]程序段中的(1)~(7)空缺处的语句填写完整。


    正确答案:这是一道要求读者掌握状态转换图的程序设计与实现的综合题。本试题的解答思路如下。 根据(1)空缺处所在的程序段给出的注释信息“发生crick事件时进行状态转换”可知(1)空缺处所在的方法为click表示当发生crick事件时应该发生什么状态转换。找出传输门响应事件与其状态转换图(见图7-15)与crick事件相关的内容并特别注意箭头所指的方向。由于发生click事件前的状态CLOSED、CLOSING分别跳转到状态OPENING因此(1)空缺处所填写的内容是“state==CLOSED‖state==CLOSING”。 同理由图7-15所示中的状态转换关系可知发生click事件前的状态OPENING、STAYOPEN分别跳转到状态CLOSING即(2)空缺处所填写的内容是“state==OPENING‖state==STAYOPEN”;发生 click事件前的状态OPEN跳转到状态STAYOPEN即(3)空缺处所填写的内容是“state==OPEN”。 仔细阅读[C++代码2]程序段由语句private DoorState state=CLOSED;可知类Door的state成员变量用于记录类Door所处的状态而state变量的类型为Doorstate*。由语句“virtual void click() {}”、“virtual void complete() {}”和“virtual void timeout() {}”可知Doorstate中分别具有click、timeout和 complete方法用来响应对应的事件。根据(4)空缺处所在程序段“void Door∷click()”可得(4)空缺处所填写的内容是“state->click()”。 同理根据(5)空缺处所在程序段“void Door∷timeout()”可得(5)空缺处所填写的内容是“state->timeout()”;根据(6)空缺处所在程序段“void Door∷complete()”可得(6)空缺处所填写的内容是“state->complete()”。 根据(7)空缺处所在程序段给出的注释信息“定义一个基本的Closed状态”和语句“void DoorClosed∷click()”可知(7)空缺处所填写的内容与传输门当前状态为CLOSED且发生Click事件时状态的迁移有关。结合如图7-16所示中的状态转换关系可知在Click事件下CLOSED状态将迁移到 OPENING因此(7)空缺处应该将传输门的状态设置为OPENING。由于Doorstate变量存储了当前其存储的传输门的实例因此可直接调用其方法setState设置状态。同时考虑到传输门的状态采用类的实例变量表示故(7)空缺处所填写的内容为“door->setState(door->OPENING)”。
    这是一道要求读者掌握状态转换图的程序设计与实现的综合题。本试题的解答思路如下。 根据(1)空缺处所在的程序段给出的注释信息“发生crick事件时进行状态转换”可知,(1)空缺处所在的方法为click,表示当发生crick事件时应该发生什么状态转换。找出传输门响应事件与其状态转换图(见图7-15)与crick事件相关的内容,并特别注意箭头所指的方向。由于发生click事件前的状态CLOSED、CLOSING分别跳转到状态OPENING,因此(1)空缺处所填写的内容是“state==CLOSED‖state==CLOSING”。 同理,由图7-15所示中的状态转换关系可知,发生click事件前的状态OPENING、STAYOPEN分别跳转到状态CLOSING,即(2)空缺处所填写的内容是“state==OPENING‖state==STAYOPEN”;发生 click事件前的状态OPEN跳转到状态STAYOPEN,即(3)空缺处所填写的内容是“state==OPEN”。 仔细阅读[C++代码2]程序段,由语句private DoorState state=CLOSED;可知,类Door的state成员变量用于记录类Door所处的状态,而state变量的类型为Doorstate*。由语句“virtual void click() {}”、“virtual void complete() {}”和“virtual void timeout() {}”可知,Doorstate中分别具有click、timeout和 complete方法用来响应对应的事件。根据(4)空缺处所在程序段“void Door∷click()”可得,(4)空缺处所填写的内容是“state->click()”。 同理,根据(5)空缺处所在程序段“void Door∷timeout()”可得,(5)空缺处所填写的内容是“state->timeout()”;根据(6)空缺处所在程序段“void Door∷complete()”可得,(6)空缺处所填写的内容是“state->complete()”。 根据(7)空缺处所在程序段给出的注释信息“定义一个基本的Closed状态”和语句“void DoorClosed∷click()”可知,(7)空缺处所填写的内容与传输门当前状态为CLOSED且发生Click事件时状态的迁移有关。结合如图7-16所示中的状态转换关系可知,在Click事件下CLOSED状态将迁移到 OPENING,因此(7)空缺处应该将传输门的状态设置为OPENING。由于Doorstate变量存储了当前其存储的传输门的实例,因此可直接调用其方法setState设置状态。同时考虑到传输门的状态采用类的实例变量表示,故(7)空缺处所填写的内容为“door->setState(door->OPENING)”。

  • 第5题:

    阅读以下说明以及Java程序。

    【说明】

    传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

    下面的Java代码1与Java代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。

    【Java代码1】

    public class Door {

    public static final int CLOSED = 1; public static final int PENING = 2;

    public static final int PEN = 3; public static final int CLOSING = 4;

    public static final int STAYOPEN = 5; private int state = CLOSED;

    //定义状态变量,用不同的整数表示不同状态

    private void setState(int state){ this.state = state;}

    //设置传输门当前状态

    public void getState() {

    //此处代码省略,本方法输出状态字符串,

    //例如,当前状态为CLOSED时,输出字符串为"CLOSED"

    }

    public void click() { //发生click事件时进行状态转换

    if ((1);) setState(OPENING);

    else if ((2);) setState{CLOSING);

    else if ((3);) setState(STAYOPEN);

    }

    //发生timeout事件时进行状态转换

    public void timeout() { if (state == OPEN) setState(CLOSING);}

    public void complete() {//发生complete事件时进行状态转换

    if (state == OPENING) setState(OPEN);

    else if (state == CLOSING) setState(CLOSED);

    }

    public static void main(String [] args){

    Door aDoor = new Door();

    aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();

    aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();

    aDoor.getState();return;

    }

    }

    【Java代码2】

    public class Door {

    public final DoorState CLOSED = new DoorClosed(this);

    public final DoorState PENING = new DoorOpening(this);

    public final DoorState PEN = new DoorOpen(this);

    public final DoorState CLOSING = new DoorClosing(this);

    public final DoorState STAYOPEN = new DoorStayOpen(this);

    private DoorState state = CLOSED;

    //设置传输门当前状态

    public void setState(DoorState state) { this.state=state;}

    public void getState(){ //根据当前状态输出对应的状态字符串

    System.out.println(state.getClass().getName());

    }

    public void click(){(4);}//发生click事件时进行状态转换

    public void timeout(){(5);}//发生timeout事件时进行状态转换

    public void complete(){(6);)//发生complete事件时进行状态转换

    public static void main(String[]args){

    Door aDoor = new Door();

    aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();

    aDoor.getState();aDoor.timeout();aDoor.getState();return;

    }

    }

    public abstract class DoorState { //定义所有状态类的基类

    protected Door door ;

    public DoorState(Door doer) { this.door = door;}

    public void click() {}

    public void complete() {}


    正确答案:(1)state == CLOSED || state == CLOSING (2)state == OPENING || state == STAYOPEN (3)state == OPEN (4)state.click() (5)state.timeout() (6)state.complete() (7)door.setState(door.OPENING)
    (1)state == CLOSED || state == CLOSING (2)state == OPENING || state == STAYOPEN (3)state == OPEN (4)state.click() (5)state.timeout() (6)state.complete() (7)door.setState(door.OPENING) 解析:本题考查的是状态转换图的程序设计与实现。
    空(1)、(2)和(3)需要根据状态转换图来填写,空(1)、(2)和(3)所在的方法为click,表示当发生click事件时应该发生什么状态转换。根据代码可知,发生click时,状态分别跳转到OPENING,CLOSING和STAYOPEN,则发生click前的状态由状态转换图可以得到,分别为CLOSED或CLOSING、STAYOPEN或OPENING以及OPEN。
    代码2中空(4)、(5)和(6)考查当发生click、timeout以及complete事件的时候,状态应该如何迁移。类Door的state成员变量用于记录类Door所处的状态,而state变量的类型为DoorState,DoorState中分别具有click、timeout和complete方法用来响应对应的事件,因此,空(4)、(5)和(6)分别为state.click()、state.timeout()和state.complete()。
    空(7)主要考查门的当前状态为CLOSED时候,发生Click事件时状态的迁移,根据状态图可知,CLOSED状态的在Click事件下将迁移到OPENING,因此,此处应该将传输门状态设置为OPENING,DoorState变量存储了当前其存储的传输门的实例,因此,可直接调用其方法setState设置状态,由于传输门状态采用类的实例变量表示,所以此处应该填写door.setState(door.OPENING))。
    代码1和代码2的区别是:代码2将状态间的转换规则封装到具体的类中,当状态转换图的转换规则发生变化时,只需更改部分对应类中的状态迁移规则,而代码1中的迁移规则散落在程序中,维护起来较为困难。