【设计模式】二、UML 类图与面向对象设计原则 之 UML概述

二、UML 类图与面向对象设计原则
(一)UML 类图

  1. UML 概述
  2. 类与类的UML图示
  3. 类之间的关系

(二)面向对象设计原则

  1. 单一职责原则(Single Responsibility Principle, SRP)
  2. 开闭原则(Open-Closed Principle, OCP)
  3. 里氏替换原则(Liskov Substitution Principle, LSP)
  4. 依赖倒置原则(Dependence Inversion Principle, DIP)
  5. 接口隔离原则(Interface Segregation Principle, ISP)
  6. 迪米特法则(最少知道原则)(Law of Demeter, LoP)
  7. 合成复用原则(Composite Reuse Principle, CRP)


二、UML 类图与面向对象设计原则

​ 学习设计模式之前需要掌握一些预备知识,主要包括UML类图和面向对象设计原则,它们是“基础内功”,将为后续的“深入修行”设计模式奠定基础。


UML 类图 可用于描述每个设计模式的结构以及对模式实例进行说明,而模式结构又是设计模式解法的核心组成部分。学一个设计模式,如果不能绘制和理解其结构图,基本上等于没学。


面向对象设计原则 是评价每个设计模式应用效果的重要依据。每个模式都符合一个或多个面向对象设计原则(个别模式除外),这些原则都是从无数项目中提取出来的经验性原则,他们为消除软件设计和实现中的“臭味(Bad Smell)”而诞生,力图为当前系统提供最好的设计方案。常用的面向对象设计原则包括7个,分别是单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则(最少知道原则)和合成复用原则

(一)UML 类图

1. UML 概述
(1)UML 定义

UML(Unified Modeling Language,统一建模语言) 是一种通用的可视化建模(Modeling)语言,不同于编程语言,它通过一些标准的图形符号和文字来对系统进行建模,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。

​ UML 适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具,UML 是一种总结了以往建模技术的经验并吸收了当今最优秀成果的标准建模方法。


​ UML 是一种语言,也就意味着它有属于自己的标准表达规则,它不是一种类似 Java、C++、C# 的编程语言,而是一种分析设计语言,也就是一种建模语言

(2)UML 结构

UML 是一种有图形符号表达的建模语言,UML结构主要包括以下四个部分:

  • 视图(View):包括用户视图、结构视图、行为视图、实现视图、环境视图。
  • 图(Diagram):包括类图、对象图、组件图、部署关系图这4种结构图,以及用例图、顺序图(序列图)、协作图、活动图、状态图这5种行为图。
  • 模型元素(Model Element):UML图中使用的概念(如:类、对象、消息)和这些概念之间的关系(如:关联关系、依赖关系、泛化关系、实现关系)。
  • 通用机制(General Mechanism):通用机制为模型元素提供额外的注释、信息和语义。
(2.1)视图(View)

UML 视图用于从不同的角度来表示待建模系统。视图是有许多图形组成的一个 抽象集合,在建立一个系统模型时,只有通过定义多个视图,每个视图显示该系统的一个特定方面,才能构造出该系统的完整蓝图,视图也将建模语言链接到开发所选择的方法和过程。

UML视图(View)包含五大系统视图:

  1. 用户视图:以用户的观点表示系统的目标,它是所有视图的核心,用于描述系统的需求。
  2. 结构视图:表示系统的静态行为,描述系统的静态元素,如包、类与对对象,以及它们之间的关系。
  3. 行为视图:表示系统的动态行为,描述系统的组成元素(如对象)在系统运行时的交互关系。
  4. 实现视图:表示系统中逻辑元素的分布,描述系统中物理文件以及它们之间的关系。
  5. 环境视图:表示系统中的物理元素的分布,描述系统中硬件设备以及它们之间的关系。
(2.2)图(Diagram)

UML 图是描述UML视图内容的图形。UML图(Diagram)主要包含9种,分为结构图和行为图,如下:

(一)结构图(4种)

  1. 类图:描述了系统中对象的类型以及它们之间存在的各种静态关系。
  2. 对象图:对象图是类图的一个实例,是系统在某个时间的详细状态的快照。
  3. 组件图:描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
  4. 部署关系图:描述了系统内部的软件如何分布在不同的节点上。

(二)行为图(5种)

  1. 用例图:指由参与者、用例、边界以及它们之间的关系构成的用于描述系统功能的视图。(用于需求建模)
  2. 顺序图(序列图):描述了在用例的特定场景中,对象如何与其他对象交互。
  3. 协作图(通信图):描述了系统的行为是如何由系统的成分合作实现的。
  4. 活动图:描述了具体业务用例的实现流程。
  5. 状态图:描述了对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。

UML图(Diagram)对应的UML视图(View):

  1. 用户视图:(如:用例图)
  2. 结构视图:(如:类图、对象图、包图、组合结构图)
  3. 行为视图:(如:状态图、活动图、顺序图、通信图、定时图、交互概览图)
  4. 实现视图:(如:组件图)
  5. 环境视图:(如:部署图)
(2.3)模型元素(Model Element)

模型元素是指UML图中所使用的一些概念,它们对应于普通的面向对象概念,如类、对象、消息以及这些概念之间的关系,如关联关系、依赖关系、泛化关系等。

同一个模型元素可以在多个不同的UML图中使用,但是无论在哪个图中,同一个模型元素都必须保持相同的意义并具有相同符号。

(2.4)通用机制(General Mechanism)

UML提供的通用机制为模型元素提供额外的注释、信息和语义,这些通用机制也提供了扩展机制,允许用户对UML进行扩展,如定义新的建模元素、扩展原有元素的语义、添加新的特殊信息来扩展模型元素的规则说明等,以便适用于一个特定的方法或过程、组织或用户。


※ 本文小结

在这里插入图片描述
在这里插入图片描述


参考资料

参考书籍:《设计模式的艺术 / 刘伟著》

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
游刃有余地控制复杂性设计高效的企业级解决方案   在一开始就要做出正确的架构决策,从而提高产品的质量和可靠性。《Microsoft .NET企业级应用架构设计》由两位企业级系统开发专家执笔,会告诉你如何用各种模式和技术来控制项目的复杂性,让系统更易于编写、维护和升级。   读者会得到实用的架构方面的指导,包括:   ·在早期设计师就考虑到可测试性、可维护性和安全性   ·通过面向服务的接口暴露业务逻辑   ·选择最佳的模式来组织业务逻辑和行为   ·了解并使用模式来分离Ul和表现层逻辑   ·深入探究数据访问层的模式和最佳实践   ·为对象和数据之间的转换提供良好的解决方案   ·降低开发工作量,避免过度设计,建造更强壮的系统 第1章 当代的架构师和架构   1.1 软件架构到底是什么   1.1.1 将架构原则应用至软件中   1.1.2 什么属于架构,什么不属于   1.1.3 架构与决定相关   1.1.4 软件的需求和质量   1.2 架构师到底是什么   1.2.1 架构师的职责   1.2.2 你知道有多少种架构师吗   1.2.3 对架构师的一些常见误解   1.3 软件开发流程概览   1.3.1 软件生命周期   1.3.2 软件开发模型   1.4 小结   1.5 本章的墨菲法则 第2章 UML必要知识   2.1 uML概览   2.1.1 建模语言的出现动机和历史   2.1.2 UML的模式和使用方法   2.2 UML图表   2.2.1 用例图   2.2.2 类图   2.2.3 顺序图   2.3 小结   2.4 本章的墨菲法则 第3章 设计原则和模式   3.1 基本设计原则   3.1.1 警钟因何而鸣   3.1.2 结构化设计   3.1 3分离关注点   3.2 面向对象设计   3.2.1 面向对象基本设计原则   3.2.2 高级原则   3.3 从原则到模式   3.3.1 模式究竟是什么   3.3.2 模式vs.惯用法   3.3.3 依赖注入   3.4 在设计时就考虑需求   3.4.1 可测试性   3.4.2 安全性   3.5 从对象到方面   3.5.1 面向方面编程   3.5.2 AOP实战   3.6 小结   3.7 本章的墨菲法则   第部分 系统设计 第4章 业务层   4.1 业务逻辑层究竟是什么   4.1.1 业务层剖析   4.1.2 业务逻辑层的位置   4.1.3 业务层和其他层   4.1.4 创建业务层的模式   4.2 事务脚本模式   4.2.1 事务脚本模式概述   4.2.2 模式实战   4.3 表模块模式   4.3.1 表模块模式概述   4.3.2 表模块模式实战   4.4 活动记录模式   4.4.1 活动记录模式概述   4.4.2 活动记录模式实战   4.5 领域模型模式   4.5.1 领域模型模式概述   4.5.2 领域模型模式实战   4.6 小结   4.7 本章的墨菲法则 第5章 服务层   5.1 服务层究竟是什么   5.1.1 服务层的职责   5.1.2 究竟什么是服务   5.1.3 服务层中的服务   5.2 服务层模式实战   5.2.1 服务层模式概览   5.2.2 服务层模式实战   5.3 相关模式   5.3.1 远程门面模式   5.3.2 数据迁移对象模式   5.3.3 适配器模式   5.3.4 数据迁移对象和程序集   5.4 面向服务架构   5.4.1 SOA的原则   5.4.2 SOA不是什么   5.4.3 SOA和服务层   5.5 富Web前端的特例   5.5.1 重构服务层   5.5.2 设计AJAX服务层   5.5.3 实现AJAX服务层的安全性   5.6 小结   5.7 本章的墨菲法则 第6章 数据访问层   6.1 数据访问层究竟是什么   6.1.1 数据访问层的功能需求   6.1.2 数据访问层的职责   6.1.3 数据访问层和其他层   6.2 设计你自己的数据访问层   6.2.1 数据访问层的契约   6.2.2 插件模式   6.2.3 控制反转模式   6.2.4 为数据上下文打下基础   6.3 雕琢你自己的数据访问层   6.3.1 实现持久化层   6.3.2 实现查询服务   6.3.3 实现事务性语义   6.3.4 实现唯一性和标识映射   6.3.5 实现并发   6.3.6 实现延迟加载   6.4 使用O/RM工具增强数据访问层   6.4.1 对象/关系映射器   6.4.2 使用O/RM工具创建数据访问层   6.5 是否应该使用存储过程   6.5.1 有关存储过程的传言   6.5
面向对象UML 第一部分 软件开发活动 7 第一章 结构化的分析与设计 8 第一节 模型图 8 业务流程图 8 数据流图 11 功能结构图 12 功能树 13 网络结构图 14 程序流程图 15 第节 需求分析 15 需求分析的任务 15 需求分析的步骤 15 需求分析的原则 16 需求分析的方法 16 第三节 概要设计 16 概要设计任务 17 概要设计过程 17 一些概念 17 概要设计原则 17 概要设计方法 17 第四节 详细设计 18 详细设计的任务 18 详细设计的原则 18 详细设计的表示方法 18 第面向对象的分析与设计 18 第一节 面向对象方法概述 18 对象与面向对象 18 面向对象技术产生的原因 19 面向对象方法的基本思想 19 概念 19 面向对象技术的特点 19 面向对象语言及系统 19 第面向对象的分析 20 OOA分析的任务 20 OOA分析的原则 20 OOA分析过程 20 第三节 面向对象的设计 20 设计的模型 20 设计的三条重要原则 21 面向对象设计的概念 21 面向对象的设计方法 21 第三章 UML概述 22 UML对软件工程的重大影响 22 UML的概念模型 22 UML的建模思想 23 第四章 用UML建模 24 第一节 建模概念 24 系统、模型和视图 24 概念和现象 25 数据类型、抽象数据类型和实例 25 类、抽象类和对象 26 事件类、事件和消息 27 面向对象的建模 27 证伪和原型化 28 第UML的主要图形符号 28 用例图 28 类图 35 顺序图 40 状态图 42 活动图 44 图表组织 45 图表扩展 47 第五章 需求提出 47 第一节 需求提出概述 48 第节 需求提出的概念 50 功能性需求--系统功能 50 功能的分类 50 非功能性需求和伪需求 51 系统属性 51 描述的层次 52 用例的分类 52 用例的层次:高层用例与扩展用例 53 主要、次要和可任选的用例 53 基本用例和真实用例 53 正确性、完整性、一致性、清晰性和现实性 54 可验证性和可追溯性 55 可跟踪性 55 greenfield工程、再工程、界面工程 56 第三节 需求提出活动 56 确定执行者 56 确定场景 57 确定用例 58 改进用例 60 确定执行者和用例之间的关系 60 确定最初的分析对象 62 确定非功能性需求 63 从用户得到信息的方法 64 第六章 需求分析概述 64 需求分析的概念 65 概念模型 65 实体对象,边界对象,控制对象 67 回顾关系重数 68 受限关系 69 归纳 69 第七章 需求分析活动:从用例到对象 70 第一节 识别概念 70 识别概念的策略一 70 识别概念的策略 71 建立概念模型的指导原则 71 几个注意点 71 自然语言分析: Abbott的试探法 72 第节 标识实体对象 72 标识实体对象的试探法 72 例子:报告紧急情况用例 73 例子:报告紧急情况用例的实体对象 73 第三节 标识边界对象 73 标识边界对象的试探法 73 例子:报告紧急情况用例的边界对象 74 第四节 标识控制对象 74 标识控制对象的试探法 74 例子:报告紧急情况用例的控制对象 74 第五节 标识关系 75 关系的属性: 75 标识关系的试探法 75 试探关系 75 冗余关系 75 惟一标识 76 找出关联——通用关联列表 76 关联原则 76 关联的命名 77 两个类型间的多重关联 77 关联和它的实现 77 例子:销售点问题中的关联 77 第六节 标识属性 78 属性的属性 78 有效的属性类型 78 非简单属性类型 78 识别属性 79 例子:销售点系统中的属性 79 术语表 80 第八章 需求分析活动:用动态模型表示系统行为 80 系统行为 80 交互图 80 交互图:协作图与顺序图 81 交互图的依赖关系 82 顺序图--两种观点 82 系统顺序图 82 系统事件和系统操作 83 如何建立一个系统顺序图 84 系统事件和系统边界 84 系统事件和操作的命名 84 对象顺序图 85 画顺序图的试探法 86 协作图的基本表示法 87 契约 90 活动及其之间的依赖关系 90 系统行为与契约 90 契约段 91 如何建立一个契约 91 后置条件 92 后置条件应该详细到什么程度 92 描述设计细节和算法——注释 93 前置条件 93 对书写契约的一些建议 93 用例enterItem的契约 93 概念模型的修改 93 标识状态 94 事件、状态和转移 94 状态图 94 用例状态图 95 系统状态图 95 状态无关和状态相关类型 95 何处需要状态图 95 外部和内部事件 96 其他的状态图表示法 96 对单个对象的重要行为进行建模:状态图 96 第九章 GRASP: 职责分配模式 97 导言 97 职责和方法 98 UML类图表示方法 98 职责和交互图 98 模式 99 GRASP: 职责分配中通用原则的模式 99 专家 99 问题: 99 解决方案: 99 举例: 99 专家模式的优点是: 100 创建者 100 问题: 100 解决方案: 100 举例: 100 优点: 101 低耦合度 101 问题: 101 解决方案: 101 举例: 101 优点: 102 高聚合度 102 问题: 102 解决方案: 102 高聚合度例 102 具有不同功能聚合度的一些场景如: 102 优点: 103 控制者 103 问题: 103 解决方案: 103 控制者例 103 优点: 104 问题要点和讨论 104 消息处理系统和命令模式 105 相关模式 106 职责、角色扮演和CRC卡 106 GRASP: 职责分配中通用原则总结 106 多态 106 问题: 106 解决方案: 107 举例: 107 讨论 107 优点 107 纯虚构 107 问题: 107 解决方案: 107 讨论 107 优点: 108 相关模式 108 中介者 108 问题: 108 解决方案 108 举例: 108 讨论: 108 优点: 低耦合 109 相关模式 109 “不要和陌生人讲话” 109 问题: 109 解决方案: 109 举例 109 讨论 109 优点: 低耦合 110 相关模式 110 第十章 需求分析活动:精化模型 110 建立交互图的步骤 110 例:运用对象和模式设计一个解决方案 110 交互图和其他制品 110 销售点系统的协作图 111 对对象间的归纳关系建模——泛化 113 泛化 114 UML表示法: 114 定义超类型和子类型 114 何时定义一个子类型 115 销售点终端系统的类型层次 115 组织模型 116 销售点终端系统的概念模型中的包 116 检查分析模型 116 检查提问 116 分析总结 117 第十一章 系统设计 118 第一节 系统设计概况 118 分析产生的需求模型由以下结果描述: 118 系统设计得到如下结果: 118 他们特别需要解决以下问题: 119 第节 系统设计的概念 120 子系统和类 120 服务和子系统接口 121 耦合度与相关性 121 分层和分区 124 软件体系结构 126 UML配置图 131 两个包之间的可见性 131 服务包接口——虚包模式 131 模型-视图分离模式 132 一个系统中的间接通信 132 应用协调者 133 存储和持久化 133 第三节 系统设计活动:从对象到子系统 133 起点:路线设计系统的分析模型 134 确定设计目标 135 确定子系统 137 将子系统映射到处理器和组件 138 定义连续数据的存储 140 定义访问控制 142 设计全局控制流 146 确定边界条件 147 预期变化 149 系统设计综述 150 第四节 系统设计的管理 151 记录系统设计 151 分配任务 152 与系统设计相关的交流 153 系统设计的不断反复 153 第十章 对象设计 154 第一节 对象设计概况 155 对象设计包括4组活动 155 对象设计是非线性的。 156 第节 对象设计概念 157 应用域对象和解决域对象回顾 157 类型、声明和可见性回顾 157 合约:不变量、前提条件和后续条件 159 UML对象约束语言(OCL) 160 第三节 对象设计活动 161 规格说明活动 161 确定遗漏的属性和操作 163 指定类型、声明和可见性 166 指定约束条件 166 指定异常情况 167 组件选择活动 168 确定并调整类库 168 确定并调整应用程序框架 169 重组活动 169 实现关系 170 提高可复用性 172 消除实现的依赖性 173 优化活动 175 回顾访问路径 175 退化对象:将对象转变成属性 176 存储高开销计算的结果 176 推迟高开销计算 176 第四节 对象设计的管理 177 用文档记录对象设计 177 分配职责 180 设计类图 180 活动及其相互之间的依赖关系 181 何时创建设计类图 181 设计类图示例 181 如何建立设计类图 181 概念模型和设计类图的对比 182 建立销售点系统的设计类图 182 识别出类并画出它们。 182 添加关联和导航 183 添加依赖关系 183 细节的表示法 184
游刃有余地控制复杂性设计高效的企业级解决方案   在一开始就要做出正确的架构决策,从而提高产品的质量和可靠性。《Microsoft .NET企业级应用架构设计》由两位企业级系统开发专家执笔,会告诉你如何用各种模式和技术来控制项目的复杂性,让系统更易于编写、维护和升级。   读者会得到实用的架构方面的指导,包括:   ·在早期设计师就考虑到可测试性、可维护性和安全性   ·通过面向服务的接口暴露业务逻辑   ·选择最佳的模式来组织业务逻辑和行为   ·了解并使用模式来分离Ul和表现层逻辑   ·深入探究数据访问层的模式和最佳实践   ·为对象和数据之间的转换提供良好的解决方案   ·降低开发工作量,避免过度设计,建造更强壮的系统 第1章 当代的架构师和架构   1.1 软件架构到底是什么   1.1.1 将架构原则应用至软件中   1.1.2 什么属于架构,什么不属于   1.1.3 架构与决定相关   1.1.4 软件的需求和质量   1.2 架构师到底是什么   1.2.1 架构师的职责   1.2.2 你知道有多少种架构师吗   1.2.3 对架构师的一些常见误解   1.3 软件开发流程概览   1.3.1 软件生命周期   1.3.2 软件开发模型   1.4 小结   1.5 本章的墨菲法则 第2章 UML必要知识   2.1 uML概览   2.1.1 建模语言的出现动机和历史   2.1.2 UML的模式和使用方法   2.2 UML图表   2.2.1 用例图   2.2.2 类图   2.2.3 顺序图   2.3 小结   2.4 本章的墨菲法则 第3章 设计原则和模式   3.1 基本设计原则   3.1.1 警钟因何而鸣   3.1.2 结构化设计   3.1 3分离关注点   3.2 面向对象设计   3.2.1 面向对象基本设计原则   3.2.2 高级原则   3.3 从原则到模式   3.3.1 模式究竟是什么   3.3.2 模式vs.惯用法   3.3.3 依赖注入   3.4 在设计时就考虑需求   3.4.1 可测试性   3.4.2 安全性   3.5 从对象到方面   3.5.1 面向方面编程   3.5.2 AOP实战   3.6 小结   3.7 本章的墨菲法则   第部分 系统设计 第4章 业务层   4.1 业务逻辑层究竟是什么   4.1.1 业务层剖析   4.1.2 业务逻辑层的位置   4.1.3 业务层和其他层   4.1.4 创建业务层的模式   4.2 事务脚本模式   4.2.1 事务脚本模式概述   4.2.2 模式实战   4.3 表模块模式   4.3.1 表模块模式概述   4.3.2 表模块模式实战   4.4 活动记录模式   4.4.1 活动记录模式概述   4.4.2 活动记录模式实战   4.5 领域模型模式   4.5.1 领域模型模式概述   4.5.2 领域模型模式实战   4.6 小结   4.7 本章的墨菲法则 第5章 服务层   5.1 服务层究竟是什么   5.1.1 服务层的职责   5.1.2 究竟什么是服务   5.1.3 服务层中的服务   5.2 服务层模式实战   5.2.1 服务层模式概览   5.2.2 服务层模式实战   5.3 相关模式   5.3.1 远程门面模式   5.3.2 数据迁移对象模式   5.3.3 适配器模式   5.3.4 数据迁移对象和程序集   5.4 面向服务架构   5.4.1 SOA的原则   5.4.2 SOA不是什么   5.4.3 SOA和服务层   5.5 富Web前端的特例   5.5.1 重构服务层   5.5.2 设计AJAX服务层   5.5.3 实现AJAX服务层的安全性   5.6 小结   5.7 本章的墨菲法则 第6章 数据访问层   6.1 数据访问层究竟是什么   6.1.1 数据访问层的功能需求   6.1.2 数据访问层的职责   6.1.3 数据访问层和其他层   6.2 设计你自己的数据访问层   6.2.1 数据访问层的契约   6.2.2 插件模式   6.2.3 控制反转模式   6.2.4 为数据上下文打下基础   6.3 雕琢你自己的数据访问层   6.3.1 实现持久化层   6.3.2 实现查询服务   6.3.3 实现事务性语义   6.3.4 实现唯一性和标识映射   6.3.5 实现并发   6.3.6 实现延迟加载   6.4 使用O/RM工具增强数据访问层   6.4.1 对象/关系映射器   6.4.2 使用O/RM工具创建数据访问层   6.5 是否应该使用存储过程   6.5.1 有关存储过程的传言   6.5.2 那么动态SQL呢   6.6 小结   6.7 本章的墨菲法则 第7章 表现层   7.1 用户界面和表现层逻辑   7.1.1 表现层的职责   7.1.2 用户界面的职责   7.1.3 表现层的常见误区   7.2 表现层的演化   7.2.1 模型—视图—控制器模式   7.2.2 模型—视图—展示器模式   7.2.3 PresentationModel模式   7.2.4 选择用户界面模式   7.3 表现层的设计   7.3.1 视图中要显示什么数据   7.3.2 处理用户操作   7.4 表现层的惯用设计   7.4.1 Web表现层中的MVP   7.4.2 Windows平台中的MVP   7.5 小结   7.6 本章的墨菲法则   附录 A Northwind Starter Kit   最后的思考

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值