41、42、43、当UML状态图用于对系统、类或用例的动态方面建模时,通常是对( )建模。以下UML状态图中,假设活动的状态是A,事件b=0发生并且a>5,发生条件是c状态到d状态的转换条件的是( ),D变为活动的状态,有关状态图的叙述中,不正确的是( )。
1)
A.系统的词汇
B.反应型对象
C.活动流程
D.对象快照
2)
A.一旦状态A的exit动作完成,或如果当前执行do动作,则终止执行
B.一旦状态A和B的所有动作完成
C.一旦正在进行的状态A完成
D.一旦状态B的exit动作完成
3)
A.动作可以在状态内执行,也可以在状态转换时执行
B.当触发转换的事件发生并且转换没有指定的监护条件时,对象将离开当前状态,并且其do动作终止
C.when (b=5)称为时间事件
D.状态由事件触发
参考答案:BBD
答案解析:
- 状态图(state diagram)显示了一个状态机,它强调从状态到状态的控制流。
- 状态机(state machine)是一个行为,它说明对象在它的生命期中响应事件所经历的状态序列以及它对那些事件的响应。
- 状态(state)是对象的生命期中响应事件所经历的状态序列以及它对那些事件的响应。
- 状态图通常包含简单状态和组合状态、转换(事件和动作)。
- 对系统、类或用况的动态方面建模时,通常用状态图为反应式对象建模。
- 反应型(或事件驱动的)对象是这样一种对象,其行为通常是由对来自其语境外部的事件所作出的反应来最佳刻画的。反应型对象在接受到一个事件之前通常处于空闲状态;当它接收到一个事件时,它的反应常常依赖以前的事件;在这个对象对事件做出反应后,它就又变成空闲状态,等待下一个事件。对于这种对象,将着眼于对象的稳定状态,触发从状态到状态转移的事件,以及当每个状态改变时所发生的动作。
- 嵌套在另外一个状态中的状态称为子状态(本题中的A、B为子状态),含有子状态的状态称为组合状态(也叫作超状态,C是组合状态)。状态C完成才会在when b=5[a>5]时,让D进入激活状态,当前状态为A,当A完成时进入状态B,状态B完成后才完成组合状态C。
- 转换是两个状态之间的一种关系,表示对象将在源状态中执行一定的动作,并在某个特定事件发生而且某个特定的警戒(监护)条件满足时进入目标状态。动作是一个可执行的原子操作,是不可中断的,其执行时间可以忽略不计。转换由事件触发,而不是状态由事件触发。
44、45、46、47、股票交易中,股票代理(Broker)根据客户发出的股票操作指示进行股票的买卖操作,设计如下所示类图。该设计采用()模式将一个请求封装为一个对象,从而使得以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作,其中,()声明执行操作的接口。该模式属于()模式,该模式适用于:()。
(1)
A.命令(Command)
B.观察者(Observer)
C.状态(State)
D.中介者(Mediator)
(2)
A.Operation
B.sellOperation/BayOperation/ViewOperation
C.Broker
D.Stock
(3)
A.结构类型
B.结构型对象
C.创建类型
D.行为型对象
(4)
A.一个对象必须通知其他对象,而它又不能假定其他对象是谁
B.抽象出特执行的动作以参数化某对象
C.一个对象的行为决定于其状态且必须在运行时刻根据状态改变行为
D.一个对象引用其他对象并且直接与这些对象通信而导致难以复用该对象
参考答案:AADB
答案解析:
- 简单工厂模式
目的:输入一个符号,制造不同运算类,主题在于封装了类
实现:实现统一接口的类交给一个工厂进行制造 - 策略模式
目的:输入一个类型,可以获得不同的结果,主题在于封装了各种规则(策略)
实现:实现统一接口(协议)的类交给一个上下文管理类 - 装饰模式
目的:原有对象上,扩展其它特性。
实现:把原有对象抽取一级类(协议),二级类继承一级类,三级继承二级类就是装饰类,原有叫做Component,装饰叫做Decorator - 代理模式
目的:原有对象不动,让代理对象实现原有对象的功能,主题在于找人做事
实现: 把代理事件进行抽象,一个实现代理事件类,然后代理类也实现事件协议 类,并拥有原有对象和事件实现类,把原有对象扔给具体实现事件类,这样就相当于代理类完成原有类的动作 - 工厂方法模式
目的:一个工厂造出不同功能的工厂,每个工厂做自己相应的事情
实现:抽象工厂类和具体功能模板类,实现不同工厂类并实现不同模板类,不同工厂返回具体模板的类 - 模板方法模式
目的: 写一个模板类,继承并重写子类
实现: 抽象子类特性,写出模板类 - 外观模式
目的: 不同类的功能,汇总一个类统一出口
实现: 一个类拥有所有功能类引用,提供方法将功能类变成统一出口 - 建造者模式
目的:指挥者来规则建造者,建造者提供不同功能规则组合成一个完整系统
实现:指挥者类持有建造者类引用,抽象建造者功能,实现者按建造者协议,实现不同的系统 - 观察者模式
目的:一个类监听事件,一个类通知做事。达到外部变化内部做出相应动作
实现:订阅者负责收集和通知监听者,监听者得到信息后做出自己的变化所以监听者抽象一个更新操作接口 - 抽象工厂模式
目的:几个工厂的总合体,工厂按照不同协议规范造不同的产品
实现:以实体为出发点,比如数据库中有用户实体和SQL实体等,然后建立这两个实体,再建立抽象实体的操作类,然后抽象操作类工厂 ,建立不同实体操作类工厂,工厂持有操作类并返回,最终实现工厂造出操作类,操作类操作实体。 - 状态模式
目的:一个实体,记录每种情况下的状态
实现:根据实体的需求抽象状态,不同的状态实现 - 适配器模式
目的:在不改变情况下,对某个类的功能进行适配转换成特定功能
实现:把要替换的功能进行抽象出来,然后让适配器实现该功能,并且适配器持有具体特定功能类 - 备忘录模式
目的:将属性备份起来,有时候属性想回到某个结点上
实现:将要备份的属性抽取成类,主类上有这些属性必且可以更改这些属性,管理类负责保存备份数据,方便主类需要时调用管理类当时的属性值 - 组合模式
目的:层级分配,就像OC里面类的层级关系一样,子结点一直组合成一颗大树
实现:抽象组合接口协议,父子组件都实现该接口,父组件包含子组件 - 迭代器模式
目的:集合类和遍历类的关系处理
实现:抽象集合类和抽象遍历类,这样可以实现不同集合(List,Set,Array) 和遍历类循环方法 - 单例模式
目的:全工程中只有这一个内存的类
实现:内存静态,dispatch_once一次初始化 - 桥接模式
目的:主类利用模式可以扩展功能而且不改变原来功能
实现:抽象主体协议,实现类包含具体实现的功能类的引用,抽象功能类包含主体中需要的功能,让实现类部分实现即可 - 命令模式
目的:请求者命令被请求者去做某个事情
实现:请求者发布信息,被请求者接收信息,信息是一个实体类,信息处理又是具体的实体类,信息是多样的可以抽象出来,所以请求者和被请求者都持有信息类, 信息里面有excetue - 责任裢模式
目的:处理者处理自身业务,处理不了转发给其它处理者处理
实现:抽象处理者,持有自身引用处理者为上一级和处理请求方法,然后实现该抽象,在处理请求方法中超过自身能力范围就转发给上级处理 - 中介者模式
目的:两个互相不认识的类,要打通一个功能,需要中间人帮忙介绍
实现:抽象两个对象行为,抽象中介者,这个中介者持有这两个互不认识对象的引用,在中介者里把消息做互相交换,两个人只有中介者的持有 - 享元模式
目的:频繁使用共有一块东西,这块东西效率保证高效,可以考虑享元
实现:工厂是维护共有的东西,并造出用户入口的实体类,当用户频繁使用实体类时可以抽象实体类,工厂持有实体类和共用数据,并造出实体类给用户使用 - 解释器模式
目的:一份需求,不同解释器,去解读信息
实现:抽象解释器,持有要被解释的实体类,具体实现解释器,这样同一个实体类遇到不同解释器解释的东西不一样 - 访问者模式
目的:一群实体类,对不同的访问者呈现不同的反应
实现:抽象元素类,这个元素类持有访问者,抽象访问者类,访问者碰到这个元素产生出不同的特性,这里两个互通功能交给管理者,管理者收集元素,并且分发给不同的访问者 - 原型模式
目的:克隆自身
实现:抽象原型类中有复制方法,重写该方法可以初始化一个新类
本题:
- 将一个请求封装为一个对象,从而使得以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作,此时使用的是命令模式。
- 其中作为声明接口的应该是最高层次。
- 命令模式属于行为型对象模式。
48、49、设有描述简单算术表达的上下文无关文法如下,其中id表示单字母:
E→E+T|T
T→F*T|F
F→id
与使用该文法描述的表达式a+bcd相符的语法树为( ),下图所示有限自动机(DFA)是( )。
1)
A、
B、
C、
D、暂无
2)
A.确定的有限自动机,它能识别以bab结尾的
B.确定的有限自动机,他不能识别以bab结尾的
C.非确定的有限自动机,他能识别以bab结尾的
D.非确定的有限自动机,他不能识别以bab结尾的
参考答案:AD
答案解析:
利用推导式构造语句a+bcd的过程如下:
整理之后的语法树,结构如下:
- 第一空选择A选项。
- 第二空根据有限自动机判断,从初始状态开始,接收字符a可能会保持原状态不变,也可能会转入下一个状态,是不确定的,所以是不确定的有限自动机。其次该自动机识别倒数第3个字符只有a,所以无法识别bab结尾的字符串,第二空选择D选项。
50、函数foo、hoo的含义如下所示,函数调用hoo(a,x)的两个参数分别采用引用调用(call by reference)和值调用(call by value)方式传递,则函数调用foo(5)的输出结果为( )。
A.2,5
B.2,15
C.13,5
D.13,15
参考答案:C
答案解析:
- 值传递是传递变量的值,并不会改变方法外变量的值;
- 引用传递是传递对象的地址,会改变对象本身的值;
根据题干给出的信息,foo(5),在该函数中,初始情况x=5,a=2。
调用hoo(a,x)函数,此时a=2传给hoo函数中的x,并且由于是引用方式,此时x在hoo函数内的修改会影响原a的值(注意区别,hoo函数的x与foo函数的x是不用的局部变量)。同时x=5传给hoo函数中的y,并且是值调用方式,此时y在hoo函数内的修改是不会影响原x的值。
接着分析hoo()函数,x的初始值为2,y初始值为5。执行y=y+10=15,执行x=y-x=15-2=13,此时x的值会传回原foo函数的a,即a=x=13。
返回foo函数进行分析,输出的a和x,取值分别为修改后的13和原数值5。
本题选择C选项。