12第八章-面向对象设计-课件_第1页
12第八章-面向对象设计-课件_第2页
12第八章-面向对象设计-课件_第3页
12第八章-面向对象设计-课件_第4页
12第八章-面向对象设计-课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章面向对象设计

(Object-OrientedDesign)8.1OOD准则:优秀软件设计的一个重要特点是容易维护回顾:SD准则包括ModularizationAbstractionInformationhidingModuleindependence对于OOD有类似的准则:1、Module=Object7/20/202318.1OOD准则Procedureabstraction:在SD中已讨论Dataabstraction:Class即是一种抽象数据类型。外界无须知道实现方法就可按照类协议(classdescriptionprotocol)*

使用class中定义的数据。Parameterabstraction:

将数据类型作为参数处理。

抽象程度更高,应用范围更广,可重用性更高

2、Abstraction:抽出事物的本质特性,暂不考虑其细节,使设计从具体实现方法中超脱。7/20/202323、Informationhiding=Encapsulationofobject4、Coupling:不同对象之间相互关联的紧密程度

交互耦合(interactivecoupling):通过传递message发生要求:降低参数个数和参数复杂性减少objects发送\接收message的个数as

looseaspossible

继承耦合(inheritancecoupling):

要求ParentclassIS_Achildclassashighaspossible8.1OOD准则7/20/20233

一般-特殊内聚(general-particularcohesion):Highg-pcohesionHighinheritancecoupling5、Cohesion:

服务内聚(servicecohesion):一个服务只完成一个

功能。

类内聚(classcohesion):一个类只有一个用途,

否则分解之。6、Reusability8.1OOD准则7/20/202348.2启发式规则1、设计结果清晰易懂,应做到:①用词一致——按习惯用法命名。不同classes中相似的methods最好取同一名字。②使用已有的protocol。③尽量减少message模式的数目。④避免模糊定义。2、一般-特殊结构的深度应适当

一般,中等规模的系统,约100个classes,设计7±2层类层次结构7/20/202358.2启发式规则3、设计简单的class

(类的定义不超过一页纸或两屏).应注意:①避免过多attributes;②能用简单的语句描述一个class的任务;③objects之间合作关系要简单;④避免过多methods(7个)。问题:设计出大量的classes,使结构复杂度增加。解决:划分主题,提高可理解性。4、使用简单的protocol,减少message中传递的参数(<=3)5、使用简单的method(3—5行源程序,否则设法分解或简化)6、把设计变动减至最小7/20/202361、概念:知识重用(例如软件工程知识的重用)方法和标准重用(例如OO方法和国家规定的软件开发规范的重用)软件成分的重用8.3软件重用(SoftwareReuse)知识工程

源码剪贴——无法溯源,无配置管理

Include——

修改后所有包含了此段代码的程

序都须重新编译。

Inheritance——无须改动原有代码

想象一下,stdio.h被改动之后……重用软件成分有三个级别:①代码重用:7/20/202378.3软件重用②设计重用——当移植系统时③

分析重用——当需求未变,而系统结构改变时2、重用效果的衡量:⑴额外代价:

创建可重用成分的专门投资

多花2~4倍时间测试以保证质量

构件库的建立与维护需要投资

以上投资将分摊到重用这些构件的新系统成本中。重用次数越多,分摊成本越少。7/20/20238记:Lt=Totallengthofcode(#oflines)

Ln=Lengthofnewcode

Lr=Lengthof

reusedcode

Et、En、Erarethecorrespondingefforts(#ofm-d)⑵重用率(Reusability)与生产率(Productivity)ProductivityReusability=开发代码的生产率重用新代码的生产率8.3软件重用7/20/20239⑶重用技术:指利用可重用的构件开发软件的技术,以

及开发可重用软件的技术。①软件组合技术:底层部件库法(Bottom-upcompositionalreuse):

从可重用的代码部件库(reuserepository)中选用部件,组合成软件。A:是,前提条件为Cn<Cr,即重用比新开发效率高。Q:是否R

越高P就越高?8.3软件重用上层组合法:完整程序的组合7/20/202310②软件生成技术:按照形式化的软件功能描述和一定的生成机理,由生成器系统(generatorsystem)自动生成目标程序。重用的是generator的代码规则③OO重用技术:Classcomponent的重用(详见下文)8.3软件重用7/20/202311⑷类构件(Classcomponent):①可重用的软构件应具备的特点:模块独立性强具有单一、完整、被确认是正确的功能;信息隐藏机制具有高度可塑性必须提供为适应特定需求而扩充或修改已有构件的机制,且使用非常简单方便。接口清晰、简明、可靠8.3软件重用7/20/202312②重用方式:实例重用(instancereuse\black-boxreuse):

创建class的不同instances,通过messages完成不同的任务。是最基本的重用方式。

用几个简单的objects创建出更复杂的class,是实例重用的另一种形式

继承重用(inheritancereuse):

是一种安全地裁剪已有的classcomponent的方式。

多态重用(polymorphismreuse):

Parentclass与childclass有相同的对外接口,使消息连接的复杂度降低。8.3软件重用7/20/202313注意:有些操作可能会妨碍classcomponent的重用,如与表示方法有关的操作与数据结构、大小有关的操作与外部设备有关的操作

实现算法在将来可能会改进\改变的核心操作解决方法:将这些操作分离出来,作为适配接口(adaptiveinterface),使class中其它操作通过调用AI而实现。在不同应用环境下,用户只须重新定义AI操作就可以重用class。8.3软件重用7/20/202314AdaptiveInterface还可进一步细分为转换接口(transitioninterface):重用时必须重定义与表示方法、数据结构、硬件等有关的操作(例如C++中class里的purevirtualfunction)扩充接口(expansioninterface):一个操作可由多种算法实现,若无新算法则继承老算法。8.3软件重用7/20/202315IPO问题域ApplicationDomain人机交互Human-ComputerInterface(HCI)任务管理TaskManagement数据管理DataManagementMethodAttributeStructureClass-&-ObjectCategory8.4系统分解回顾SD:从DFD出发OOD模型分解:7/20/2023168.4系统分解1、子系统之间的交互方式(collaboration)①客户-供应商(client-server)关系:②平等伙伴(peer-to-peer)关系:ClientsubsystemcontractServersubsystemrequestcontractPeersubsystemcontractPeersubsystemrequestrequest7/20/2023172、系统组织方案①水平层次组织:将系统组织成hierarchy,同一层中的objects相互独立,而上、下层间有client-server关系。一个client只能调用其相邻下层的server——封闭式(closed)一个client可调用其下任一层的server——开放式(open)

优点:高效;缺点:修改影响面广8.4系统分解7/20/202318HCI典型应用系统的组织结构应用软件包操作系统计算机硬件人机对话控制仿真软件包图形处理窗口图形屏幕图形象素图形②垂直块组织:将系统垂直分解成若干独立的子系统,一个子系统相当于一块,每块提供一种类型的服务。8.4系统分解7/20/2023193、四种子系统的设计⑴问题域子系统:基于OOA建立的objectmodel,进行补充修改。①调整需求②重用class:选出可用的class,标出与本问题无关的attributes和methods派生出childclass,标出继承的attributes和methods修改关联③组合class:通过引入rootclass完成,用于建立publicprotocol。④调整inheritance。8.4系统分解7/20/202320⑵HCI子系统:好的包装①设计准则:一致性:术语、步骤、操作等始终一致。减少步骤:使完成一件任务所需敲键盘、点鼠标、下拉菜单等的次数都减至最少。及时提供反馈信息:提供hotkey操作做一个体贴的statusbar提供撤销(undo)命令:无须记忆:不应要求用户记住某个窗口的信息,然后再用到窗口中——这是系统的责任而不是用户的任务。仁慈的你如佛祖对众生:回头是岸易学:提供HELP、联机参考等。富有吸引力8.4系统分解7/20/202321②设计策略设计HCI类:例如VC提供的MFC类库(MicrosoftFoundationClassLibrary)将用户分类(按技能、职务等)描述用户的类型、水平、使用目的、其它特征(如年龄、性别、习惯等),写出操作脚本设计命令层次:注意同用户熟悉的方式(如windows界面)尽量保持一致.次序、深度、宽度调整适当8.4系统分解7/20/202322⑶任务管理子系统:基于OOA建立的dynamicmodel①分析并发性:若两个objects之间无交互行为,或它们同时接受events,则它们本质上是并发的(synchronous)考察eventflowdiagram,找出没有并发对象的路径(称为控制线),每条对应一个任务(task,亦称process)不同的tasks对应必须同时发生的不同行为8.4系统分解7/20/202323②确定task类型,并分配给适当的软\硬件去执行事件驱动型(event-driven):主要完成通信工作。event=数据到达的interrupt时钟驱动型(clock-driven):完成周期性工作。优先型(priority):将highpriority或lowpriority的任务专门分离出来先做或后做。关键任务(keytask):指关系系统成败的处理,要求高可靠性,应分离考虑,严格测试。协调任务(coordinator):当系统中存在三个以上tasks时,应增设一个协调任务,用于封装不同tasks之间的协调控制。8.4系统分解7/20/202324⑷数据管理子系统:①选择管理模式文件管理(filemanager)系统关系数据库(RelationalDataBase)管理系统面向对象数据库(OODB)管理系统②设计数据格式及相应的服务(请参阅教材p.190-192)8.4系统分解7/20/2023258.5设计类中的服务

——细化objectmodel中的methods1、确立服务⑴从dynamicmodel出发:Eventflowdiagram中Event=message;接受message的object必有对应的method;Method改变status(即attributes),并完成action。7/20/2023268.5设计类中的服务EventStatus1do:Action1Status2do:Action2……则算法应有DO_CASE型控制⑵从functionmodel出发:DFD的一般结构是IPO注意:Action(即算法)与status有关。例如:不同status接受同一个event时,其action不同——7/20/202327InputFlowClass……ProcessI\OClass……Process若Process=从InputFlow中抽取一个值,则IO若和类型相同,而output实质上是input的另一个状态,则I\O是一类,有若则I1I2I3POOutputFlowClass……Process8.5设计类中的服务7/20/202328若则ProcessStorageStorageClass……Process对照DFD与Class-&-Object图,若一个process涉及多个classes,则必须判断它属于哪一个class。例如:ActivatorReceiverProcess若Process改变了Receiver,则ReceiverClass……Process又如:从关联上看,process所涉及的所有classes中,处于中心地位的class,一般拥有该process。8.5设计类中的服务7/20/2023292、设计实现方法⑴算法设计:要求做到易修改,并且复杂度低(即效率高)易理解,易实现。⑵数据结构设计:需要考虑具体的物理结构的选择。⑶新添用于存放内部处理中间结果的class;引入新的低层操作,进一步细化。8.5设计类中的服务7/20/2023308.6设计关联1、单向关联例:雇员公司被雇用1+由雇员找其所属公司,则设雇主为其属性,即一单向指针雇员雇主公司由公司找其下属某一雇员,则有两种方法:方法1:遍历所有雇员,找雇主匹配且满足特征的雇员。(省空间)7/20/2023318.6设计关联方法2:设公司的属性雇员为一指针集。(快速)雇员公司雇员指针集2、双向关联方法1:将上述两种单向关联结合使用雇员雇主公司雇员指针集雇员公司关联类雇主雇员工资方法2:另设关联类(特别适用于链属性)7/20/202332雇员公司find_skill雇用1+技能具有技能1+1+8.7优化1、确定优先级:必须站在全局高度确定各项质量指标的优先级,在优化设计时制定折衷方案。切忌各子系统自以为是,导致最终优化目标对立。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论