前言
设计模式是非常好的课程,我认为是在实践开发中最有用的课。设计模式并不是针对具体技能的学习,它是最能体现出程序设计这一概念的课程。作为一个有点强迫症的人,我非常希望我撰写的代码能够非常优雅,统一,易用。我觉得设计模式并不是由谁发明的,就像“此曲只应天上有 ,妙手偶得之”那般,设计模式是代码构筑中最符合现实的自然沉淀。
学习它,我希望能够使用它,也许在不久后随着我的技术成长,我会更加地理解它。
UML简介
UML(Unified Modeling Language)是可视化的标准建模语言,是用来描述和分析软件系统的语言。开发者们可以使用UML互相交流,提前确定规划等。
UML的结构
1. 视图(View)
UML在建模过程中,使用不同的视图来从不同的角度描述软件系统。UML包括5种视图。
用户视图: 以用户的观点表示系统的目标,是所有视图的核心,描述系统的需求。
结构视图:描述系统的静态行为,描述系统的静态元素如包、类与对象,以及它们之间的关系。
行为视图:表示系统的动态行为,描述系统组成元素在系统动起来之后的交互关系。
实现视图:表示系统物理文件以及它们之间的关系。
环境视图:描述系统中硬件设备以及它们之间的关系。
2. 图(Diagram)
主要提供若干类型的图与上述五种类型的视图进行对应。
用户视图: 用例图
结构视图:类图、对象图、包图、组合结构图
行为视图:状态图、活动图、顺序图、通信图、定时图、交互概览图
实现视图:组件图
环境视图:部署图
设计模式的研究主要使用类图、状态图和顺序图。
3. 模型元素(Model Element)
模型元素是包含事务以及事务与事务之间的联系。每一个模型元素都有一个与之相对应的图形元素(类、对象、消息、组件、节点等),以及它们之间的关系(关联关系、泛化关系、依赖关系)。
4. 通用机制(General Mechanism)
通用机制为模型元素提供额外的注释、修饰和语义。主要包括规格说明、修饰、公共分类和扩展机制四种。
UML的特点
1. 工程化:UML引入后使得软件开发成为工程学科,因为我们可以根据需求创建模型,再通过模型来指导实施。以此,我们可以减少系统开发风险,降低开发和维护成本。
2. 规范化:一套标准,大家都用,高效沟通。
3. 可视化:图形符号促进对问题的理解和交流,直观发现问题,交流更加便捷。
4. 系统化:提供5大视图和13种图,从不同角度解释一个系统。
5. 文档化:使用UML设计时,产出系统设计文档,程序员基于这些文档更清楚项目,节省学习时间、提高修改效率、降低维护成本。
6. 智能化:一些工具可以一键生成代码,或者通过代码反推UML。
类图
类与类图
UML类图种,类一般由:类名、属性、操作(方法)三部分组成。
类的属性:+代表public #代表protected - 代表private
操作部分:+/#/-同上,先写方法名括号种带参数,冒号后面跟返回值
类之间的关系
关联关系
表示两个类之间有关系。通常将一个类对象作为另一个类的属性,类和类之间用实线连接。
UML中的关联关系通常有以下几种类型。
双向关联
比如顾客购买商品,商品被顾客拥有。
单向关联
比如顾客拥有地址。
自关联
比如系统中可能会存在一些类的属性对象为自身。
多重性关联
反映的是类的对象之间的链接个数。
聚合关系
聚合关系描述的是整体与部分的关系,但是聚合中,部分离开整体依然独立存在!
比如汽车和引擎,引擎离开了汽车依然运转。
组合关系
组合关系描述的是整体和部分的关系,但是在组合中,整体和部分有统一的生命期,同生共死,谁离开谁都不好使。
比如人与头、嘴巴之间的关系。
依赖关系
是一种使用的关系,特定事物的改变有可能会影响到使用该事物的其他事物。体现在某个类的方法使用另一个类的对象作为参数。带箭头的虚线表示,依赖的一方指向被依赖的一方。
泛化关系
泛化关系指的就是继承关系,使用带空心箭头的实现表示,由子类指向父类。
接口与实现关系
接口规定动作,继承的类需要接受这种规范。使用虚线空心箭头表示,从继承的类指向接口。
顺序图
顺序图定义
顺序图用来强调对象间消息传递次序的交互图,又称为时序图或者序列图。
需求分析阶段的顺序图:主要用于描述用例中的对象之间的交互,可以使用自然语言来绘制,用于细化需求。
系统设计阶段的顺序图:确切表示设计中对象之间的交互,对象之间通过方法传递消息,使用专业术语命名等。
顺序图的组成元素和绘制
状态图
状态图定义
状态图描述一个特定对象的所有可能状态及引起状态转移的事件。通常用状态图来描述单个对象的行为,并不是所有的类都需要使用状态图来描述行为,只有那些具有重要交互行为的类,才会使用状态图描述。
一个状态图包括一系列的状态和状态之间的转移。
状态图组成元素与绘制