1SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING第五章面向对象软件设计本章要点●以Coad和Yourdon方法为重点讲述面向对象设计的过程。●面向对象中的基本概念●对象设计采用的原则和方法。2SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING传统软件设计技术中,主要分为概要设计和详细设计两个阶段。采用面向对象技术,整个设计过程分为系统设计与对象设计两部分内容。5.1.1面向对象设计的任务5.1面向对象设计概述按照Rumbaugh等人提出的对象建模技术(ObjectModelingTechnique,OTM),面向对象设计过程主要由以下步骤组成:3SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.1面向对象设计概述1)系统设计。主要完成系统整体结构的设计,包括将子系统分配到处理器和任务中,选择实现数据管理、界面支持和任务管理的设计策略,为系统设计合适的控制机制。2)对象设计。对OOA模型中的类对象模型具体化、详细化,包括用传统设计方法中过程设计的方法设计对象的每个操作,定义实现系统所需的内部类,为类属性设计内部数据结构等。3)消息设计。使用对象间的协作和对象-关系模型,设计消息模型。4)复审设计模型。设计过程是递进的,从需求和实现两个角度对设计模型进行复审,并伴随着附加的OOA活动。4SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.1面向对象设计概述1.层次关系:面向对象设计模型的五个层次体现的逻辑关系各不相同:(1)服务层。服务指类中的操作,而服务层上考虑的关系指对象间的操作之间的调用关系。(2)属性层。属性是类保存数据的位置,而属性间的联系指类之间数据的交换。(3)结构层。面向对象设计模型中的两种主要结构是:继承结构和聚合结构。5.1.2面向对象的设计模型5SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.1面向对象设计概述(4)类与对象层。这一层次体现类或对象被封装的方式,即类或对象向类的外界提供的功能。(5)主题层。主题层描述的是分析模型中的需求,即由类组成的组件能够实现哪些功能。2.子系统之间的交互方式从目前软件系统来看,子系统之间的交互存在两种可能的方式:客户-供应商(Client-supplier)关系和平等伙伴(peer-to-peer)关系。5.1.2面向对象的设计模型6SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.1面向对象设计概述3.组织系统的两种方案:(1)层次组织结构:其特点是将软件系统组织为一个层次系统,每层是一个子系统。(2)块状组织结构:在此种组织方案下,软件系统也会被分为若干的子系统。但系统分解后的子系统间相互独立,其耦合度较层次组织结构要弱得多。4.设计系统的拓扑结构:由子系统组成完整的系统时,典型的拓扑结构有管道形、树形、星形等5.1.2面向对象的设计模型7SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计根据Rumbaugh对OMT方法的定义,系统设计主要由以下步骤组成:1)划分子系统。将整个系统按照执行功能的不同划分为若干个子系统,每个子系统承担一定的独立功能。2)确定需要并发运行的子系统,并为它们分配处理器。对于面向对象方法的各子系统,如果需要并行执行,就需要有任务分配子系统协调其他子系统的执行,满足要求。3)描述子系统之间的通信。子系统间的耦合以相互通信的方式实现。5.2.1系统设计过程8SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计4)确定系统资源的管理和控制。可以将系统的资源管理与控制看作是某一子系统的责任来统一管理和控制系统的资源,而对于系统资源的使用者则作为此子系统的消费者看待。5)确定人机交互构件,即用户界面。用户界面体现了系统与用户的信息交换方式,应按照一定的设计原则和使用习惯制定良好的用户界面,提高系统输入、输出的效率。6)选择实现数据管理和任务管理的基本策略。应优化对数据管理和任务管理的设计,使得系统可以高效地运行。5.2.1系统设计过程9SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计1.划分子系统:面向对象分析所得出的问题域精确模型,为提取和划分子系统奠定了良好的基础,并提供了完整的框架。对子系统的划分归纳起来有以下几种原则:1)复用设计的原则。即根据解决问题的需要,将从类库或其它来源获得的既存类增加到问题的解决方案中。2)把与应用论域相关的一些类关联起来,对与问题解决相关的一些类组织起来,建立类的层次结构。5.2.2子系统设计10SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计3)加入一般化类以建立类间协议。如果若干类有某种相似方法,就可以制定一个一般化类,并为它定义一般化类,将通用方法作为虚函数。4)调整继承支持级别。5)修改设计以提高性能6)加入较低层的构件2.处理并发操作5.2.2子系统设计11SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计可以采用以下两种解决方案:1)将并发子系统分配到不同的处理器。2)将并发子系统分配到相同的处理器并由系统提供同步控制。3.描述子系统间通信OOA中已经用对象-关系模型表示了对象间的协作关系,子系统可以看作是高层的模块,有必要定义子系统间的协作关系。4.资源管理构件系统中通常有一些共享资源,多个子系统可能同时竞争这些资源。5.2.2子系统设计12SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计1.分类分析用户特点,设计不同界面2.增加用户界面专用的类与对象3.利用快速原型演示,改进界面设计4.描述任务的情景5.设计命令层6.设计详细的交互5.2.3用户界面设计13SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计所谓任务,是进程的别称,是执行一系列活动的一段程序。具体而言,任务管理部件的设计一般遵循如下的步骤与策略:(1)识别由事件驱动和时间驱动的任务(2)识别关键任务、任务优先级以及任务管理类(3)定义任务(4)修改任务5.2.4任务管理设计14SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.2系统设计1.定义数据格式(1)关系型数据库管理系统(2)面向对象数据库管理系统2.设计相应的操作(1)关系型数据库管理系统(2)面向对象数据库管理系统5.2.5数据管理设计15SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.3对象设计任何一种设计方法必须提供以下机制:1)数据结构的表示2)处理过程的说明3)处理过程的调用16SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.3对象设计对象的实现描述中包括以下信息:1)对象名及所属对象类2)私有数据结构的每一数据项及其类型3)每个操作的过程性描述或指向这样一个过程性描述的指针1.协议描述5.3.1对象描述17SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.3对象设计协议原指网络通信双方的通信约定,这里借用这个概念来表示对象间是如何通信的。2.实现描述:实现描述是对对象接收到某个消息后所执行的操作的实现细节的描述,包括关于对象私有部分的信息,即关于描述对象的属性的数据结构的内部细节及描述操作的过程细节。5.3.2算法设计18SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.3对象设计模块化是提高软件质量的一个重要方面,也是OOD四个基础特征之一。而程序构件化则是体现模块化的重要手段。在面向对象设计中,仅定义对象的属性和操作是不够的,还必须描述存在于对象间的接口和对象的整体结构。程序构件可以用于表示对象整体结构以及对象和其它构件间相互的连接。5.3.3程序构件与接口19SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.4领域对象设计1)调整需求2)重用已有的组件3)引入父类,分组管理领域类4)增添一般化类建立协议5)调整OOA模型16)设计复审5.4.1领域对象的设计内容20SOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERINGSOFTWAREENGINEERING5.4领域对象设计一个设计模板能命名、抽象和标识通用设计结构的主要方面,有助于创建可复用的设计。设计模板描述相关的类和实例,它们的角色和协作以及责任分布5.4.2领域对象的设计模板