版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象设计方法第一页,共四十页,编辑于2023年,星期五OOD概述
OOA是提取和整理用户需求,并建立问题域精确模型的过程。而 OOD则是将OOA阶段得到的需求转变为符合成本和质量要求的、抽象的系统实现方案的过程。 尽管两个的任务不同,但是两者之间并没有明确的界限。许多分析的结果可以直接映射成设计的结果,而设计过程中往往会加深对需求的理解,从而进一步完善分析结果。第二页,共四十页,编辑于2023年,星期五第九章面向对象设计9·1OOD准则9·2启发式规则9·3软件重用(SoftwareReuse)9·4系统分解9·5设计类中的服务9·6设计关联9·7优化9·8本章重点第三页,共四十页,编辑于2023年,星期五9·1OOD准则优秀软件设计的一个重要特点是容易维护。回顾:SD准则包括
模块化抽象信息隐藏模块独立对于OOD有类似的准则:
1、Module=Object第四页,共四十页,编辑于2023年,星期五OOD准则(续)
Procedureabstraction:在SD中已讨论
Dataabstraction:Class即是一种抽象数据类型。外界无须知道实现方法就可按照类协议(classdescriptionprotocol)*
使用class中定义的数据。
Parameterabstraction:将数据类型作为参数处理。2、Abstraction:抽出事物的本质特性,暂不考虑其细节,使设计从具体实现方法中超脱。第五页,共四十页,编辑于2023年,星期五OOD准则(续)例:C++中的“模板”(template)template<classT,intn>classarray_n{private:Titems[n];//定义了T类型的向量元素共n个};main(){……array_n<complex,1000>w;//w是有1000个元素的复向量……}第六页,共四十页,编辑于2023年,星期五OOD准则(续)3、Informationhiding=Encapsulationofobject4、耦合(Coupling):
交互耦合(interactivecoupling):通过传递message发生要求降低参数个数和参数复杂性减少objects发送\接收message的个数as
looseaspossible
继承耦合(inheritancecoupling):
要求ParentclassIS_Achildclassashighaspossible第七页,共四十页,编辑于2023年,星期五OOD准则(续)一般-特殊内聚(general-particularcohesion):Highg-pcohesionHighinheritancecoupling5、Cohesion:服务内聚(servicecohesion):一个服务只完成一个功能。类内聚(classcohesion):一个类只有一个用途,否则分解之。6、可重用Reusability(详见11·3)第八页,共四十页,编辑于2023年,星期五9·2启发式规则1、设计结果清晰易懂,应做到:①用词一致——按习惯用法命名。不同classes中相似的methods最好取同一名字。②使用已有的protocol。③尽量减少message模式的数目。④避免模糊定义。2、一般-特殊结构的深度应适当(约100个classes,则设计7±2层)第九页,共四十页,编辑于2023年,星期五启发式规则(续)3、设计简单的class(定义不超过一页纸或两屏)。应注意:①避免过多attributes;②能用简单的语句描述一个class的任务;③objects之间合作关系要简单;④避免过多methods(7个)。问题:设计出大量的classes,使结构复杂度增加。解决:划分主题,提高可理解性。4、使用简单的协议(protocol),减少message中传递的parameters5、使用简单的method(CASE可考虑用
inheritance替代)。6、把设计变动减至最小。第十页,共四十页,编辑于2023年,星期五9·3软件重用(SoftwareReuse)一、重用的概念:知识重用(例如软件工程知识的重用)方法和标准重用(例如OO方法和国家规定的软件开发规范的重用)软件成分的重用知识工程
源码剪贴——无法溯源,无配置管理
Include——
修改后所有包含了此段代码的程序都须重新编译。
Inheritance——无须改动原有代码
想象一下,stdio.h被改动之后……重用软件成分有三个级别:①代码重用:第十一页,共四十页,编辑于2023年,星期五一、重用的概念(续)②设计重用——当移植系统时③分析重用——当需求未变,而系统结构改变时二、重用效果的衡量:⑴额外代价:
创建可重用成分的专门投资
多花2~4倍时间测试以保证质量
构件库的建立与维护需要投资
以上投资将分摊到重用这些构件的新系统成本中。重用次数越多,分摊成本越少。第十二页,共四十页,编辑于2023年,星期五二、重用效果的衡量(续):记:Lt=程序总长度(#oflines)
Ln=新编代码长度
Lr=重用代码长度
Et
、En、Er
总、新编、重用工作量⑵重用率与生产率的关系ProductivityReusability=开发代码的生产率重用新代码的生产率第十三页,共四十页,编辑于2023年,星期五二、重用效果的衡量(续):三、软件重用技术:指利用可重用的构件开发软件的技术,及开发可重用软件的技术。①软件组合技术:底层部件库法(Bottom-upcompositionalreuse)
:
从可重用的代码部件库(reuserepository)中选用部件,组合成软件。A:是,前提条件为Cn<Cr,即重用比新开发效率高。Q:是否R
越高P就越高?上层组合法:完整程序的组合第十四页,共四十页,编辑于2023年,星期五三、软件重用技术(续):②软件生成技术:按照形式化的软件功能描述和一定的生成机理,由生成器系统(generatorsystem)自动生成目标程序。重用的是generator的代码规则③OO重用技术:Classcomponent的重用(详见下文)⑷类构件(Classcomponent):①可重用的软构件应具备的特点:
独立、可塑、接口清晰(文档详尽)第十五页,共四十页,编辑于2023年,星期五三、软件重用技术(续):②重用方式:
实例重用(instancereuse\black-boxreuse):
创建class的不同instances,通过messages完成
不同的任务。是最基本的重用方式。
用几个简单的objects创建出更复杂的class,
是实例重用的另一种形式
继承重用(inheritancereuse):
是一种安全地裁剪已有的classcomponent的方式。多态重用(polymorphismreuse):
Parentclass与childclass有相同的对外接口,使
消息连接的复杂度降低。第十六页,共四十页,编辑于2023年,星期五三、软件重用技术(续):注意:有些操作可能会妨碍classcomponent的重用,如与表示方法有关的操作与数据结构、大小有关的操作与外部设备有关的操作
实现算法在将来可能会改进\改变的核心操作解决方法:将这些操作分离出来,作为适配接口(adaptiveinterface),使class中其它操作通过调用AI而实现。在不同应用环境下,用户只须重新定义AI操作就可以重用class。第十七页,共四十页,编辑于2023年,星期五三、软件重用技术(续):AdaptiveInterface还可进一步细分为转换接口(transitioninterface):重用时必须重定义与表示方法、数据结构、硬件等有关的操作(例如C++中class里的purevirtualfunction)扩充接口(expansioninterface):一个操作可由多种算法实现,若无新算法则继承老算法。第十八页,共四十页,编辑于2023年,星期五9·4系统分解IPO问题域ApplicationDomain人机交互Human-ComputerInterface(HCI)任务管理TaskManagement数据管理DataManagementMethodAttributeStructureClass-&-ObjectCategory回顾SD:从DFD出发OOD模型分解:第十九页,共四十页,编辑于2023年,星期五一、子系统之间的交互方式(collaboration)①客户-供应商(client-server)关系:②平等伙伴(peer-to-peer)关系:ClientsubsystemcontractServersubsystemrequestcontractPeersubsystemcontractPeersubsystemrequestrequest第二十页,共四十页,编辑于2023年,星期五二、系统组织方案①水平层次组织:将系统组织成层次,同一层中的objects相互独立,而上、下层间有client-server关系。一个client只能调用其相邻下层的server——封闭式(closed)一个client可调用其下任一层的server——开放式(open)
优点:高效;缺点:修改影响面广第二十一页,共四十页,编辑于2023年,星期五二、系统组织方案(续)典型应用系统的组织结构②垂直块组织:将系统垂直分解成若干独立的子系统,一个子系统相当于一块,每块提供一种类型的服务。HCI应用软件包操作系统计算机硬件人机对话控制仿真软件包图形处理窗口图形屏幕图形象素图形第二十二页,共四十页,编辑于2023年,星期五三、四种子系统的设计⑴问题域子系统:基于OOA建立的objectmodel,进行补充修改。①调整需求②重用class:选出可用的class,标出与本问题无关的attributes和methods
派生出childclass,标出继承的attributes和methods
修改关联③组合class:通过引入rootclass完成,用于建立publicprotocol。④调整inheritance。第二十三页,共四十页,编辑于2023年,星期五三、四种子系统的设计(续)⑵HCI子系统:好的包装①设计准则:一致性:术语、步骤、操作等始终一致。减少步骤:使完成一件任务所需敲键盘、点鼠标、下拉菜单等的次数都减至最少。及时提供反馈信息:提供hotkey操作做一个体贴的statusbar提供撤销(undo)命令:无须记忆:不应要求用户记住某个窗口的信息,然后再用到窗口中——这是系统的责任而不是用户的任务。仁慈的你如佛祖对众生:回头是岸易学:提供HELP、联机参考等。富有吸引力第二十四页,共四十页,编辑于2023年,星期五三、四种子系统的设计(续)②设计策略设计HCI类:例如VC提供的MFC类库(MicrosoftFoundationClassLibrary)将用户分类(按技能、职务等)描述用户的类型、水平、使用目的、其它特征(如年龄、性别、习惯等),写出操作脚本设计命令层次:注意同用户熟悉的方式(如windows界面)尽量保持一致.次序、深度、宽度调整适当第二十五页,共四十页,编辑于2023年,星期五三、四种子系统的设计(续)⑶任务管理子系统:基于OOA建立的dynamicmodel①分析并发性:若两个objects之间无交互行为,或它们同时接受events,则它们本质上是并发的(synchronous)考察eventflowdiagram,找出没有并发对象的路径(称为控制线),每条对应一个任务(task,亦称process)不同的tasks对应必须同时发生的不同行为第二十六页,共四十页,编辑于2023年,星期五三、四种子系统的设计(续)②确定task类型,并分配给适当的软\硬件去执行事件驱动型(event-driven):主要完成通信工作。
event=数据到达的interrupt时钟驱动型(clock-driven):完成周期性工作。优先型(priority):将highpriority或lowpriority的任务专门分离出来先做或后做。关键任务(keytask):指关系系统成败的处理,要求高可靠性,应分离考虑,严格测试。协调任务(coordinator):当系统中存在三个以上tasks时,应增设一个协调任务,用于封装不同tasks之间的协调控制。第二十七页,共四十页,编辑于2023年,星期五三、四种子系统的设计(续)⑷数据管理子系统:①选择管理模式文件管理(filemanager)系统关系数据库(RelationalDataBase)管理系统面向对象数据库(OODB)管理系统②设计数据格式及相应的服务第二十八页,共四十页,编辑于2023年,星期五9·5设计类中的服务一、确立服务⑴从dynamicmodel出发:Eventflowdiagram中
Event=message;接受message的object必有对应的method;
Method改变status(即attributes),并完成action。第二十九页,共四十页,编辑于2023年,星期五一、确立服务(续)EventStatus1do:Action1Status2do:Action2……则算法应有DO_CASE型控制⑵从functionmodel出发:DFD的一般结构是IPO注意:Action(即算法)与status有关。例如:不同status接受同一个event时,其action不同——第三十页,共四十页,编辑于2023年,星期五一、确立服务(续)InputFlowClass……ProcessI\OClass……Process若Process=从InputFlow中抽取一个值,则IO若和类型相同,而output实质上是input的另一个状态,则I\O是一类,有若则I1I2I3POOutputFlowClass……Process第三十一页,共四十页,编辑于2023年,星期五一、确立服务(续)若则ProcessStorageStorageClass……Process对照DFD与Class-&-Object图,若一个process涉及多个classes,则必须判断它属于哪一个class。例如:ActivatorReceiverProcess若Process改变了Receiver,则ReceiverClass……Process又如:从关联上看,process所涉及的所有classes中,处于中心地位的class,一般拥有该process。第三十二页,共四十页,编辑于2023年,星期五二、实现方法⑴算法设计:要求做到易修改,并且复杂度低(即效率高)易理解,易实现。⑵数据结构设计:需要考虑具体的物理结构的选择。⑶新添用于存放内部处理中间结果的class;引入新的低层操作,进一步细化。第三十三页,共四十页,编辑于2023年,星期五9·6设计关联一、单向关联例:雇员公司被雇用1+由雇员找其所属公司,则设雇主为其属性,即一单向指针雇员雇主公司由公司找其下属某一雇员,则有两种方法:方法1:遍历所有雇员,找雇主匹配且满足特征的雇员。(省空间)第三十四页,共四十页,编辑于2023年,星期五一、单向关联(续)方法2:设公司的属性雇员为一指针集。(快速)雇员公司雇员指针集二、双向关联方法1:将上述两种单向关联结合使用雇员雇主公司雇员指针集雇员公司关联类雇主雇员工资方法2:另设关联类(特别适用于链属性)第三十五页,共四十页,编辑于2023年,星期五9·7优化雇员公司find_skill雇用1+技能具有技能1+1+1、确定优先级:必须站在全局高度确定各项质量指标的优先级,在优化设计时制定折衷方案。切忌各子系统自以为是,导致最终优化目标对立。最常见的情况是在效率与清晰性之间的折衷。2、提高效率的技术①增加关联(类)例:设某公司有2000名雇员,平均每名雇员会10种技能,其中有5人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB32T-防汛抗旱特征水位核定规程编制说明
- 海南省海口市2024-2025学年四年级(上)期末语文试卷(含答案)
- 2025年社会服务行业投资策略报告:稳舵定锚行致远奋楫扬帆谱新篇
- 球的表面积和体积课件
- 【大学课件】单片机的系统扩展
- 经济学马晓莲课件房地产市场研究分析
- 中国证券市场供需格局及未来发展趋势报告
- 2025年容积泵项目可行性研究报告
- 中国陶瓷耐磨砖项目投资可行性研究报告
- 2025共同出资合作开发地块合同模板
- 粉末涂料有限公司危废库安全风险分级管控清单
- 750更换齿轮箱作业指导书
- GB/T 20706-2023可可粉质量要求
- 安全生产信息管理制度全
- 猜歌名教学讲解课件
- 世界主要国家洲别、名称、首都、代码、区号、时差汇总表
- 2023学年广东省广州市越秀区铁一中学九年级(上)物理期末试题及答案解析
- 《报告文学研究》(07562)自考考试复习题库(含答案)
- 应急避难场所项目建议书
- 电源日常点检记录表
- 人教版小学三年级语文上册期末测试卷.及答题卡2
评论
0/150
提交评论