版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章分析问题学习目标:理解分析的含义建立静态分析模型理解动态分析如何帮助验证静态模型7.1引言分析是需求和设计之间的桥梁,可以把系统必须提供的服务的清晰陈述转化为对要处理的对象的正确理解。分析是找出系统要处理什么的过程,而不是确定如何处理过程。2023/9/242分析模型的分类分析模型有静态部分和动态部分静态分析:使用类图描述,显示对象及其对象之间的关系动态分析:使用通信图(协作图)证明静态模型是可行的2023/9/243分析的来源业务需求模型:描述业务上下文的手工和自动工作流,它使用参与者的面向对象(业务)版本、用例、对象、术语表,有时还有通信图和活动图来描述系统需求模型:包含系统的外部视图,描述为参与者的面向系统版本、用例和用例图、用户界面草案、增强的术语表和非功能需求2023/9/244分析阶段内容分析的来源必须转化为由系统处理的对象模型,以及对象的属性和关系这些对象存在于系统或系统边界上,可以通过一个或多个接口来访问该阶段的大多数对象都对应于真实世界中的物理对象或概念(低级的、面向解决方案的对象要在设计阶段才出现)贯彻“用例驱动”2023/9/245补充:处理过程分析用例用例工程师业务模型[或领域模型]补充需求特征列表用例模型[概况的]分析类用例实现2023/9/2467.2为什么要进行分析分析可防止在彻底理解问题之前设计解决方案不可能仅根据业务需求模型就完全理解问题,只有转化为软件,才有可能引入新的实践2023/9/247分析的作用完成静态分析,客户就能确认我们对业务对象的理解是否正确,之后让对象影响我们的设计完成动态分析,就可以确信分析对象能够支持需要的系统功能2023/9/2487.3分析过程概述使用系统需求模型查找候选的类,以描述与系统相关的对象,并在类图上建立它们确定类之间的关系(关联、聚合、复合和继承)确定类的属性(对象的、已指定的简单特性)2023/9/249分析过程概述检查系统用例,确定已有的对象支持它们。在检查过程中微调类、属性和关系,这个用例的实现过程将生成一些操作,来补充属性需要时更新术语表和非功能需求——用例本身不需要更新,但可能需要某些更正2023/9/2410需要给客户展示的...类图和属性便于客户的理解,有这样纠正错误的分析2023/9/2411不要客户展示的...对象操作或通信图难以被客户理解肤浅的设计,系统用例已演示了动态行为其中隐含编码,暴露秘密在设计之前是要删除的2023/9/24127.4静态分析静态分析确定系统的逻辑或物理部分,以及如何把它们连接在一起,即描述如何构建和初始化系统2023/9/24137.4.1确定类为了检查业务需求建模和系统需求建模,以系统用例的形式抽取出候选类候选类常常在用例中用名词表示2023/9/2414确定类不适合作为候选类的名词:系统本身参与者(例外:需要在内部存储参与者的信息)边界小类型(字符串或数字)2023/9/24157.4.2标识类的关系依赖泛化(继承)关联聚集复合(组合)实现2023/9/24161.依赖定义:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。表现:依赖关系表现在局部变量,方法的参数,以及对静态方法的调用2023/9/2417依赖实例:比如说拧螺丝,要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作代码:public
class
Person{
/**
拧螺丝
*/
public
void
screw(Screwdriver
screwdriver){
screwdriver.screw();
}
}
2023/9/24182.泛化(继承)关系定义:表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。表现:父类父类实例=new子类()
2023/9/2419泛化代码class
Animal{}
class
Tiger
extends
Animal{}
public
class
Test
{
public
void
test()
{
Animal
a=new
Tiger();
}
}
2023/9/24203.关联关系定义:对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系表现:关联关系是使用实例变量来实现
2023/9/2421关联实例:比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司2023/9/2422关联代码public
class
Company{
private
Employee
employee;
public
Employee
getEmployee(){
return
employee;
}
public
void
setEmployee(Employee
employee){
this.employee=employee;
}
//公司运作
public
void
run(){
employee.startWorking();
}
}
2023/9/24234.聚合关系定义:当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合(聚集)关系。聚合是关联关系的一种,是较强的关联关系(强关联),强调的是整体与部分之间的关系,即“has-a”关系聚合的整体和部分之间在生命周期上没有什么必然的联系,部分对象可以在整体对象创建之前创建,也可以在整体对象销毁之后销毁。2023/9/2424聚合关系表现:与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。2023/9/2425关联与聚合的区别关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。
2023/9/2426聚合关系publicClassPerson{...}publicClassSchool{ privateArrayListstudents; privatevoidaddStudent(Personperson) { students.add(person); }}2023/9/2427聚合关系public
class
Computer{
private
CPU
cpu;
public
CPU
getCPU(){
return
cpu;
}
public
void
setCPU(CPU
cpu){
this.cpu=cpu;
}
//开启电脑
public
void
start(){
//cpu运作
cpu.run();
}
}
2023/9/24285.复合关系复合(强聚集,组合,合成):复合的对象不能由其他对象共享,且与构成它的对象一齐消亡它带有很强的拥有有关系且整体与部分的生命周期一致的聚合关联形式。例如Windows的窗口和窗口上的菜单就是组合关系。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超出组合的生命周期。组合是用带实心菱形的实线来表示。2023/9/2429复合关系 publicClassWindow
{
privateMenumenu;
publicWindow()
{
menu=newMenu();
}//可以在这时候创建Menu对象,也可以在之后创建
publicvoiddestory()
{
menu.destory();
}//必须同时或者在这之前销毁关联的Menu对象
}2023/9/2430举例School与Student是什么关系? publicClassSchool
{
publicSchool()
{...}//不需要创建任何Person对象,其Students都是已有的Person对象
publicvoiddestroy()
{...}//只需要关掉School对象和断开它与自己所有的Person对象的关联即可,Person对象是不会销毁的
}聚合关系2023/9/24316.实现关系实现:指的是一个类元描述了另一个类元保证实现的契约。对类来说,就是一个类实现了一个接口2023/9/2432举例:实现关系 publicinterfaceA
{
publicvoidmethodA();
}
publicclassBimplementsA
{
publicvoidmethodA()
{...}
...
}2023/9/2433总结一般对类关系建模的时候,先对泛化、关联和实现建模,剩下的关系都可以看作依赖。2023/9/2434标识类的关系使用频率:关联>聚合>继承>复合就设计和实现而言,关联、聚合和复合之间的区别很难界定2023/9/24357.4.3绘制类图和对象图类图显示存在哪些类,这些类有什么关系(正式的类图还可以显示属性和操作)对于聚合、复合和关联,类图显示了可能的运行时关系,而不是显示实际运行时关系2023/9/2436iCoot的分析类图2023/9/2437用UML描述运行时的对象2023/9/24387.4.4绘制关系继承关系2023/9/2439绘制关系聚合关系2023/9/2440绘制关系复合关系2023/9/2441绘制关系关联关系2023/9/24421.多重性在类的两端标识允许参与关系的运行时对象的数量(关系中的多重性)n:表示nm..n:m到n范围内的任意数值(包含m和n)p..*:从p到无穷大的任意数*:0..*的缩写0..1:可选2023/9/2443多重性2023/9/24442.关联标签、角色和注释除了继承之外的所有关系都可以给定一个关联标签,它表示关联的性质如果关联名称的理解方式不明显,就可以使用一个黑色的箭头2023/9/2445UML中的关联标签、角色和注释2023/9/2446iCoot的分析类图2023/9/2447用UML描述运行时的对象2023/9/24487.4.5属性属性是对象的一个特性,例如对象的大小、位置、名称、价格、字体、利率等。在UML中,每个属性都可以指定一个类型,可以是类或原型通过分割线,显示类名和属性2023/9/2449用UML描述属性2023/9/2450避免做的事情...避免在UML使用独立于语言的表示法定义自己的原型,如integer、Real和Boolean,因为在开始设计时,就必须考虑与特定语言相关的内容避免使用数组类型,因为它是对象和原型的交叉,使用集合类(List或Set)会更好2023/9/2451避免做的事情...避免在制品中包含派生的属性,如圆的属性包括半径、直径、周长和面积2023/9/2452iCoot的属性2023/9/2453选择属性还是关系如何为Car的颜色建模?2023/9/2454在属性和关系之间选择一部分用户角度心理学家汽车厂家2023/9/24557.4.6关联类2023/9/2456关联类关联偶尔也有与它相关的信息或行为关联类可以和关联一起引入关联类表示的属性和操作仅因为关联关系的存在而存在在设计时,必须用更具体的类替换关联类2023/9/24577.4.7有形对象和无形对象无形对象建模:如目录中描述的产品有形对象建模:如送到门口的实际产品2023/9/2458有形对象和无形对象2023/9/24591.错误的建模为了清单有形性问题,假定除了销售汽车之外,经销商还给顾客提供服务2023/9/2460建模信息与销售相关的信息包括:modelNumberavailableColorsnumberOfCylinders与服务相关的信息包括:OwnervehicleIndentificationNumbermileageAtLastService2023/9/2461错误的建模避免使一个类有两组完全不同的任务——这种类的内聚力很脆弱,它们的任务也不会构成一个模块2023/9/2462错误的建模2023/9/24632.正确的建模2023/9/2464正确的建模2023/9/2465练习4考虑一个视频出租系统。下列图中哪个图是正确的?2023/9/24667.4.8好的对象类取自用例中的名词对象是具体的事物,是对类的实例化对象拥有属性对象能做什么,即对象操作建议:在动态分析类之前,不要过多地关注操作2023/9/24677.5动态分析进行动态分析的原因:确认类图是完整、正确的,以便尽早更正错误,包括添加、删除或修改类、关系、属性和操作相信当前的模型可以在软件中实现验证最终系统上用户界面的功能:在进行详细设计之前,最好按照用例中的线条,把对系统的访问放在各个界面上2023/9/2468用例实现动态分析中最重要的部分就是用例的实现2023/9/2469用例实现的步骤检查系统用例,模拟对象之间发送的消息,在通信图上记录结果在接收消息的对象上引入操作根据需要添加类,以标识边界(系统接口)和控制器(复杂业务过程的占位符或者对象的创建和检索)2023/9/24707.5.1绘制用例的实现过程为分析对象之间传送消息的过程,需要用到UML通信图和顺序图相对而言,通信图更适合用例的实现,仅关注对象及其连接,不考虑消息发送的顺序2023/9/2471U7:进行预约的通信图2023/9/2472分析级的通信图可以显示...与系统边界交互的参与者与系统内部的对象交互的边界系统内部的对象与外部系统的边界交互2023/9/24737.5.2边界、控制器和实体为表达额外的信息,UML允许开发人员使用图标代替标准的对象方框2023/9/2474边界、控制器和实体2023/9/2475参与者参与者:存在于系统外部的人或系统2023/9/2476边界边界:位于系统边缘上的对象,在系统和参与者之间。对象系统参与者,边界提供了通信途径。对于作为参与者的人,边界表示用户界面,以执行命令和查询,显示反馈和结果。每个边界对象通常都对应于一个用例或一组相关的用例,通常映射到一个用户界面草案2023/9/2477实体实体:系统内部的一个对象,表示一个业务概念,如顾客、汽车或型号一般实体由边界和控制器操作,而不是自己的行为实体类出现在分析类图中,大多
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 就业协议与劳动合同的五大区别点
- 受托收款合同范本
- 承揽合同与劳务分包合同的差异解读
- 服务终止合同
- 食品果蔬购销合同
- 定制月饼销售协议
- 砂石材料买卖合同样本
- 合同违约责任合同仲裁
- 变压器设备采购合同示例
- 废止采购合同事项
- 国培参考老头子做事总不会错PPT课件
- 青岛版数学五年级上册:口算、笔算、简算、方程
- 年晋升司机理论考试HXD1专业知识题库
- 批发零售大个体 E204-3批发和零售业产业活动单位(个体经营户)商品销售和库存
- 单斗反铲挖掘机动臂设计计算说明书
- 《消化道出血》优秀课件
- 苯氯苯连续精馏塔设计二设计正文
- 焊缝焊条用量的计算公式
- 人员编制及岗位调整表.doc
- (推荐)浅谈初中学生英语写作中存在的问题、原因及解决策略
- 七年级历史教案:林则徐的教学设计
评论
0/150
提交评论