软件工程复习笔记——第七章 面向对象的设计方法

第七章 面向对象的设计方法

7.1 面向对象的基本概念

  • 面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统,交互式界面,分布式系统,网络管理结构和人工智能等领域。面向对象的技术已成为软件开发的一种新方法,新技术。

7.1.1 什么是面向对象的开发方法

  • 面向对象的开发方法——OOSD法是一种把面向对象的思想应用于软件开发过程,指导开发活动的系统方法。
  • 问题空间——软件系统所涉及到的应用领域和业务范围(现实世界)。
  • 解空间——用于解决某些问题的软件系统。
一、软件开发过程

软件工程复习笔记——第七章 面向对象的设计方法_第1张图片

二、传统软件开发方法存在的问题
  • 1.传统软件开发方法无法实现从问题空间到解空间的直接映射
    在这里插入图片描述

  • 2.传统软件开发方法无法实现高效的软件复用

    原因是:传统软件开发方法数据与代码(操作)分离

  • 3.传统软件开发方法难以实现从分析到设计的直接过渡
    在这里插入图片描述

三、面向对象技术的特点
  • 1.对软件开发过程所有阶段进行综合考虑。使问题空间与解空间具有一致性降低复杂性
  • 2.软件生存期各阶段所使用的方法、技术具有高度的连续性用符合人类认识世界的思维方式来分析、解决问题
    软件工程复习笔记——第七章 面向对象的设计方法_第2张图片
  • 3.将OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)有机地集成在一起。有利于系统的稳定性。
    对象为中心各种构造系统,而不是以功能为中心,能很好地适应需求变化。
  • 4.具有良好的可重用性
    由于对象所具有的封装性和信息隐蔽,具有很强的独立性。

7.1.2 面向对象的基本概念

理解面向对象的基本概念对于学习和掌握面向对象的开发方法十分重要。

1.对象
  • 对象(Object)是客观事物或概念的抽象表述,即对客观存在的事物的描述统称为对象。
  • 对象可以是事、物、或抽象概念 ,是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体
    • 属性(attribute)—对象本身的性质。
    • 操作(operation)—给对象定义一组运算。
    • 对象将它自身的属性及运算“包装起来”,称为“封装”(encapsulation)。
    • 对象的最基本的特征封装性和继承性
2.类
  • 又称对象类(Object Class),是一组具有相同属性和相同操作的对象的集合
  • 在一个类中,每个对象都是类的实例(instance) ,它们都可以使用类中提供的函数。
  • 类具有属性,用数据结构来描述类的属性,
  • 类具有操作,它是对象的行为的抽象,操作实现的过程称为方法(method),方法有方法名,方法体和参数
  • 由于对象是类的实例,在进行分析和设计时,通常把注意力集中在类上,而不是具体的对象上。
  • 对象和类的描述:类和对象一般采用“**名字”、“属性”和“运算”**来描述。
3.继承
  • 继承是使用现存的定义作为基础,建立新定义的技术。是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系
  • 继承性分:
    • 单重继承:一个子类只有一个父类。即子类只继承一个父类的数据结构和方法。
    • 多重继承:一个子类可有多个父类。继承多个父类的数据结构和方法。
      软件工程复习笔记——第七章 面向对象的设计方法_第3张图片
4.消息
  • 消息就是向对象发出的服务请求(互相联系、协同工作等)。对象之间的联系可表示为对象间的消息传递,即对象间的通讯机制。
  • 一个消息应该包含以下信息:消息名、接收消息对象的标识、服务标识 、消息和方法、输入信息、回答信息
  • 在对象的操作中当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的消息。
5.多态性和动态绑定
  • 多态性(Polymorphism)是指相同的操作或函数、过程作用于不同的对象上并获得不同的结果
  • 动态绑定(dynamic binding)是在运行时根据对象接收的消息动态地确定要连接的服务代码。
  • 使用虚函数可实现动态联编,不同联编可以选择不同的实现,这便是多态性。
  • 继承是动态联编的基础,虚函数是动态联编的关键。
  • 实现多态性的基本步骤:
    • (1)在基类中,定义成员函数为虚函数(virtual);
    • (2)定义基类的公有(public)派生类;
    • (3)在基类的公有派生类中“重载”该虚函数;
    • (4)定义指向基类的指针变量,它指向基类的公有派生类的对象。
    • 注意:重载虚函数不是一般的重载函数,它要求函数名、返回类型、参数个数、参数类型和顺序完全相同
6.永久对象
  • 永久对象是指生存期可以超越程序的执行时间长期存在的对象。
  • 大多数 OOPL(面向对象程序设计语言)不支持永久对象,如果一个对象要长期保存,必须依靠于文件系统或数据库管理系统实现,程序员需要作对象与文件系统或数据库之间数据格式的转换,以及保存和恢复所需的操作等烦琐的工作。(需要有许多额外的工作)
  • 为了实现永久对象,使上述烦琐工作由系统自动完成,需要较强的技术支持;需要一个基于永久对象管理系统OMS(object management system),能够描述和处理永久对象的编程语言。

7.2 面向对象的分析

  • OOA的目标是完成对所求解问题的分析,确定系统“做什么”,并建立系统的模型。
  • 基本概念:
    • 问题域:被开发系统的应用领域
    • 系统责任:所开发的系统应具备的职能

7.2.1 面向对象分析的特点

一、需求中存在的问题
  • 1.确定问题域系统责任困难
  • 2.充分交流的问题解决得不好
  • 3.很难适应需求的不断变化
  • 4.难以满足复用要求
二、OOA的特点
  • 1.有利于对问题及系统责任的理解;
  • 2.有利于人员之间的交流;
  • 3.对需求变化有较强的适应性;
  • 4.支持软件复用

7.2.2 OOA的基本任务

  • 运用面向对象的方法,对问题域系统责任进行分析和理解,建立分析模型。
  • 1.分析问题域,确定类和对象;
  • 2.定义类或对象属性和操作,确定其结构;
  • 3.建立系统中类或对象之间的静态联系和动态联系。

7.2.3 OOA的分析过程

软件工程复习笔记——第七章 面向对象的设计方法_第4张图片

7.2.4 OOA模型

软件工程复习笔记——第七章 面向对象的设计方法_第5张图片

  • 基本模型:是一个类图,以直观的方式表达系统最重要的信息。OOA基本模型的三个层次分别描述:对象(哪几类)、属性(内部构成)、运算(对象与外部的关系)。
  • 主题:又称为子系统,是将一些联系密切的类组织在一起的类的集合。按照粒度控制原则,将系统组成几个主题,便于理解。
  • 交互图:Use case与系统成分之间的对照图。
    主题图交互图又称为补充模型
  • 详细说明:按照分析方法所要求的格式,对分析模型进行说明和解释。主要以文字为主。

7.3 面向对象的设计

  • OOD是面向对象方法在软件设计阶段应用与扩展的结果。
  • OOA所创建的分析模型转换为设计模型,解决如何作的问题。OODOOA没有明显的分界,采用相同的符号。

7.3.1 OOD基本任务

1.系统设计
  • 分析模型划分为若干子系统,子系统应该具有良好的接口,子系统内的类相互协作。标识问题本身的并发性,为子系统分配处理器。
    软件工程复习笔记——第七章 面向对象的设计方法_第6张图片
  • 子系统的分解是关键,可以有分层和分块
    • 分层:将软件系统组织为层次结构,每层是一个子系统。分层结构又分为封闭式开放式
    • 分块垂直分块是将系统分解为若干个相对独立的弱耦合的子系统。每个子系统相当于一个块,每块实现一类服务。
    • 常常使用分层和分块的混合结构
      软件工程复习笔记——第七章 面向对象的设计方法_第7张图片
2.对象设计
  • 在面向对象的系统中,模块、数据结构及接口等都集中体现在对象和对象层次结构中
  • 对象设计是为每个类的属性和操作进行详细设计,包括属性和操作,它们的数据结构和实现算法。
3.消息设计
  • 设计连接类与它的协作者之间的消息规约
4.优化及复审
  • 主要考虑提高效率建立良好的继承结构

7.3.2 OOD模型

  • 面向对象设计准则
    • 1)模块化 2)抽象 3)信息隐藏 4)弱耦合 5)强内聚 6)可重用
  • 几种典型的面向对象的开发方法:Coda方法,,Booch方法和 OMT方法。

7.4 几种典型的面向对象的方法

  • 随着面向对象开发方法的发展,逐渐形成了几种主要的流派:
    • Coda方法
    • Booch方法
    • OMT方法
    • OOSE方法

一、Coda方法

  • Coda/Yourdon方法 — 由OOA,OOD构成
  • 建立问题域分析模型。该模型由5个层次组成:即主题层对象层结构层属性层服务层
  • 要建立4个组元的设计模型问题域组元人机交互组元任务管理组元数据管理组元
  • 该方法的特点是:简单、易学,对于对象、结构、服务的认定较系统、完整、可操作性强
1.Coda方法的OOA
  • 在Coda方法中,构造和评审OOA概念模型的顺序由五个层次组成:类与对象、属性、服务、结构和主题。(这五个层次表示分析的不同侧面。)
    软件工程复习笔记——第七章 面向对象的设计方法_第8张图片
2.Coda方法的OOD
  • Coda方法的OOD模型是在OOA模型5个层次基础上,建立系统的4类组元。
    软件工程复习笔记——第七章 面向对象的设计方法_第9张图片

二、 Booch方法

  • Booch方法的开发模型包括静态模型动态模型静态模型分为逻辑模型和物理模型,描述了系统的构成和结构动态模型分为状态图和时序图
1.Booch方法的基本模型
(1)类图
  • 类图
    软件工程复习笔记——第七章 面向对象的设计方法_第10张图片
(2)对象图
  • 对象图由对象和消息组成。
    软件工程复习笔记——第七章 面向对象的设计方法_第11张图片
(3)状态图
  • 状态图
    软件工程复习笔记——第七章 面向对象的设计方法_第12张图片
(4)时序图
  • 时序图
    软件工程复习笔记——第七章 面向对象的设计方法_第13张图片
(5)模块图
  • 模块图
    软件工程复习笔记——第七章 面向对象的设计方法_第14张图片
(6)进程图
  • 进程图
    软件工程复习笔记——第七章 面向对象的设计方法_第15张图片

三、面向对象的建模技术(OMT)

  • 面向对象的方法学又称对象模型技术OMT是一种软件工程方法学,支持整个软件生存周期,覆盖问题构成、分析、设计和实现等阶段。
  • OMT方法使用了建模的思想,讨论如何建立一个实际的应用模型。从3个不同而又相关的角度建立了三类模型:对象模型、动态模型和函数模型,OMT为每一个模型提供了图形表示。
1.对象模型技术的基本概念
  • OMT方法讨论的核心就是建立三类模型:
    • 对象模型描述了由对象和相应实体构成的系统静态结构,描述了系统中对象的标识、属性、操作及对象的相互关系。
    • 动态模型根据事件和状态描述了系统的控制结构,系统中与时间和操作顺序有关的内容。
    • 函数模型描述系统中与值的转换有关的问题,如函数、映射、约束和函数作用等。
    • 三类模型描述角度不同,却又相互联系。
2.建立对象模型
  • 对象模型描述系统的静态模型

  • 构成对象模型的基本元素有:对象(类)、他们之间的关系。
    软件工程复习笔记——第七章 面向对象的设计方法_第16张图片

  • 类之间、对象之间的关系

    • (1)关联与链

      • ①二元关联、三元关联
      • ②受限关联
      • ③链属性和角色进一步描述。
        软件工程复习笔记——第七章 面向对象的设计方法_第17张图片
    • (2)继承性

      • 继承性通常又称为概括,表示基类与子类的关系。
    • (3)聚集

      • 表整体与部分的关系。
3.建立动态模型
  • 动态模型着重于系统的逻辑结构;描述某时刻对象及其联系的改变。包括状态图和事件追综图
一、事件和状态
  • 状态—对象所具有的属性值,具有时间性和持续性
  • 事件—对于对象的触发行为,指从一个对象到另一个对象信息的单向传递。
  • 脚本—在系统的某一执行期间内的一系列事件。
  • 在系统中具有属性值、链路的对象,可能相互激发,引起状态的一系列变化。
  • 有的事件传递的是简单信号,有的事件则传递的是数据值。由事件传送的数据值称为“属性”。
(1)状态图
  • 状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为,状态的迁移。
    软件工程复习笔记——第七章 面向对象的设计方法_第18张图片
  • 动态模型多个状态图组成,每个有重要行为的类都有一个状态图。各状态图可并发地执行及独立改变状态
(2)事件追踪图
  • 事件追踪图侧重描述系统执行过程中的一个特定的“场景(Scenarios)”。场景有时也叫“脚本”,是完成系统某个功能的一个事件序列。即是描述多个对象的集体行为。
  • 脚本—系统某一次特定运行时期内发生的事件序列
(3)建立功能模型
  • 功能模型着重于系统内部数据的传递与处理。定义“做什么?”的问题,表明值之间的依赖关系及其相关的功能
  • 描述手段为分层数据流图,DFD图有助于表示功能的依赖关系,其中的处理对应于状态图的活动和动作数据流对应于对象图中的对象或属性。建立功能模型的步骤为:
    • 1.确定输入、输出值
      • 先列出输入、输出值,输入输出值是系统与外部世界之间的事件的参数。
    • 2.建立数据流图
      • 通常按层次组织
    • 3.描述处理
      • 当数据流图已细化到一定程度后,对各处理进行描述,描述方法用自然语言、伪码及判定树等。

四、面向对象的软件工程(OOSE)

  • OOSE面向对象的思想应用于软件工程中,建立五类模型:
    软件工程复习笔记——第七章 面向对象的设计方法_第19张图片
  • OOSE的开发活动主要分为三类:分析、构造和测试
  • OOSE的核心—最大贡献,是建立了Use Case 模型
  • 用例(Use case)是OOSE中的重要概念,在开发各种模型时,用例贯穿了OOSE活动的核心,描述了系统的需求及功能
  • 分析模型:use case模型通过分析来构造
  • 设计模型:use case模型通过设计来具体化
  • 实现模型:该模型依据具体化的设计来实现use case模型。
  • 测试模型:用来测试具体化的use case模型。

面向对象建模

  • 模型是对系统的抽象表示,建模是在不同层次上对系统的描述。
  • 鉴于软件,尤其是大型软件所具有的复杂性,以及人们对复杂问题理解的局限性,建立一种共同的建模语言,推动面向对象方法的发展是十分必要的。

第七章完

你可能感兴趣的:(软件工程,需求分析,规格说明书)