资源描述
*,*,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第十章 面向对象分析,面向对象分析的基本过程,需求陈述,建立对象模型,建立动态模型,建立功能模型,定义服务,面向对象分析的基本过程,概述,三个子模型与五个层次,Object model:,最重要,开发任何系统都需要;,Dynamic model:,对于开发交互式系统(interactive system),很重要;,Function model:,对于开发大运算量问题(如科学计算、编译系统等)很重要。,Object model 由五个层次组成(Coad&Yourdon,1991),相当于把五张透明胶片(transparencies)叠在一起,每一层显示更多的细节。,需求陈述,10.2.1 书写要点,10.2.2 例子,需求陈述,书写要点,问题范围,功能需求,性能要求,应用环境,假设条件,建立对象模型,确定类一&一对象,列出所有候选对象(candidates),它们可能是,物理实体 人或组织 要处理的事件 对象间的活动 抽象概念,去粗取精,建立对象模型,确定关联,收集,需求陈述中涉及objets,的动词短语,需求陈述中隐含的关联,根据问题域知识得出的关联,建立对象模型,确定关联,筛选,删除,与已删去的object,有关的关联,与问题无关的或应在实现阶段考虑的关联,瞬时事件:注意关联描述静态结构,三元关联:分解为二元关联或限定关联,派生关联:即可用其它关联定义的冗余关联,完善,正名分解,补充,标明阶数,建立对象模型,10.3.1 确定类一&一对象,10.3.2 确定关联,10.3.3 划分主题,10.3.4 确定属性,10.3.5 识别继承关系,10.3.6 反复修改,建立对象模型,划分主题,按问题域而不是按功能分解,主题间的依赖和交互尽可能少,确定属性,Attribute,不表示 objects 之间的关系,只表示其本质性质,不要与链属性、限定词混淆。,暂不考虑纯用于实现的 attributes(即单纯的内部状态)。,需求陈述中与已确定的 objects 有关的名词、形容词可能是选择的线索,10.3.5 识别继承关系,10.3.6 反复修改,建立动态模型,10.4.1 编写脚本,10.4.2 设想用户界面,10.4.3 画事件跟踪图,10.4.4 画状态图,10.4.5 审查动态模型,建立动态模型,画事件跟踪图,确定事件,画出事件跟踪图,画状态图,审查动态模型,建立功能模型,10.5.1 画出基本系统模型图,10.5.2 画出功能级数据流图,10.5.3 描述处理框功能,第十一章 面向对象设计,面向对象设计的准则,启发规则,软件重用,系统分解,设计问题域子系统,设计人机交互子系统,设计任务管理子系统,设计数据库管理子系统,设计类中的服务,设计关联,设计优化,面向对象设计的准则,11.1.1 模块化,11.1.2 抽象,11.1.3 信息隐藏,11.1.4 弱耦合,11.1.5 强内聚,11.1.6 可重用,面向对象设计的准则,模块化,抽象,抽出事物的本质特性,暂不考虑其细节,使设计从具体实现方法中超脱,信息隐藏,弱耦合,交互耦合(interactive coupling):,通过传递message发生,继承耦合,面向对象设计的准则,强内聚,服务内聚(service cohesion):,一个服务只完成一个功能,类内聚(class cohesion):,一个类只有一个用途,否则分解之,一般-特殊内聚,可重用,启发规则,11.2.1 设计结果应该清晰易懂,11.2.2 一般-特殊结构的深度应适当,11.2.3 设计简单的类,11.2.4 使用简单的协议,11.2.5 使用简单的服务,11.2.6 把设计变动减至最小,启发规则,使用简单的协议,使用简单的服务,把设计变动减至最小,软件重用,11.3.1 概念,11.3.2 软件重用的效果,11.3.3 软件重用技术,11.3.4 类构件,软件重用,概念,知识重用(例如软件工程知识的重用),方法和标准重用,软件成分的重用,代码重用,设计重用,分析重用,软件重用,软件重用技术,指利用可重用的构件开发软件的技术,及开发可重用软件的技术,软件组合技术,底层部件库法(Bottom-up compositional reuse):从可重用的代码部件库(reuse repository)中选用部件,组合成软件,软件生成技术,按照形式化的软件功能描述和一定的生成机理,由生成器系统(generator system)自动生成目标程序。重用的是generator 的代码规则,面向对象的重用技术,软件重用,类构件,独立、可塑、接口清晰(文档详尽),实例重用:,创建class的不同instances,通过messages完成,不同的任务。是最基本的重用方式,用几个简单的objects创建出更复杂的class,是实例重用的另一种形式,系统分解,11.4.1 子系统之间的两种交互方式,11.4.2 组织系统的两种方案,11.4.3 设计系统的拓扑结构,系统分解,子系统之间的两种交互方式,客户-供应商(client-server),关系,平等伙伴(peer-to-peer)关系,组织系统的两种方案,水平层次组织:,将系统组织成hierarchy,同一层中的objects相互独立,而上、下层间有 client-server关系,垂直块组织:,将系统垂直分解成若干独立的子系统,一个子系统相当于一块,每块提供一种类型的服务,设计系统的拓扑结构,设计问题域子系统,11.5.1 调整需求,11.5.2 重用已有的类,11.5.3 把问题域类组合在一起,11.5.4 增添一般化类以建立协议,11.5.5 调整继承层次,11.5.6 ATM系统之例,设计问题域子系统,调整需求,重用已有的类,选出可用的class,标出与本问题无关 的 attributes 和 methods,派生出child class,标出继承的attributes 和 methods,修改关联,把问题域类组合在一起,通过引入根类完成,用于建立公共协议,增添一般化类以建立协议,调整继承层次,ATM系统之例,设计人机交互子系统,11.6.1 设计人机交互子界面的准则,11.6.2 设计人机交互子系统的策略,设计人机交互子系统,设计人机交互子界面的准则,一致性,减少步骤,及时提供反馈信息,提供撤销(undo)命令,无须记忆,易学,富有吸引力,联机参考,11.6.2 设计人机交互子系统的策略,设计人机交互子系统,设计人机交互子系统的策略,将用户分类,描述用户的类型、水平、使用目的、其它特征(如年龄、性别、习惯等),写出操作脚本,设计命令层次,设计人机交互类,设计任务管理子系统,11.7.1 分析并发性,11.7.2 设计任务管理子系统,设计任务管理子系统,分析并发性,若两个objects之间无交互行为,或它们同时接受events,则它们本质上是,并发的,考察事件流图,找出没有并发对象的路径(称为,控制线,),每条对应一个,任务,(task,亦称process),不同的tasks对应必须同时发生的不同行为,11.7.2 设计任务管理子系统,设计任务管理子系统,设计任务管理子系统,事件驱动型,时钟驱动型,优先型,关键任务,协调任务,设计数据库管理子系统,11.8.1 选择数据存储管理模式,11.8.2 设计数据管理子系统,11.8.3 例子,设计数据库管理子系统,选择数据存储管理模式,文件管理()系统,关系数据库(Relational Data Base)管理系统,面向对象数据库(OODB)管理系统,设计数据管理子系统,设计类中的服务,11.9.1 确定类中应有的服务,11.9.2 设计实现服务的方法,设计类中的服务,确定类中应有的服务,设计实现服务的方法,设计实现服务的算法,算法复杂度,容易理解与容易实现,易修改,选择数据结构,定义内部类和内部操作,设计关联,11.10.1 关联的遍历,11.10.2 实现单向关联,11.10.3 实现双向关联,11.10.4 链属性的实现,设计关联,关联的遍历,实现单向关联,雇 员,公 司,被雇用,1+,雇 员,雇主,公 司,由雇员找其所属公司,则设雇主为其属性,即一单向指针,设计关联,实现双向关联,链属性的实现,方法1:将上述两种单向关联结合使用,雇 员,雇主,公 司,雇员,指针集,雇 员,公 司,关联类,雇主,雇员,工资,方法2:另设关联类(特别适用于链属性),设计优化,11.11.1 确定优先级,11.11.2 提高效率的几项技术,11.11.3 调整继承关系,设计优化,确定优先级,必须站在,全局,高度确定各项质量指标的优先级,在优化设计时制定折衷方案。切忌各子系统自以为是,导致最终优化目标对立。,最常见的情况是在,效率,与,清晰性,之间的折衷,提高效率的几项技术,增加关联(类),调整继承关系,向上归纳、向下派生、利用委托,第十二章 面向对象实现,程序设计语言,程序设计风格,面向对象测试,程序设计语言,12.1.1 面向对象的语言与非面向对象的语言,12.1.2 面向对象语言的技术特点,12.1.3 选择面向对象语言,程序设计语言,面向对象的语言与非面向对象的语言,一致的表示方法,可重用性,可维护性,程序设计语言,面向对象语言的技术特点,支持类与对象概念的机制,实现整体部分结构的机制,实现一般特殊结构的机制,实现属性和服务的机制,类型检查,类库,效率,持久保存对象,参数化类,开发环境,程序设计语言,选择面向对象语言,将来能否占主导地位,可重用性,类库和开发环境,其他因素,程序设计风格,12.2.1 提高可重用性,12.2.2 提高可扩充性,12.2.3 提高健壮性,程序设计风格,提高可重用性,提高方法的内聚,减少方法的规模,保持方法的一致性,把策略与现实分开,全面覆盖,尽量不使用全局信息,利用继承机制,程序设计风格,提高可扩充性,封装实现策略,不要用一个方法遍历多条关联链,避免使用多分支语句,精心确定共有方法,提高健壮性,预防用户的操作错误,检查参数的合法性,不要预先确定限制条件,先测试后优化,面向对象测试,算法层,相当于单元测试,类层,模块测试,主题层,测试类-&-对象之间的相互作用,系统层,组装过程中的测试,第十三章 管理技术,成本估计,进度计划,人员组织,质量保证,项目计划,软件管理工具,成本估计,13.1.1 参数方程,13.1.2 标准值法,13.1.3 COCOMO模型,成本估计,参数方程,静态:资源=C1*(估计的特点)*exp(C2),动态:,K=L3*Ck-3*td-4,标准值法,参数具体含义见p278,COCOMO模型,程序规模,工作量,开发工作量,(,MM,)=,C,K L O C,a,进度计划,13.2.1 Gantt图(横道图),13.2.2 工程网络,13.2.3 估算进度,13.2.4 关键路径,13.2.5 机动时间,进度计划,Gantt图(横道图),t,w,1,2,3,4,5,6,7,8,A,B,C,D,当前进度,优点:简单,能动态地反映开发进展,缺点:难以反映多个任务间的逻辑关系,进度计划,工程网络,估算进度,关键路径,机动时间,人员组织,13.3.1 程序设计小组的组织,13.3.2 主程序员组,人员组织,程序设计小组的组织,程序设计小组:2 8人的非正式组织,优点:规模小,交流方便。,缺点:没有明确的权威负责人,组员间缺乏必要的协调,主程序员组,核心三人,辅助程序员也应该技术熟练且富于经验,程序管理员完成和项目有关的全部事务性工作,质量保证,13.4.1 软件质量,13.4.2 质量保证,质量保证,软件质量,修改,运行,转移,质量保证,审查:,由组长、作者、2位评审员(与评审结果有利害关系的)组成审查小组,进行发现、记录错误的工作,并复查返工结果,复查和管理复审:,从技术、管理两方面进行的复查工作,测试,项目计划,13.5.1 项目计划的内容,13.5.2 项目报告,13.5.3 变动控制,项目计划,项目计划,的内容,1.概 述,一般性地叙述开发项目,描述计划组织,并概述这个文档其余部份的内容。,2.阶段计划,讨论项目开发周期 需求分析阶段、总体设计阶段、详细设计阶段等等。详细说明每个阶段应该完成的日期,并指出不同阶段可以相互重叠的时间等等。,3.组织计划,规定从事这个开发项目的每个小组的具体责任。,4.测试计划,概述应进行的测试和需要的工具,以及完成系统测试的过程和分工,在这一节中并不包括具体的测试方案。,项目计划,项目计划,的内容(续),5.变动控制计划,确定在系统开发过程中需求变动时的管理控制机制。,6.文档计划,这一节的目的是定义和管理与项目有关的文档。,7.培训计划,培训从事开发工作的程序员和使用系统的用户的计划。,8.复审和报告计划,讨论如何报告项目的状况,并确定对项目进展情况进行正式复审的计划。,9.安装和运行计划,描述在用户现场安装该系统的过程。,10.资源和配置计划,概述关键的细节计划 进度、里程碑和按合同规定应交付的系统配置成份。,11.索 引,项目计划,项目报告,确定里程碑,每个里程碑的位置应能明确判定,不要太多,报告内容,在本阶段已完成的工作,下阶段计划要完成的工作,问题范围,目前已用成本,项目预算执行情况,建立月报制度,项目计划,变动控制,改错控制,若发现前阶段的错误,则必须记入文档,以保证所有受这个变动影响的部分都做相应的修改,加 删功能,须经审批,因涉及费用问题,软件管理工具,计划工具,提供和以前完成的工程项目有关的信息,完成诸如成本计算和关键路径分析等工作,报告生成工具,自动产生标准形式的报告,
展开阅读全文