软件设计师-15,面向对象技术

面向对象基础、UML、设计模式

NULL

大纲


image-20231009194337252

面向对象基础


面向对象基本概念
术语 定义
对象 基本的运行实体,通常是现实世界中的真实存在实体的抽象。每个对象封装了数据和行为的整体,例如学生、汽车等。对象具有清晰的边界,定义了良好的行为和可扩展性。
消息 消息是对象之间进行通信的方式。通过消息,一个对象可以请求另一个对象执行特定的行为。消息是对象之间交互的基本构建块。
类是对象的抽象,它定义了一组大致相似的对象结构,包括它们的数据和行为。有几种类型的类,包括实体类、边界类、控制类等。类模型还包括属性、操作和关联等元素。
继承 继承是一种机制,它允许一个类(子类)共享另一个类(父类)的数据和方法。子类继承了父类的属性和行为,可以根据需要扩展或修改它们。继承是类之间的一种关系。
多态 多态是指不同的对象在接收相同的消息时可以产生完全不同的响应。多态通过继承机制实现,包括参数多态、包含多态、过载多态、强制多态等。多态性提高了代码的灵活性。
覆盖 在子类中,可以通过重新定义与父类具有相同名称和参数的方法来覆盖(或重写)父类中的相应方法。子类可以自定义父类的行为。
函数重载 函数重载允许在同一类中定义具有相同名称但不同参数的多个函数。函数重载的关键是参数列表的不同,编译器根据参数类型和数量来区分不同的重载函数。
封装 封装是一种信息隐藏技术,目的是将对象的内部工作机制隐藏起来,使对象的使用者无需了解内部实现细节,只需知道如何使用对象。
静态类型 静态类型在编译时确定对象的类型,用于静态语言(如Java、C++)。编译器进行类型检查和绑定。
动态类型 动态类型在运行时才能确定对象的类型,用于动态语言(如Python)。根据对象实际引用来确定类型。
静态绑定 静态绑定是基于对象的静态类型进行方法调用的机制。编译时已知要调用的方法,方法绑定在程序执行前确定。
动态绑定 动态绑定是基于对象的动态类型进行方法调用的机制。根据对象实际引用的类型来确定要调用的方法。支持多态。

面向对象分析、设计与测试
  • 面向对象分析是为了确定问题域,理解问题,包含五个活动:

    1. 认定对象:按自然存在的实体确定对象。
    2. 组织对象:分析对象之间的关系,抽象成类。
    3. 对象间的相互作用:描述各对象在应用系统中的关系。
    4. 确定对象的操作:定义对象的操作,如创建、增加、删除等。
    5. 定义对象的内部信息:定义对象的属性。
  • 面向对象设计是设计分析模型和实现相应源代码,将问题域的解决方案具体化。

  • 面向对象程序设计是使用面向对象程序设计语言实现设计方案。

  • 面向对象测试与普通测试步骤并无不同,可分为四个层次:

    1. 算法层:测试类中定义的每个方法,类似单元测试。
    2. 类层:测试同一个类中所有方法与属性的相互作用,特有的模块测试。
    3. 模块层:测试一组协同工作的类之间的相互作用,类似集成测试。
    4. 系统层:类似系统测试。

例题

image-20231009200025196

image-20231009200058917

image-20231009200141694

UML


基本概念
  • UML(Unified Modeling Language) 是一种统一建模语言,它与具体的程序设计语言无关。

    • UML包含三个要素:

      1. UML的基本构造块:这些构造块是UML中的核心元素,用于描述和建模系统的各个方面。

      2. 规则:规定了如何将这些构造块组合在一起,以创建有意义的模型。

      3. 公共机制:这些机制是UML语言中的通用工具,用于处理和操作模型的元素。

    • UML的基本构造块主要包括以下三种:

      1. 事物:事物是对模型中最具代表性的成分的抽象表示。它们用于表示系统中的实体、对象、类等。
      2. 关系:关系用于将事物结合在一起,描述它们之间的联系和相互作用。关系用于建立对象之间的连接。
      3. :图是UML中的图形表示,用于聚集相关的事物和关系,以便更清晰地呈现系统的结构和行为。不同类型的图用于不同的建模目的。

事务

UML中有四种事务,结构事务、行为事务、分组事务、注释事务

  • 结构事务:模型的静态部分,如类、接口、用例、构件等;如图示例:

    image-20231009201053118
  • 行为事物:模型的动态部分,如交互、活动、状态机:

    image-20231009201215272
  • 分组事物:模型的组织部分,如包;

    image-20231009201356302
  • 注释事物:模型的解释部分,依附于一个元素或一组元素之上对其进行约束或解释的简单符号。

    image-20231009201415125

关系
  • 依赖:一个事物的语义依赖于另一个事物的语义的变化而变化。

  • 关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。两个类之间的关联,实际上是两个类所扮演角色的关联,因此,两个类之间可以有多个由不同角色标识的关联。

  • 泛化:一般特殊的关系,子类和父类之间的关系

  • 实现:一个类元指定了另一个类元保证执行的契约。

image-20231009201553027 image-20231009201604774
  • 类图:静态图,为系统的静态设计视图,展现一组对象、接口、协作和它们之间的关系。UML类图如下:

    image-20231010172543927
    • 其中属性有:多重度、属性、操作、关系

  • 对象图:静态图,展现某一时刻一组对象及它们之间的关系,为类图的某一快照。在没有类图的前提下,对象图就是静态设计视图。如下:

    image-20231010172817656
  • 用例图:静态图,展现了一组用例、参与者以及它们之间的关系。

    用例图中的参与者是人、硬件或其他系统可以扮演的角色;用例是参与者完成的一系列操作。

    用例之间的关系:包含、扩展、泛化。

    image-20231010173017147
  • 序列图:即顺序图,动态图,是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。

    有同步消息(进行阻塞调用,调用者中止执行,等待控制权返回需要等待返回消息,用实心三角箭头表示),异步消息(发出消息后继续执行,不引起调用者阻塞,也不等待返回消息,由空心箭头表示)、返回消息(由从右到左的虚线箭头表示)三种。如下:

    image-20231010173212072
  • 通信图:动态图,即协作图,是顺序图的另一种表示方法,也是由对象和消息组成的图,只不过不强调时间顺序,只强调事件之间的通信,而且也没有固定的画法规则,和顺序图统称为交互图。如下:

    image-20231010173419253
  • 状态图:动态图,展现了一个状态机,描述单个对象在多个用例中的行为,包括简单状态和组合状态。

    转换可以通过事件触发器触发,事件触发后相应的监护条件会进行检查。状态图中转换和状态是两个独立的概念,如下:图中方框代表状态,箭头上的代表触发事件,实心圆点为起点和终点。

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

    • 活动的分岔和汇合线是一条水平粗线。
    • 并发分岔、并发汇合、监护表达式、分支、流等名词及含义。
    • 每个分岔的分支数代表了可同时运行的线程数。活动图中能够并行执行的是在一个分岔粗线下的分支上的活动。
    image-20231010173825864
  • 构件图:静态图,为系统静态实现视图,展现了一组构件之间的组织和依赖。如下:

    image-20231010173942546
  • 部署图:静态图,为系统静态部署视图,部署图物理模块的节点分布。它与构件图相关,通常一个结点包含一个或多个构件。其依赖关系类似于包依赖,因此部署组件之间的依赖是单向的类似于包含关系。如下:

    image-20231010174040098

例题

image-20231010174225292

image-20231010174330778

image-20231010174505033

设计模式


概念
  • 设计模式描述了我们周围不断重复发生的问题,以及解决这些问题的核心方法。通过设计模式,可以一次性地解决特定类型的问题,无需反复进行重复性工作。设计模式的核心价值在于提供了问题的解决方案,使人们能够更轻松地重用成功的设计和体系结构。

    • 设计模式可以看作是问题和其对应解决方案的模板。它们描述了某一类问题,然后给出了相应的解决方案。
  • 设计模式通常包含以下四个基本要素:

    1. 模式名称:模式的名称用于标识和描述该模式。
    2. 问题:描述了应该在何时使用该模式,即在什么情况下出现的问题。
    3. 解决方案:描述了设计模式的具体内容,包括如何解决问题的方法和实现细节。
    4. 效果:说明了应用该模式的效果和优点,包括可维护性、可扩展性、可重用性等方面的影响。
  • 设计模式通常分为三类:

    1. 创建型模式:主要用于处理对象的创建过程,包括单例、工厂方法、抽象工厂等。
    2. 结构型模式:主要用于处理类和对象的组合,包括适配器、装饰器、代理等。
    3. 行为型模式:主要用于描述类或对象之间的交互行为,包括观察者、策略、命令等。

设计模式分类
  • 创建型设计模式

    image-20231010175647185
  • 结构型设计模式

    image-20231010175953562
  • 行为型设计模式

    image-20231010180143670 image-20231010180329250

例题

image-20231010180516402

image-20231010180619638

image-20231010180828134