OO2分析4其他模型2.ppt

上传人:sccc 文档编号:5603822 上传时间:2023-08-01 格式:PPT 页数:58 大小:1.31MB
返回 下载 相关 举报
OO2分析4其他模型2.ppt_第1页
第1页 / 共58页
OO2分析4其他模型2.ppt_第2页
第2页 / 共58页
OO2分析4其他模型2.ppt_第3页
第3页 / 共58页
OO2分析4其他模型2.ppt_第4页
第4页 / 共58页
OO2分析4其他模型2.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《OO2分析4其他模型2.ppt》由会员分享,可在线阅读,更多相关《OO2分析4其他模型2.ppt(58页珍藏版)》请在三一办公上搜索。

1、1,第五章 建立辅助模型,2023/8/1,Junwei Ge,2,Microwave Oven,如何获得行为?,状态图 人的生命货物运输定单 可能需要建模的事物:系统、窗口、控制者、事务、设备、自身类型或角色发生变化的事物。对事物所处的状态及其变迁的考虑:大多数事物在其生命周期中经历了不同的状态;在特定的时间,一个事物精确地位于一个状态;在现实世界存在着引起事物的状态发生变化的事件;事物在其状态间按次序转化;事物从一个状态到另一个状态的转化通常是即时的。当事件发生时,事物可能需要采取一些动作。,事物的一般生命周期形式:目前主要有两种对生命周期进行建模的形式:周期性生命周期 如:飞机、微波炉

2、出生-死亡生命周期 把状态图赋予一个对象 一个对象的状态:创建、状态变化序列、撤消 它有明确的生命期阶段(状态),且需要通过状态分析对其复杂性进行深刻地认识。在实际系统中,无法建立全系统的状态图。为了可视化、详述、构造和文档化一个单独对象的动态特性,状态图可以被附加到类(把一个状态模型作为定义一个类的一部分)、用例或整个系统上。,什么是对象的状态?关于对象状态的不同解释状态=属性 只是一个别名,没有更多的意义状态=属性值没错,但没有必要辨别这么多状态,对象技术词典的另一种定义:对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、情况、条件、形式或生存周期阶段。按某种规定

3、,按对象的属性值划分等价类,2023/8/1,Junwei Ge,6,States,States are used to abstract each stage of a lifecycleLight Globe-on,off,brokenLibrary Book-available,borrowed,lostCar-stopped,accelerating,decelerating,cruisingStates are determined from the rules,policies,regulations and physical laws of the domain being mo

4、deled,例1:一个容量为1000的栈,需要区分几种状态*?,在此例中,每一种状态是一组使对象呈现共同行为规则的属性值组合。,例2:为“设备”对象设立一个属性,名为“状态”。属性值:关闭、待命、运行、故障等。在这里,“状态”是一个专门设置的属性,它的值反映了实际事物的状态。,状态图示例,概念与表示法1、事件 从一般意义上讲,事件是指在时间和空间上可以定位并具有实际意义、值得注意的所发生的事情。在OO中,事件是对一个可观察的事情的规格说明,这种事情的发生可以引发状态的转换。,2023/8/1,Junwei Ge,11,Events,Events are abstractions of inci

5、dents that occur in the domain being modeledLight Globe-power applied/removed,filament breaksLibrary Book-book is requested,book is lost,book is returnedCar-brakes applied/released,accelerator pushed/released,engine started/stoppedEvents tell us that something has happened,通常事件后面还跟有一个监护条件(布尔表达式)。当事件

6、发生后,还要检验其监护条件。如果监护条件为假,则该事件不触发转换。可以按如下的格式定义事件:事件名(用逗号分隔的参数列表)参数的格式如下:参数名:类型表达式参数值由监护条件和动作表达式使用.,2023/8/1,Junwei Ge,13,Events-Representation,In addition to showing Events on the State Chart,they can also be shown on Class Diagrams,概念与表示法1、事件事件可以分为多种:1)信号事件 一个对象对一个信号实例(在不引起混淆的情况下,以下简称信号)的接收,导致一个信号事件。可

7、在一个类的符号中加一个附件的信号栏,列出其能接收的信号。信号可以作为状态机中的状态转换上的动作被发送,或者作为交互中的一个消息被发送。,2)调用事件 对操作的调用的接收(这样的操作由接收事件的对象实现)。调用事件一般来说是同步的。3)时间事件 经过了一定的时间或到了指定日期/时间,导致一个时间事件。时间经历事件能用后跟有计算时间量的表达式的关键词“after”表示,例如:“after(5 秒)”或者”after(从状态A退出后经历了10秒)”。如果没指明时间起始点,那么从进入当前状态开始计时。使用关键字at来指出在某个绝对时间点上发生的时间事件。例如,at(1 Jan 2005,12:00 U

8、T)指出该事件发生在格林尼治时间2005 年1 月1 日的中午12点。,4)改变事件(条件变为真事件)用布尔表达式描述的指派条件变为真,就导致了一个改变事件。与改变事件关联的布尔表达式的值变成真时事件发生一次,即使之后布尔表达式的值变为假,产生的事件仍将保持,直到它被处理为止。用后有跟布尔表达式的关键词“when”表示变为真的条件,比如 when(altitude 1000)可以把其看作是连续测试条件,直到它为真。,2、状态 状态是一个对象的生命期的一个阶段。在该阶段中该对象要满足一些特定的条件、执行特定的活动或等待某个(些)事件。状态表示成四角均为圆角的矩形,并可以分栏:a)名称分栏 b)内

9、部转换分栏:列出对象在这个状态中所执行的内部动作或活动。各表项的表示法的基本格式为:,延迟事件 延迟事件是指在当前状态下暂不处理,但将推迟到该对象的另一个状态下排队处理的事件。用特殊的动作defer表明一个事件被延迟:事件/defer 延迟事件形成了一个事件列表。如果一个事件发生,并被列为延迟事件,则进入队列。一旦对象进入一个不延迟这些事件的状态,就按某种算法从队列中除掉这些事件,这些事件开始发挥作用。有可能在某时刻要撤消延迟事件。伪状态 初始状态是状态图的缺省开始状态,终止状态是状态图执行已经毕后的结束状态。,2023/8/1,Junwei Ge,19,State Transition Ta

10、bles,2023/8/1,Junwei Ge,20,Finding new Transitions,2023/8/1,Junwei Ge,21,Finding new States and Events,3、动作 动作是在状态内或在状态转化时所执行的操作,是原子的和即时的。动作可分为:设置或修改本对象的属性操作;向一个对象发送信号;调用另一个对象的一个可见性为公共的操作;创建或撤消对象;返回一个值或值集;在转换中、在状态的入口、在一个对象处于一个状态的整个期间或在状态的出口,都是执行动作的时机。,保留了一些动作标号,它们不能用作事件名。1)entry/进入动作表达式 在进入状态时首先执行该动

11、作。不能有参数或监护条件。2)exit/退出动作表达式 在退出状态时最后执行该动作。不能有参数或监护条件。3)do/活动 这个标号标识正在进行的活动(“do 活动”)。活动是一个动作表达式,它在执行中可以被事件中断。,活动:在对象处于一个状态中的整个阶段执行的一个动作或动作的集合。活动不是原子的,在执行中可以被事件打断。用特殊的内部转换do来说明执行了进入动作后在一个状态内部所做的工作。一个do转换的活动可能命名另一个状态机(子状态),也可以说明一个动作序列如do/op1(a);op2(b);op3(c)。动作是从不中断的,但动作序列是会中断的。也即,在每两个动作之间(由分号分开),由于事件的

12、出现,导致一个离开此状态的转换。,4、状态转移 状态转换状态间的转移 转换是两个状态之间的一种关系,表示当一个特定事件出现时,如果满足一定的条件,对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作。转换本身也是原子的。,源状态,目标状态,事件名(用逗号分隔的参数表)监护条件/动作表达式,事件可能有参数,这样的参数可由转换中的监护条件和动作使用,也可由与源状态和目标状态相关的退出和进入动作分别使用。,动作表达式是由一些动作组成的动作序列。监护条件是布尔表达式,根据触发事件的参数和拥有这个状态机的对象的属性和链来书写这样的布尔表达式。如果表达式取值为真,则触发转换;如果为假,

13、则不触发转换,而且如果没有其他的转换被此事件所触发,则该事件丢失。在一个状态中,当事件发生时,根据监护条件决定触发那个转换。,对于这样的状态的改变,把转换称为“点火”。如果转换点火,就执行动作表达式(如果有的话)。每次处理一个事件。如果事件没有触发任何转换,就丢弃它。如果在同一个顺序区域(不是在不同的并发区域)里触发了多于1个转换,就只对一个点火。如果这些相冲突的转换具有相同的优先权,就随机地选择和触发一个。转换示例:right-mouse-down(location)location in window/object:=pick-object(location);触发到自身的转换,要先退出当

14、前状态,再进入该状态,这样要执行退出动作和进入动作。即使发生了事件且执行了相应的动作,对象仍然处于原来的状态,故把这样的事件触发的转换称为内部转换。触发内部转换,不需要退出当前状态。,EnterPassword,entry/password.reset()exit/password.test()digit/handle characterClear/password.reset()help/display helpprint/deferdo/suppress echo,内部转换,延迟事件,内部活动,入口和出口动作,状态转换状态内的转移:,5、状态图 一个状态图描述一个对象在其生命期内响应事件所

15、经历的状态序列,以及对这些事件所做出的反应。通常用状态图描述类的行为,也可以用它描述其他模型实体(如用例、参与者、子系统)的行为。,状态图示例,例题1 下图描述了一个负责监视某些传感器的控制器的状态机。,clearing,例2 绘制一个状态图,它能分析如下格式的字符流:字母串;如deFCAccount;,Waiting,GettingToken,GettingBody,Put(c)c/return false,Put(c)c=“,Put(c)c/token.append(c);return false,Put(c)c;/body.append(c);return false,Put(c)c=;

16、/return true,Put(c)c=“,开门,关门,开门,关门,按按纽,开门,按按纽,开门,按按纽,定时器时间到,定时器时间到,例3 为简易微波炉(只有一个按钮)建模,2023/8/1,Junwei Ge,35,Creating and Deleting Objects,6、组合状态(1)语义 组合状态是由两个或多个子状态构成的状态,其中的子状态是顺序的或并发的,而且子状态还可以是组合状态。,(2)表示法 把组合状态展开是为了表示它的内部状态机结构。除了(可选的)名称和内部转换分栏外,状态可以包含容纳嵌套图的附加分栏。通过在图形区域里显示嵌套状态图,把状态展开,表示其不相交的子状态。,顺

17、序子状态示意图,并发子状态示意图 从带有正交区域的组合状态内的任一状态离开的转移导致控制离开所有的其他正交区域。这种转移通常表示有错误发生或例外发生,从而迫使所有并行计算都被中断。,用虚线划分图形区域,以表示把状态展开,描述其并发的子状态。由于一个对象可以同时处于几个状态,所以也可以显示该对象当前状态的一个列表。,建立状态图对对象的状态变迁建模,应遵循如下策略:n 设置状态机的语境n建立初始状态和终止状态。n 选定对象中的一组有意义的对对象状态有影响的属性,结合有关的事件和动作,对象可能在其中存在各段时间的条件,以决定该对象所在的稳定状态。n在对象的整个生命期中,决定稳定状态的有意义的偏序。从

18、初态开始到终态,列出这个对象可能处于的顶层状态n决定这个对象可能响应的事件。可在对象的接口处发现这些事件,并给出一个唯一的名字。这些事件可能触发从一个合法状态到另一个合法状态的转换。n 用被适当的事件触发的转换将这些状态连接起来,接着向这些转换中添加事件、监护条件或动作。对于内部转换也是如此。n识别各状态的进入或退出的动作n 如果需要,从这个对象的高层状态开始,然后考虑各自的可能子状态,用子状态进行扩充。,n 检查l 检查在状态机中提到的所有事件是否和该对象接口所期望的事件相匹配。类似地,检查该对象的接口所期望的所有事件,是否都被状态机所处理。l 检查在状态机中提到的所有动作是否被闭合对象的关

19、系和操作所支持。l通过状态机,跟踪检查事件的顺序和它们的响应,尤其要努力地寻找那些未达到的状态和导致状态机不能走通的状态。l 在重新安排状态机后,按所期望的顺序再一次检查,以确保你没有改变该对象的语义。,讨论:1.建立微波炉的状态图。2.在图书馆中,购入的书在半个月内为新书,以后为旧书。书无论新旧,都可以向外借阅。针对上述要求建立状态图。3.针对简易电梯,建立状态图。,2023/8/1,Junwei Ge,42,A Better Microwave,Build a better Microwave OvenA plate that rotates when the oven is in the

20、 cooking stateA better beeper,2023/8/1,Junwei Ge,43,Ovens State Chart,2023/8/1,Junwei Ge,44,A Better Microwave,Note.These are trivial state models at present,but we will model a more complex beeper later.We could also model a more complex plate(eg.Rotating one way then reverse),2023/8/1,Junwei Ge,45

21、,Sending signals,2023/8/1,Junwei Ge,46,Sending Signals with Parameters,47,第五章 建立辅助模型,包图 对一个较为复杂的系统建模,要使用大量的模型元素,这时就需要把这些元素分组进行组织。这样把在语义上接近且倾向于一起变化的模型组织在一起,不但控制模型的复杂度,有助于理解,而且也有助于按组控制元素的可见性。,概念与表示法 包是对模型元素分组的机制。使用包的最常见目的是把建模元素组织成为组,作为一个集合进行命名和处理。包可以拥有类、接口、构件、节点、用例和图,甚至可以是其他包。拥有是一种组成关系。如果包被撤消了,元素也要被撤消

22、。一个元素只能被一个包所拥有。设计良好的包,把在语义上接近并倾向于一起变化的元素组织在一起。因此结构良好的包是松耦合、高内聚的,而且对其内容的访问具有严密的控制。,编号 包名类名 类名 类名,包名,包名,半展开方式,压缩方式,全展开方式,包的层次性 因为包中还可以有包,这样包之间可以有一个层次,且在组织结构上是一棵严格的树。在实际使用中,最好要避免过深地嵌套包,一般两、三层即可。,对包中元素的命名 一个包形成了一个命名空间,这意味着在一个包的语境中同一种元素的名字必须是唯一的。例如,同一个包不能拥有两个名为Queue的类,但在P1包中可以有一个名为Queue的类,而在P2包中又有另一个(不同的

23、)名为Queue的类。实际上,类P1:Queue和类P2:Queue是不同的类,这可以由各自的路径名区别开来。如果一个包位于另一个包中,外层包可作为里层包的前缀。例如,在包Vision中有一个名为Camera的类,而包Vision又在包Sensor中。类Camera的全名为Sensor:Vision:camera。在一个包中不同种类的元素可以有相同的名字。这样,在同一个包中,对一个类命名为Timer,对一个构件也可以命名为Timer。为了不造成混乱,最好对一个包中所有元素也都唯一地命名。如果包的内容没有被显示在大矩形中,那么可以把该包的名字放在大矩形中。如果包的内容被显示在大矩形中,那么可以把

24、该包的名字放在左上角的小矩形中。,包中元素的可见性:(公共的):标有“+”号的模型元素对所有的引入包以及它们的后代是可见的。包的各公共部分一同构成包的接口。(私有的):标有“”号的模型元素只对包内的元素(不包括子包)是可见的。(受保护的):标有“#”号的模型元素只对那些与包含这些元素的包有泛化关系的子包是可见的。(包范围的):标有“”号的模型元素只对在同一包内声明的其他元素是可见的。,包间的关系定义 引入依赖是两个包之间的一种许可依赖关系,一个包中的可见性为公有的模型元素,可以在指定的包(包括嵌套在该包中的子包)中被引用,相当于把提供者包的内容附加到客户包的公共命名空间中,而不必对名称进行限制

25、。把引入依赖绘制成带有箭头的虚线,其上标有串。定义 访问依赖是两个包之间的一种许可依赖关系,一个包中的可见性为公有的模型元素,可以在指定的包(包括嵌套在该包中的子包)中被引用,相当于把提供者包的内容附加到客户包的私有命名空间中,而不必对名称进行限制。把访问依赖绘制成带有箭头的虚线,其上标有串。包间的泛化关系与类间的泛化很类似,即特殊包可以继承一般包中的可见性为公共的或受保护的元素,而且在特殊包中还可以有自己的元素,自己的元素可以覆盖继承来的元素。,Server,-Database-LoggingService,Client,+OrderForm+TrackingForm-Order,Polic

26、ies,+OrderRules,GUI,+Window+Form#EventHandler,Policies显式地引入包GUI。因此,对于类GUI:Window和类GUI:Form,包Policies的内容使用简单名Window 和Form 就能访问它们。引入和访问依赖是传递的。Client的内容可以访问Policies的引出,同样可以访问GUI的引出。如果Policies访问GUI,Client则不能把GUI中的元素添加到自己的命名空间,但是仍然能通过限定名(如GUI:Window)引用它们。,import,import,嵌套的包之间也存在着可见性问题:1)里层的包中的元素能够访问其外层包中

27、定义的可见性为公共的元素,也能访问其外层包通过访问或引入依赖而得来的元素。2)一个包要访问它的内部包的元素,要与内部包有引入、访问关系或使用限定名。3)里层包中的元素的名字会掩盖外层包中的同名元素的名字,在这种情况需要用限定名引用外层包中的同名元素。,如何划分与组织包识别低层包具有泛化关系或聚合关系的元素位于一个包关联密集的类划分到一个包独立的类暂时作为一个包合并或组织包 若低层包之间在概念上接近或具有较强的相关性,从作用上属于某项大的功能,在图上有较强的耦合性,或在分布上处于同一台处理机,则考虑把它们合并,或用高层包组织它们。组织包的层次层次不宜太多 包的划分不是唯一的,有一定的随意性标识包中的模型元素的可见性建立包间的关系 根据需要,在包之间建立引入依赖、访问依赖或泛化关系。,包的用处 1、组织相关元素,以便于管理和便于复用。包是一个命名空间,外部使用要加限定名。2、包引入放松了限制。被引入的元素与引入包中的元素可以进行关联,或建立泛化关系。3、便于组合可复用的元建模特征,以创建扩展的建模语言。也即把被合并包的特征结合到合并包,以定义新的语言。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号