软件设计 -(七)面向对象技术

面向对象基础

  • 面向对象方法包括:面向对象设计、面向对象分析和面向对象实现。
  • 三大特征:封装、继承、多态。
  • 基础:抽象是面向对象的基础。

基本概念

  • 抽象
    抽象就是把事物的信息细节进行提炼、抽象,找到事物的本质和重要属性,以求简化、概括所观察到的现实世界。

  • 对象
    在面向对象系统中,对象是基本的运行时的实体,既包括数据(属性),也包括作用于数据的操作(行为)。

  • 消息
    对象之间进行通信的一种构造叫做消息。


  • 类是在对象之上的抽象,对象是类的具体化,是类的实例(Instance)
    类可以分为三种:实体类、接口类(边界类)和控制类。
    类之间存在一般和特殊关系。特殊类是一般类的子类。

  • 继承
    继承是父类和子类之间共享数据和方法的机制。
    一个父类可以有多个子类。单重继承:继承一个父类;多重继承:继承两个或更多父类。

  • 多态
    不同对象收到同一消息可以产生完全不同的结果,这一现象称为多态(Polymorphism)。即同一行为,通过不同的子类,可以体现出来的不同的形态。
    多态 = { 通用的 { 参数多态 − 方法的参数可以接受不同类型的对象,并根据实际传递的对象类型来执行不同的操作 包含多态 − 最常见的例子:子类型化,即一个类型是另一个类型的子类(子类型,不是子类)。 特定的 { 过载多态 − 同一个名字(操作符﹑函数名)在不同的上下文中有不同的类型。 强制多态 − 当需要将子类对象传递给接受父类对象的方法时,使用强制多态来实现多态的传递和对象的向上转型。 多态=\begin{cases} 通用的 {\begin{cases}参数多态 - 方法的参数可以接受不同类型的对象,并根据实际传递的对象类型来执行不同的操作 \\ \\ 包含多态 - 最常见的例子:子类型化,即一个类型是另一个类型的子类(子类型,不是子类)。 \end{cases}} \\ \\ 特定的 {\begin{cases}过载多态 - 同一个名字(操作符﹑函数名)在不同的上下文中有不同的类型。 \\ \\ 强制多态 - 当需要将子类对象传递给接受父类对象的方法时,使用强制多态来实现多态的传递和对象的向上转型。 \end{cases}}\end{cases} 多态= 通用的 参数多态方法的参数可以接受不同类型的对象,并根据实际传递的对象类型来执行不同的操作包含多态最常见的例子:子类型化,即一个类型是另一个类型的子类(子类型,不是子类)。特定的 过载多态同一个名字(操作符函数名)在不同的上下文中有不同的类型。强制多态当需要将子类对象传递给接受父类对象的方法时,使用强制多态来实现多态的传递和对象的向上转型。

  • 动态绑定
    动态绑定是多态性得以实现的重要因素。

    • 静态类型:对象在声明时使用的类型,在编译期就已经确定。
    • 动态类型:指针变量或引用变量所指向对象的类型,在运行期才能确定。
    • 绑定:把一个方法与其所在的类/对象关联起来叫做方法的绑定。
    • 静态绑定:绑定的是静态类型,发生在编译期。
    • 动态绑定:绑定的是动态类型,发生在运行期。

面向对象分析(OOA)

  • 面向对象分析基于用例模型。
  • 包含5个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息。(建模系统功能,发现并确定业务对象,组织对象并确定其关系。)

面向对象设计(OOD)

OOD是将OOA所创建的分析模型转化为设计模型,设计各个对象、对象之间的关系(如层次关系、继承关系)和通信方式(如消息模式)等。主要作用是对OOA的结果进步一的规范化整理。

  • 设计原则
    1. 单一责任原则(Single Responsibility Principle,SRP)。就一个类而言,应该仅有一个引起它变化的原因。
    2. 开放-封闭原则(Open & Close Principle,OCP)。软件实体(类、函数、模块等)应该是可以扩展的,即开放的;但是不可修改的 ,即封闭的。
    3. 里氏替换原则(LSP)。子类型必须能够替换掉它们的基类型。即,在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有是一个(is-a)关系。
    4. 依赖倒置原则(DIP)。抽象不应该依赖于细节,细节应该依赖于抽象。即,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。
    5. 接口分离原则(ISP)。不应该强迫客户依赖于它们不用的方法。

      — 上述 1- 5 是面向对象方法中的五大原则 —

    6. 重用发布等价原则(REP)。重用的粒度就是发布的粒度。
    7. 共同封闭原则(CCP)。包中的所有类对于同一性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包所有的类产生影响, 而对于其它的包不构成任何影响。
    8. 共同重用原则(CRP)。一个包中所有的类应该是共同重用的。如果重用了包中一个类,那么就要重用包中所有的类。
    9. 无环依赖原则(ADP)。在包的依赖关系图中不允许存在环。
    10. 稳定依赖原则(SDP)。朝着稳定的方向进行依赖。
    11. 稳定抽象原则(SAP)。包的抽象程度应该和其稳定程度一致。

      ADP、SDP、SAP 是关于包之间的耦合性原则的,并且论述了评价系统中包结构优良与否的评判标准。

面向对象程序设计(OOP)

面向对象程序设计的实质是选用一种面向对象程序设计语言(OOPL),采用对象、类及其相关概念所进行的程序设计 。

  • 面向对象测试
    1. 算法层。测试类中定义的每个方法,相当于传统软件测试中的单元测试。
    2. 类层。面向对象软件中类是基本模块,可认为是模块测试。
    3. 模板层。大体上相当于集成测试。
    4. 系统层。

UML

参考教程

UML(Unified Modeling Language):统一建模语言。是面向对象软件的标准化建模语言。
OMT(Object Modeling Technique):面向对象建模技术 。

  • 事物:是对模型种最具代表性的成分的抽象;
  • 关系:把事物结合在一起;
  • 图:聚集了相关的事物。

事物

UML 中有 4 种事物:结构事物、行为事物、分组事物和注释事物。

1. 结构事物

通常是模型的静态部分,描述概念或物理元素。包括:类(Class)、接口(Interface)、协作(Collaboration)、用例(Use Case)、主动类(Active Class)、构件(Component)、制品(Artifact)和结点(Node)。

结构事物图形表示

2. 行为事物

是UML模型的动态部分。描述了跨越时间和空间的行为。包括:交互(Interaction)、状态机(State Machine)和活动(Activity)

行为事物图形表示

3. 分组事物

是 UML 模型的组织部分,是一些有模型分解成的“盒子”。主要的分组事物是包(Package)。

4. 注释事物

是 UML 模型的解释部分。用来描述、说明和标注模型的任何元素。注解(Note)是一种主要的注释事物。

包和注解

关系

UML 的关系:依赖、关联(聚合、组合)、泛化、实现。参考

各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

1. 依赖 (Dependency)

是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。

箭头指向:带箭头的虚线,指向被使用者。

依赖的变体有:精化、跟踪、包含和延伸。

2. 关联(Association)

关联是一种结构关系,它描述了一组链,链是对象之间的连接。

箭头指向:带普通箭头的实线,指向被拥有者(双向的关联可以有两个箭头或没有箭头)。

3. 聚集(聚合)

是一种特殊类型的关联,它描述了整体和部分间的结构关系,且部分可以离开整体而单独存在

箭头指向:带空心菱形的实心线,菱形指向整体。

4. 组合(Composition)

是整体与部分的关系,但部分不可以离开整体而单独存在
箭头指向:带实心菱形的实线,菱形指向整体。

5. 泛化(Generalization)

是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。(其实就是继承关系)

箭头指向:带三角箭头的实线,箭头指向父类。

6. 实现(Realization)

实现是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约。

箭头指向:带三角箭头的虚线,箭头指向父类。

UML关系箭头表示

图(Diagram)是一组元素的图形表示,大多数情况下把图画成顶点(代表事物)和弧(代表关系)的连通图。

系统视图说明
逻辑视图也称设计视图,表示设计模型中在架构方面具有重要意义的部分,即类、子系统、包和用例实现的子集。
进程视图是可执行线程和进程作为活动类的建模,是逻辑视图的一次执行实例,描述了并发与同步结构。
实现视图对组成基于系统的物理代码的文件和构件进行建模。
部署视图把构件部署到一组物理节点上,表示软件到硬件的映射和分布结构
用例视图最基本的需求分析模型
类型
结构性视图(静态)类图、对象图、包图、组合结构图、构件图、部署图和制品图
行为性视图(动态) 用例图、顺序图(序列图)、通信图(协作图)、定时图(计时图)、状态图、活动图、交互概览图
交互图(动态) 顺序图(序列图)、通信图(协作图)、定时图(计时图)、交互概览图

1. 类图

参考资料

是一切面向对象方法的核心建模工具。展现了一组对象、接口、协作和它们之间的关系

  • 通常包括:类,接口,协作。
  • 关系:依赖、泛化、关联
    UML类图

2. 对象图

对象图是实例(Instance)的表达,包括对象和数据值。展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链。
UML对象图

3. 用例图

参考资料 展现了一组用例、参与者(Actor)以及它们之间的关系。通常包含以下内容:

  1. 用例(Use Case):对系统的用户需求(主要是功能需求)的描述,用例表达了系统的功能和所提供的服务(动作)。
  2. 参与者(Actor):是系统外部的一个实体(可以是任何事物或人)。
  3. 参与者、用例之间的关系:
    • 包含关系:(用例之间)当可以用两个或以上的用例中提取公共行为时,应该使用包含关系表示它们。提取的公共用例称为抽象用例,原始用例称为基本用例。重要特征 :被抽象出来的用例是基础用例必须的部分,不能或缺
    • 扩展关系:(用例之间)若一个用例明显地混合了两种或以上的不同场景,即根据情况可能发生多种分支,则可将这个用例分为一个基本用例和一个或多个 扩展用例。重要特征:抽取的用例相对于基础用例来说不是必须的。
    • 泛化关系:(用例之间,或参与者之间)当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其它的用例组偶为泛化关系中的子用例。
    • 关联关系:参与者与用例之间
      在这里插入图片描述

4. 交互图(序列图,通信图,交互概览图,计时图)

用于对系统的动态方面进行建模。

  • 序列图(顺序图)

    是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。

    • 序列图有对象生命线,是一条垂直的虚线
    • 序列图有控制焦点,是一个瘦高的矩形,表示一个 对象执行一个动作所经历的时间段,即可以是直接执行,也可以是通过下级过程执行。
      UML 序列图
  • 通信图(协作图)
    强调收发消息的对象的结构组织。不但描述了对象之间的交互还描述了交互的对象之间的链接关系,即同事反映了系统的动态和静态特征。

    序列图和通信图是同构的,它们之间可以相互转换。 通信图有两个不同于序列图的特性:

    • 通信图有路径,指出一个对象如何与另一个对象链接。
    • 通信图有顺序号,表示一个消息的时间顺序。
      UML 通信图
  • 交互概览图
    活动图的变体,描述业务过程中控制流概览,软件过程中的详细逻辑概览,以及将多个图进行连接,抽象掉了消息和生命线。

    纯粹的交互概览图中所有的活动都是交互发生的。
    在这里插入图片描述

  • 计时图(定时图)

    是一种新增的、特别适合实时和嵌入式系统建模的交互图,关注沿着线性时间轴、生命线内部和生命线之间的条件改变。它描述对象状态随着时间改变的情况,很想示波器。
    在这里插入图片描述

5. 状态图

状态图展现了一个状态机,它由状态、转换、事件、和活动组成。

状态图专注于系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序。

  • 通常包括:简单状态和组合状态、转换(事件和动作)。 UML 状态图

6. 活动图

活动图是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。

专注于系统动态视图,它对于系统的功能建模非常重要,并强调对象间的控制流程

一般包括:活动状态、动作状态、转换、对象。

两种使用活动图的方式:对工作流建模,对操作建模。

元素:并发(合并)分叉、并发汇合(合并分支)、流、分支、监护表达式

UML活动图

7. 构件图

构件图展现了一组构件之间的组织和依赖。

构件:系统中可替换的物理部分,它包装了实现且遵从并提供一组接口的实现。每个构件都提供特定的服务,必须被一个或多个实现所支持。

构件图由,组件、接口、实现、依赖组成。

UML构件图

8. 组合结构图

组合结构图用于描述一个分类器(如类、构件或用例)的内部结构,分类器与系统其它组成部分之间的交互端口,展示一组相互协作的实例如何完成特定的任务,描述设计、架构模式或策略。

9. 部署图

部署图是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(物品)的配置。
UML部署图

10. 包图

包图是用于把模型本身组织成层次结构的通用机制,不能执行,展现有模型本身分解而成的组织单元以及其间的依赖关系。

  • 一个元素只能被一个包所拥有
  • 拥有关系的包形成了一个命名空间,其中同一种元素的名称必须唯一。
    UML包图

11. 制品图

描述计算机中一个系统的物理结构。制品图包括文件、数据库和类似的物理比特集合。制品图通常和部署图一起使用。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值