1、第九课面向对象分析与设计方法方法学和面向对象方法论1.方法论是指思考和做事的策略、步骤、方向和行动 面向对象方法论的概念在1987年由Booch首先提出2.目前面向对象方法论有50多种,主要有:nBooch模型;Rumbaugh的OMT模型;Jacobson的OOSE模型;Martin的OOAD模型;Shlaer的OOSA模型;Coad的面向对象方法论;Martin的面向对象方法论等等。3.目前人们在努力统一各种面向对象方法论,统一的结果是产生了统一模型语言UML。UML本身不是方法,但是UML提供了能够描述所有面向对象方法的符号工具和语义工具。面向对象程序设计的一般过程面向对象程序设计的一般
2、方法描述问题域提出解决方案实施解决方案建立面向对象的领域模型确定面向对象的实现模型构造、测试和发布面向对象程序OOAOODOOP重点考虑什么事必须完成,而不是如何完成。决定问题如何来解决。本课使用的例子一个文件分割、合并器n能够分割和合并文件n能够增加和删除文件n能够展示和提取文件 领域模型OMT方法Coad对象方法Jacobson用例驱动方法领域模型(Coad方法)确定目的确定对象和模式(行为、数据)建立对象责任(行为、数据、功能)定义服务场景模型部件问题域(PD)人机交互(HI)数据管理(DM)系统交互(SI)领域模型(OMT方法)1.什么是对象模型n对象模型描述了客观世界实体以及实体彼此
3、间的关系,是问题域的静态数据结构表示,以对象图形式表示。2.什么是动态模型n动态模型表示瞬时的、行为化的系统的“控制”性质,规定了类型模型中实体的合法变化序列,即对象的动态行为,以状态图形式表示。3.什么是功能模型n功能模型用来描述系统中对象功能,表达数据的流动、转换情形,以数据流程图、用例图形式表示。领域模型( Jacobson用例方法)用例(use case)是指行为相关的事务(transaction)序列,该序列由用户在与系统交互中执行。每一个用例就是一个使用系统的方式,当用户给定一个输入,就执行一个用例的实例,并引发执行属于该用例的一个事务。确定用例模型,用例由使用者、实例和作用三个部
4、分描述使用用例模型构造需求模型需求模型包括领域对象模型、界面描述使用用例和需求模型建立分析模型,分析模型用于划分出接口对象、实体对象、控制对象,以及由这些对象组成的子系统建立领域模型的一般方法领域模型的内涵:领域模型的内涵:n问题域有什么n问题域做什么n问题域需要我们提供什么功能领域模型建立的一般步骤:领域模型建立的一般步骤:1. 跟踪、记录所有的实体,输出一个实体的词汇表2. 统一类型、实体命名方法和规则3. 描述单个类型,输出不完全的类图4. 确定类型之间的关系,输出完整的类图(问题域的静态结构)5. 描述状态、时序、流程(问题域的动态结构)6. 建立用例,用于描述功能7. 提取界面并展示
5、给用户8. 迭代上述过程描述实体类型文件集合文件描述类型之间的静态关系关联关系n普通关联 递归关联 限定关联 n或关联 有序关联 关联类 三元关联聚合关系继承关系依赖关系文件和集合文件的关系文文件件文文件件集集合合-包含1*在问题域中的模型主要用于呈现给用户以及对问题的理解,可以是不精确的,可能与最后的实现模型有一定的区别描述实体类型的动态关系空的集合文件文件合并文件分割文件新集合文件导入导出原始文件可以用活动、状态序列等描述类型之间的动态关系建立用例用例用于以下目的:n确定系统功能,达成与用户的共识n在分析、设计、开发人员之间取得一致n提供系统设计、实现中类、对象等的设计依据n为系统测试打下
6、基础用例由以下几个部分构成:n角色n实例n实例的操作关系(时序、调用、合并)n角色实例的描述用例图小结(领域模型)对问题域的分析输出了以下成果n1.确定了问题域中有哪些实体类型以及它们之间的关系n2.确定了问题域中这些实体类型的动态结构n3.确定了需要实现的功能n如果使用UML工具,将形成n1.类图n2.活动图n3.用例图实现模型(OMT方法)1.确定体系结构n将系统划分成子系统n确定问题域中一致的继承n分配子系统的处理器和任务n选择一个方法管理数据存储n确定全局资源以及访问方式n确定系统的控制流n处理边界条件2.确定对象结构n合并问题域三个模型来获得类的操作(服务)n设计算法实现操作n优化对
7、数据的访问路径n调整类结构,增加继承、抽象和泛化n确定类关系(作用关系)n将类和关系封装在子系统或者模块中3 输出结果n更加详细的对象模型、动态模型、功能模型实现模型(Coad方法)人机交互问题域数据管理任务管理类与对象层主题层结构层属性层服务层主题层:模块、包、命名空间的划分类与对象层:确定有哪些类结构层:确定类、对象之间的关系(通用特定;整体部分)属性层:确定类的属性,以及属性的封装机制服务层:确定类的接口实现模型(用例方法)用例方法将该阶段称为构造阶段,构造阶段的成果包含了:n1.构块模型,构块模型的设计集中考虑可跟踪性、实现环境n2.交互作用图,交互作用、事件与激励、均一化n3.确定对
8、象内部行为(状态图)n4.实现和测试建立实现模型的一般方法实现模型的内涵:n1.实现模型中有哪些类,每个类有哪些接口n2.实现模型中这些类是怎样组织的n3.对于每一项功能,实现模型中类的动态调用过程是怎样的n4.类、接口、功能以怎样的方式呈现给用户建立实现模型的一般步骤:n1.扩展问题模型确定对象类以及对象类的领域(类图)n2.寻找可重用的设计模式n3.根据问题模型确定类的状态空间和行为接口(类图)n4.根据问题模型确定类的组织方式(类图/对象图/包图/配置图)n5.确定类的工作流、控制流(细化的活动图、序列图等)n6.迭代上述过程确定类的领域一个标准的面向对象系统的类包括四个领域1.应用领域
9、包含了对于应用本身有价值的类n事件管理类n事件识别类2.商业领域包含了对于行业有价值的类n关系类n角色类n属性类3.结构领域包含了对于体系结构有价值的类n人机界面类n数据操作类n机器通信类4.基础领域包含了实现应用、商业、结构的语言相关的类n语义类n结构类n基础类n 可重用性:基础领域结构领域商业领域应用领域确定类的领域应用领域类n文件集合类(SetFile)商业领域类n文件类(File)n文件流类(FileStreamOpt)n文件合并分割类(FileCutMerge)结构领域类n系统主窗口 MainWindown集合文件浏览窗口 FilesBrowseWindown文件详细信息查看窗口 F
10、ileInfoWindown命令按钮/工具栏 CommandButton/CommandToolBar基础领域类n字符串/整数/布尔 String/Integer/Booleann日期时间 DateTimen哈希表 Hashn枚举 Iterator确定类的状态空间和行为接口类的状态空间是指类的属性以及属性的约束条件类的行为接口是指类暴露的方法或者服务在复杂的类设计中,类的状态空间和行为接口应通过对不变式、前置条件和后置条件的设计作为依据类的不变式、前置条件和后置条件可以作为系统单元测试的主要依据例如在设计时刻应确保FileStreamOpt的行为接口ExtractStream前置条件是存在一个
11、File(file1)对象,后置条件是存在一个File(file2)对象和一个FileStreamOpt(stream1)对象,且Size(file1) = size(file2) + size(stream1)为不变式类的状态空间和行为确定类的组织方式类的组织方式往往和实现的语言有关,类可以有以下几种组织方式,类的组织设计应以问题域的类图为依据:1.通用特化(继承关系)2.抽象实例(接口、抽象类、模板)3.聚集(成员)4.关联(单向或者双向的引用)5.依赖(函数参数、友元)确定类的组织方式确定类的工作流 根据用例细化问题域的状态图、活动图等,详细描述对于用例的每一个实例,确定系统对象调用流程小结(实现模型)建立实现模型将输出以下结果:n确定了系统所有实现的类、类的接口、不变式n确定了类之间的组织关系n每一个功能的实现细节n如果使用UML,将形成以下内容w类图、对象图、包图w协作图、活动图、配置图w细化的用例图