软件工程实验课05授课老师:张志青副教授根据用例规约提取分析类编写类的属性、方法和职责分析、讨论类图与对象图分析、讨论顺序图与协作图分析、讨论状态图与活动图分析、讨论构件图与部署图学习目标:实验任务各组讨论,评分评分标准:讲述:20分内容:60分完整修改:20分完善实验课后完成提交修改版本提交截止日起:下周结束前类的提取与设计类的种类边界类实体类控制类参数类类的提取掌握类的概念及作用学会在用例及其行为描述中提取类(属性和操作)。类的提取定义系统对象类如上述所说的实体类的定义定义用户界面类如:类MainWindow是系统的主界面,系统的主界面有菜单和菜单项实体类的识别实体对象是实体类的实例用来保存或更新关于某个现象的信息通常是持久性的独立于它们的环境、独立于应用程序通常是那些被系统用来完成某些责任的类如图书管理系统中的借阅者,物理书刊,借阅记录等分析类寻找过程***分析类经验法则每个类大约3~5个职责不存在独立的类当心非常小的类当心几个非常庞大的类当心“伪类”当心万能类避免深度继承类分析类寻找过程***“寻找类”Meyer(软件工程专家)在其著作中指出:不存在找出恰当分析类的简单算法,如果这样的算法存在,那么意味着存在没有错误的方法来设计OO软件,这同找出没有错误的方法证明数学定理一样是不可能的。仍然存在导致良好答案的已尝试和测试的技术,来做这件事。分析类寻找过程***1)名词/动词分析寻找类它是基于问题域语言的直接分析经验法,因此要求分析人员对问题域要有尽可能多的了解。名词/名词短语----类/类的属性动词/动词短语----职责/类的操作用颜色/字体标识文档,找出候选类及属性,分配属性,关联类,精化。分析类寻找过程***2)CRC寻找类类、职责、协作者。(制作便笺,或在ROSE中制作类图)阶段1:脑力风暴----收集信息阶段2:分析信息类名职责协作者分析类寻找过程***3)创建初步分析模型(类图)比较上述两种方法得到的结果从结果中整合出分析类、职责、属性,并把它们制作中ROSE中(或其它CASE工具)。协作者代表类间的关系按照标准命名约定来改进CRC的命名类名的定义每个类都有一个名字,跟其他的类相区别在实践中,类名通常用问题域中的短名词或名词词组来表示类名中的每个组成词的第一个字母大写类的命名尽量用问题域中的术语,应明确无歧义类的属性原则上类的属性应能描述并区分每个特定的对象只有与系统有关的特征才包含在类的属性中系统建模的目的也会影响到属性的选取根据图的详细程度,每个属性可以包括属性的可见性、属性名称、类型、缺省值和约束UML规定类属性的语法为:【可见性】属性名【:类型】【=初始值】【{属性字符串}】【】中的部分是可选的实践中属性名用短名词或名词短语类的操作UML规定操作的语法为:【可见性】操作名【(参数)】【:返回类型】【{属性字符串}】实践中操作名用短动词或动词短语可见性---类、包Public(+)Theelementisvisibleoutsideoftheenclosingpackageandyoucanimportittootherportionsofyourmodel.Operationsareaccessibletoallclients.Protected(#)Theelementisaccessibleonlytonestedclasses,friends,ortotheclassitself.Private(-)Theelementisaccessibleonlytonestedclasses,friends,ortotheclassitself.ImplementationTheelementisvisibleonlyinthepackageinwhichitisdefined.Anoperationispartoftheimplementationoftheclass.图示可见性确立关系1)依赖关系2)类属关系(泛化关系)3)关联关系4)聚合关系5)组合关系6)实现关系分析教材P182-P191关系建立关联创建角色确定重数高级关联分析讨论类图类图的主要组成类接口协作依赖、类属、实现或关联关系注释和约束类图元语-1类第一栏是类名,第二栏是类的属性,第三栏是类的操作包包表示一个类图的集合对象对象是类的一个实例关联关联用于表示类的对象之间的关系,其特殊形式有组成关联和聚集关联聚集关联聚集关联用于表示类的对象之间的关系是整体与部分的关系组成关联组成关联用于表示类的对象之间的关系是整体拥有各部分且部分与整体共存亡Package类图元语-2链接链接用于表示对象之间的关联关系的一个实例泛化关系泛化关系(继承关系)定义类和包之间的一般元素和特殊元素之间的分类关系依赖关系有两个类或包X、Y,修改X的定义引起对Y的定义的修改,则称Y依赖于X注释体注释体用于对UML实体进行文字描述注释连接注释连接将注释体与要描述的实体相连类图的划分概念层(Conceptual)概念层类图描述问题域中的概念说明层(Specification)说明层类图描述软件接口部分实现层(Implementation)实现层才真正有类的概念,并且揭示软件的实现部分对象图——ObjectDiagrams对象图模拟类图中所含有的类的实例,对象图是描述某一瞬间对象集及对象间的关系对象图为处在时域空间某一点的系统建模描绘系统的对象、对间的状态及对象间的关系主要用于对象结构建模对象图的组成部分对象连接注解和约束对象图的获得对象图(ObjectDiagrams)模拟类图中所含有的类的实例,对象图描述了某一瞬间对象集及对象间的关系。对象是类的实例,对象之间的连接(Link)是类之间的关系关系的实例。对象图对象图说明了一个给定上下文或场景中的一组对象和它们之间的关系。它包含对象和链。链是对象之间的语义连接。UML对象图是类图在运行时的映像,是一组对象的生命周期的一个快照。类似于一个公司的收支表,它只在打印或绘制时才是有效的。但根据不同的读者,有时对象图有助于从运行时角度来描述类。对象结构建模的注意事项确定要模拟的机制对于每个机制,识别参加这个写作的类、接口等交互作用产生的关系如果必要,揭示没给对象的状态和属性值类似的,揭示对象间的连接,这些连接是关联关系的实例如何做顺序图与协作图用例描述的另一有力工具---顺序图。顺序图SequenceDiagram序列图描述对象是如何交互的,即描述消息如何在对象间发送和接收。纵轴时间、横轴对象。序列图以可视化方式为系统中逻辑的流程建模,通常用于(用例)分析和设计阶段。顺序图示例协作图协作图是方案的另外一种图形代表协作图可以独立地被建立直接从序列图中建立同一个类的多个对象消息可以发送给同一个类的多个对象这些可以通过堆栈对象图标来实现反身消息对象可以同自己进行合作它可以通过反身消息来描述移动或插入消息在协作图中消息不能被移动或插入序列图必须被使用过程转换序列图移动或插入需要的消息转换回协作图数据(对象)流程在图中可以描述数据的返回值只能描述重要的数据返回注释注释可以被附属在协同图的任何一个实体上状态图与活动图一、状态图-1主要使用场合:系统分析(类)、设计定义:StatechartDiagram用于利用状态和事件描述对象本身的行为。状态:给定类的对象的一组属性值事件:某特定环境的发生转移:从一个状态转变为另一个状态状态图-2状态和转移所有对象均有状态,状态是对象上一次操作的结果。事件的动态性:交互、内部状态改变状态的动作:接收参数、正常/异常退出子状态与并行状态子状态--继续变化的状态顺序子状态、并发子状态状态图-3显示一个对象在其生命期响应外部激励和消息所经历的状态的序列。状态图描述了:给定类的状态转换空间导致状态转换的事件导致状态改变的动作为类的重要动态行为建立状态转换图活动图-1定义:ActivityDiagram它是一种变种的状态图,通过动作来组织,主要用于描述某一方法、机制或用例的内部行为。它依据对象状态的变化来捕获动作与动作的结果。活动图能够表达顺序流程控制和并发流程控制,并发活动可以同时执行也可以顺序执行。如果排除了这一点,活动图很像一个传统的流程图。活动图-2它可以:描述一个操作执行过程中所完成的工作;描述对象内部的工作;显示如何执行一组相关动作,以及这些动作如何影响它们周围的事物;显示用例的实例是如何执行动作及如何改变对象状态;说明一次业务活动的工人(角色)、工作流、组织和对象是如何工作的。活动图-3活动图显示系统中从一个活动到另一个活动的流。活动是状态机中的一个非原子元素。状态机对个体对象的行为建模。每个活动将产生一个动作。动作将导致对象状态的改变,对另一个对象的调用或将一个值返回给调用者。活动图由对象、动作状态、活动状态和转换组成。试验步骤—状态图1.模拟一个特定的对象—模拟对象按事件排序的行为2.提取该对象所有可能的状态以及引起状态跃迁的事件3.编写状态图状态图的基本元素简单状态、复合状态跃迁,包括事件和动作注解及约束状态图相关概念状态图(StatechartDiagrams)状态机(StateMachine)状态(State)事件(Event)跃迁(Transition)活动(Activity)动作(Action)状态图示例-1:“图书”新书状态待入库状态待借状态借出状态订购新书/采集图书信息新书入库借阅图书归还图书状态图示例-2:“商品”WaitingForSaleEnteringItemsenterItemWaitingForPaymentendSalemakePaymententerItem状态图示例-3状态图—选课选课对应的代码…intsum=0;…Publicintregister(students){switch(state){caseOpen;if(sum56){state=Open;sum=sum+1;}elsestate=close;break;caseClose:System.out.println(“theclassisfull”);}returnsum;}试验步骤—活动图1.模拟一个个体对象2.抽象出对象的行为—动作状态3.确定活动状态和转换4.编写活动图活动图的基本元素活动图是根据对象状态胡变化来确定动作与动作的结果,是特殊的状态机。活动状态与动作状态跃迁对象活动图示例-1:“借书用例查询图书信息选择借阅所需的图书[找到所需的图书][没有找到][不允许借阅]借阅图书[允许借阅]记录借阅信息活动图示例-2:-找饮料找饮料没有咖啡将咖啡放到过滤器中加水到容器中取出咖啡杯把过滤器放到咖啡炉上点燃咖啡炉冲调咖啡倒咖啡喝饮料取一听可口可乐找到可乐判定活动同步条活动起点终点找到咖啡活动图示例-3活动图示例-4组件图定义:也可叫作构件图ComponentDiagram描述在系统实现环境中的软件构件和它们间的关系组件图组件图中包括组件、接口及其关联。一个组件可以包括多个类。组件的接口和类的接口是相同的概念。外部只能通过组件的接口来使用组件中定义的操作。提供服务的组件提供了输出接口,访问服务的组件使用了输入接口。组件接口是组件重用中的重要概念。组件类型:工作产品组件、执行组件。构件用一边有两个小矩形的一个长方形表示,它可以用实线与代表构件接口的圆圈相连(如下图)。组件图2构件图表示了构件之间的依赖关系(如下图)。每个构件实现(支持)一些接口,并使用另一些接口。如果构件间的依赖关系与接口有关,那么构件可以被具有同样接口的其他构件替代。组件图2组件图的应用1.为源代码建模2.为可执行版本建模3.为数据库建模4.为自适应系统建模构件图元语构件构件代表可执行的物