软件工程面向对象软件设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

§4.5面向对象方法子系统设计类及对象设计消息设计责任设计子系统层:包含每个子系统的表示.类和对象层:包含类层次和每个对象的设计表示.消息层:包含使得每个对象能够和其协作者通信的细节,建立系统的外部和内部接口责任层:包含针对每个对象的所有属性和操作的数据结构和算法的.4.5.1将OO分析模型转换到OO设计模型用例对象-关系模型CRC索引卡片子系统设计类及对象设计消息设计责任设计分析模型设计模型对象-行为模型Class,Responsibility,Collaboration结构化设计的四个层次数据设计体系结构设计接口设计过程设计子系统设计类及对象设计消息设计责任设计面向对象设计的四个层次面向对象设计的准则•模块化•抽象•信息隐藏•弱耦合(交互耦合继承耦合)•强内聚(服务内聚类内聚一般-特殊内聚)•可重用启发规则•设计结果应该清晰易懂•一般-特殊结构的深度应该适当•设计简单的类•使用简单的协议•使用简单的服务•把设计变动减至最少软件重用•概述1.重用重用也叫再用或者复用,是指同一事物不作修改或者稍加修改就能多次重复使用。分为三个层次:(1)知识重用(2)方法和标准的重用(3)软件成分的重用2.软件成分的重用级别(1)代码重用(2)设计结果重用(3)分析结果重用3.典型的可重用软件成分(1)项目计划(2)成本估计(3)体系结构(4)需求模型和规格说明(5)设计(6)源代码(7)用户文档和技术文档(8)用户界面(9)数据(10)测试用例•类构件1.可重用软构件应具备特点(1)模块独立性强(2)具有高度可塑性(3)接口清晰、简明、可靠。2.类构件的重用方式(1)实例重用(2)继承重用(3)多态重用•软件重用的效益1.质量2.生产率3.成本目前流行的OOD方法概述Coad-Yourdon方法Coad-Yourdon的OOD过程概述:•问题域部分•人机交互部分•任务管理部分•数据管理部分目前流行的OOD方法概述Rumbaugh的OOD过程概述:•进行系统设计•进行对象设计•实现在系统设计中定义的控制机制•调整类结构以加强继承性•设计消息序列以实现对象关系(关联)•包装类和对象为模块目前流行的OOD方法概述OMT方法设计过程:•将分析模型划分为子系统•确定并发性•将子系统分配到处理器和任务•选择实现数据管理的基本策略•标识全局资源及访问它们所需的控制机制•为系统定义合适的控制机制•考虑边界条件如何处理统一的OOD方法UML被组织进两个主要的设计活动:•系统设计系统设计的主要目标是表示软件体系结构•对象设计对象设计着重于对象及其相互交互的描述OOA与OOD的本质:OOA是一个分类活动,即分析问题力图确定在开发解决方案时可应用的对象类,同时确定对象关系和行为。OOD使得软件工程师能够确定从类中导出的对象,以及这些对象的相互关联,此外,OOD描述了对象间的关系如何达到;行为如何实现;对象间通信如何实现。从OOA到OOD逐渐扩充模型的过程OOD分为两个阶段:高层设计(系统设计)低层设计(对象设计)OOD过程流系统设计分析对象设计OOD导出的系统结构数据管理其它系统文件RDBMSOODBMS设备系统交互界面问题论域人机交互界面…..…..…..…..窗口报告子系统设计过程中必须定义四种重要的设计结构问题域—直接负责实现客户需求的子系统人机交互—实现用户界面的子系统(包括可复用的GUI子系统)任务管理—负责控制和协调并发任务的子系统,任务可能被包装在一个子系统中或不同的子系统间;数据管理—负责对象的存储和检索的子系统在对象设计过程中将分析模型转换为设计模型分析模型类属性方法关系行为设计模型对象数据结构算法消息传递控制4.5.3Yourdon的OOD方法主题层类及对象层结构层属性层服务层问题域部分(PDC)人机交互部分(HIC)任务管理部分(TMC)数据管理部分(DMC)OOD阶段建立OOA阶段模型OOD由四个活动组成:OOD模型系统分解:划分分析模型子系统根据提供的功能划分子系统,子系统是类、关联、操作、事件和约束的内聚集合。定义子系统遵循的标准:•子系统之间应有良好的接口•除少数“通信类”,子系统中的类应只和该子系统中的其它类协作•子系统数目不应太多•可在子系统内划分以降低复杂性第三层数据库服务器第二层后台库服务器第一层前台客户机第三层数据库服务器客户端子系统子系统服务器端子系统子系统请求请求请求合约合约子系统间通信子系统间协作的模型4.5.3.1问题域部分的设计OOA的模型直接放到OOD的问题域部分,OOD阶段对OOA结果进行改动和增补。根据需求变化,对OOA产生模型的类与对象、结构、属性、操作进行组合与分解,增加必要的类、属性和关系,并且根据需要调整继承层次。对OOA结果加以增补要考虑的因素•调整需求•重用设计•把问题域专用类组合在一起•通过增添一般类而建立协议•调整继承的支持级别•改进性能•增加低层的类和对象例子P2634.5.3.2人机交互部分的设计虽然好的人机交互部分不可能挽救一个功能很差的软件,但性能很差的人机交互部分将使一个功能很强的产品变的不可接受!1.分类用户2.描述用户3.设计命令层次4.设计人机交互类4.5.3.3任务管理子系统设计1.为什么要有任务管理部分系统中有许多并发行为时,需要按照各个行为的协调和通信关系,划分各种任务(进程),简化并发行为的设计和编码。根据动态模型分析、定义并发性;选择软件实现的控制方法。2.怎样设计任务管理部分任务管理主要包括任务的选择和调整•识别事件驱动任务•识别时钟驱动任务•识别优先任务和关键任务•识别协调者•尽量减少任务数•确定资源需求传感器控制系统任务管理部分设计举例任务协调器协调任务名字描述优先级服务协调通信初始化开始准备好结束10,m传感器任务描述举例任务1名字:传感器读出。描述:该任务在需要脉冲调幅时负责读出传感器。包含:传感器.样本。优先级:中等。协调:时钟驱动,100ms的时间间隔。通信:从输入线(传感器)得到值,给雷达邮箱发送值。4.5.3.4数据管理部分的设计数据管理部分提供了数据在数据管系统中存储和检索对象的基本结构,它分离了数据管理方案的影响(不管该方案是普通文件、关系型数据库、面向对象数据库或其它方式.)如何设计数据管理部分(1)数据存放方法设计(2)相应服务的设计为每个需存储其对象的类增加一个属性和服务设计类中的服务•确定类中应有的服务(p270-271)•设计实现服务的方法1.设计实现服务的算法2.选择数据结构3.定义内部类和内部操作设计关联•关联的遍历1.单向遍历(图11.8)2.双向遍历(图11.9)•实现单向关联•实现双向关联•关联对象的实现设计优化•确定优先级•提高效率的几项技术1.增加冗余关联以提高访问效率2.调整查询次序3.保留派生属性•调整继承关系1.抽象与具体2.为提高继承程度修改类定义3.利用委托实现行为共享面向对象设计实例:简化的C++类库管理系统需求描述:•管理用C++语言定义的类。•用户能够方便地向类库中添加新类,并建立新类与库中原有类的关系。•用户能够通过类名从库中查询出指定的类。•用户能够查看或修改与指定类有关的信息(包括数据成员的定义,成员函数的定义及这个类与其它类的关系)。•用户能够从类中删除指定的类。•用户能够在浏览窗中方便、快速地浏览当前类的父类和子类。•具有“联想”浏览功能(也就是说可以把当前类的某个子类或父类指定为当前的类,从而浏览这个当前类的父类和子类)。•用户能查看或修改某个类的指定的成员函数的源代码。•本系统是一个简化的多用户系统,每个用户都可以建立自己的类库,不同类之间互不干扰。•对于用户误操作或错误的输入,能提示并继续稳定运行。•系统易学,用户界面应是GUI的。OOA阶段建立的类库管理系统对象模型类库库名类条目列表插入类条目删除类条目……1+0,n1类条目类名父类列表……设置类名添加父类……成员函数函数名访问权虚基类标志……父类名字访问权虚基类标志数据成员数据名访问权数据类型0,n20,n30,m用户拥有面向对象设计(简化的C++类库管理系统)1.设计类库结构两种可把类条目组织成类库得数据结构:•二叉树•链表:容易表示多重继承2.设计问题域子系统—对对象模型做补充和细化•类条目(ClassEntry)•类库(ClassEntryLink)•父类(ClassBase)、成员函数(ClassFun)和数据成员(ClassData)•类条目缓冲区(ClassEntryBuffer)类条目类名父类列表成员函数列表数据成员列表类条目类名父类链表头指针成员函数链表头指针数据成员链表头指针注释指向下一类条目指针新增数据成员新增操作设置类名添加父类删除父类更改父类添加成员函数删除成员函数更改成员函数添加数据成员删除数据成员更改数据成员查找并取出指定父类信息查找并取出指定成员函数信息查找并取出指定数据成员信息设置类名添加父类删除父类更改父类添加成员函数删除成员函数更改成员函数添加数据成员删除数据成员更改数据成员具体化类库库名类条目列表插入类条目删除类条目存储类库读出类库具体化为类库库名类链头指针插入类条目删除类条目把内存中类链表写到文件读文件并在内存建立链表按类名查找类条目并把内容复制到指定地点新增操作具体化父类名字访问权虚基类标志新增数据成员父类名字访问权虚基类标志指向下一个父类的指针成员函数函数名访问权虚基类标志返回值类型参数代码新增数据成员成员函数函数名访问权虚基类标志返回值类型参数代码指向下一个成员函数的指针数据成员数据名访问权数据类型新增数据成员数据成员数据名访问权数据类型指向下一个数据成员的指针类库(ClassEntryLink)示意图下一个ClassEntryClassEntryLinkClassEntry……ClassBaseClassDataClassFun下一个ClassBase……下一个ClassFun……下一个ClassData……•类条目缓冲区(ClassEntryBuffer)为便于处理当前类,额外设置类条目缓冲区,它是从ClassEntry类派生出来的类,除继承ClassEntry中的数据成员和成员函数外,主要增加用于与窗口或类链交换数据的成员函数ClassEntryClassEntryBuffer面向对象设计(简化的C++类库管理系统)3.设计人机交互子系统•窗口•登录窗口(用户输入账号、确认/放弃)•主窗口(创建/浏览/存储/退出)•创建窗口(输入新类名/选择已有类名,三个分组框分别管理父类、成员函数和数据成员,每组框有:添加/编辑/删除)•选择浏览方式窗口(按类名浏览/按类关系浏览)•类名浏览窗口•类关系浏览窗口•重用:基于VC开发环境,尽可能重用MFC中类4.设计其它类ClassBaseCWinAppClassToolsAppCDocumentClassEntryLinkClassEntry0,MClassFunClassDataClassEntryBuffer0,n10,n20,n3OOD得出的类库管理系统对象模型Create_DataCDialogCreate_BaseCreate_FunBrowse_NameBrowse_InheritLoginClasstoolsCreate_ClassCreate_Select消息连接

1 / 45
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功