UML面向对象分析与设计——OOP基础
本文最后更新于:2022年5月13日 下午
摘要:介绍了面向对象设计思想中对象、类、属性、操作的概念,面向对象技术的相关原则。
前言
根据北航《UML面向对象分析与设计》整理的学习笔记
对象和类
对象
- 定义
对象是一个实体,这个实体:
- 具有明确定义的边界和标识
- 边界意味着对象是一个封装体,通过封装来与其他对象分割
- 标识则表明每一个对象都是唯一的
- 对象封装了状态和行为
- 对象的状态通过对象的属性(attribute)和关系(relationship)来表达
- 对象的行为通过对象的操作(operation)、方法(method)和状态机(state machine)来表达
- 在UML中表示对象
在UML中,对象用矩形框来表示,对象的名字写在矩形框内部,并加上下划线来表示
类
- 类的含义
- 类是一系列对象的抽象描述,这些对象共享相同的属性、操作、关系和语义
- 一个具体的对象是该类的一个实例
- 类是一种抽象
- 将相似的实体抽象成相同的概念
- 抽象过程强调相关特征而忽略其他的特征
- UML中类的表示
在UML中,采用矩形框来表示类,可以将矩形框划分为三个区域,分别表示类名、属性和操作
属性
属性(attribute)是勒的特征或特性
- 属性的值是某一特定对象的属性值
- 在类中属性名必须是唯一的
- 每一个类的实例都有为这个类定义的所有属性的值
操作
- 操作(operation)访问或修改对象的属性值
- 对象的行为是由为此对象定义的一系列操作决定的
- 一个类可能同时存在多个实例,也可能在某一时刻没有实例
- 一个类的所有实例都可以使用这个类中定义的操作
面向对象技术相关原则
面向对象技术基本原则
- 抽象(Abstraction)
- 封装(Encapsulation)
- 分解(Decomposition)
- 泛化(Generalization)
- 多态(Polymorphism)
- 分层(Hierarchy)
- 复用(Reuse)
抽象——Abstraction
- 抽象是揭示事物区别于其他事物的本质特征的过程
- 是一个分析和理解问题的过程
- 抽象的结果取决于使用者的目的,应该包括使用者所感兴趣的那些职责,而忽略掉其他不相关的部分
- 对象到类的过程就是抽象
- 即将所见到的具体实体抽象成概念,从而在计算机世界中进行描述和各种操作
封装——Encapsulation
- 封装是对客户(使用者)隐藏具体实现细节
- 客户只依赖接口
- 通过封装实现信息隐藏和数据抽象
- 为什么要封装
- 保证数据的一致性
分解——Decomposition
泛化——Generalization
- 是类之间的一种“是”(is a/is kind of)关系,通过该关系一个类(子类)可以共享另一个或多个类(父类)的结构和行为
- 采用继承(Inheritance)实现泛化关系
- 通过泛化关系,可以建立类之间的层次结构,根据继承层次中父类的个数不同,分为:
- 单一继承
- 多重继承
单一继承
一个类继承另外一个类
多重继承
一个类继承另外多个类
继承
- 子类继承父类所有的内容:属性、操作、关系和语义
- 其访问权限仍受可见性的约束
- 子类还可以:
- 添加新的属性、操作、关系和语义
- 重新定义继承的操作
- 设计继承层次
- 父类定义公共的属性、操作、关系和语义
- 针对不同的情况定义不同的子类,以扩展父类的属性、操作、行文和语义
多态——Polymorphism
- 多态是在统一外表(接口)下隐藏不同实现的能力
- 即一个接口可以有不同的实现行为
- 是面向对象技术的本质特征
分层——Hierarchy
复用——Reuse
- 复用是借助于已有软件的各种有关知识建立新的软件的过程
应用复用原则
- 系统开发各个阶段都可能涉及到复用
- 从最底层的代码复用,到设计复用、架构复用,再到需求复用,甚至于延伸到特定业务领域的复用
- 复用原则要求设计者不仅针对当前的业务需求开展设计,还需要考虑业务的通用性和可扩展性等问题,从而设计抽象层次高、复用粒度大的组件
UML面向对象分析与设计——OOP基础
https://shgang97.github.io/posts/oop-47bf8b299fa2/