什么是UML?
统一建模语言(UML)是一种通用的可视化建模语言,可以用来描述、可视化、构造和文档化软件密集型系统的各种工件。
UML是独立于过程的,它适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具。
注:UML不是一种程序设计语言,其描述的模型可以和各种编程语言相联系。
UML的目标
1.为建模者提供可用的、富有表达力的、可视化的建模语言,以开发和交换有意义的模型。
2.提供可扩展性和特殊化机制以延伸核心概念。
3.支持独立于编程语言和开发过程的规范。
4.为理解建模语言提供正式的基础。
5.推动面向对象建模工具市场的成长。
6.支持更高级的开发概念。
UML的应用范围
UML的构造块:事物、关系、图
关系是模型元素之间具体化的语义连接,负责联系UML的各类事物,构造出结构良好的UML模型。
四种关系:
关联关系:描述不同类元的实例之间的连接。
依赖关系:描述一对模型元素之间的内在联系。
泛化关系:描述特殊到一般的一种归纳和分类关系。
实现关系:描述规格说明和其实现的元素之间的连接的一种关系。
UML图根据基本功能和作用,可分为:结构图与行为图。
结构图:捕获事物与事物之间的静态关系,用来描述系统的静态结构模型。
行为图:捕获事物的交互过程如何产生系统的行为,用来描述系统的动态行为模型。
面向对象设计的原则——开闭原则
内容:软件实体应当对扩展开放,对修改关闭。
通俗来讲,开闭原则就是软件系统中的各组件,应该能够在不修改现有内容的基础上,引入新功能。
为了达到开闭原则,对于类图的设计应该尽可能地使用接口或泛化进行封装,并且通过使用多态机制进行调用。接口和泛化的使用可以使操作的定义与实现分离,使得新添加的模块依赖于原有模块的接口。多态的使用使得在使用时可以通过创建父类的间接实例通过多态的支持进行操作,从而避免对其他类的修改。
面向对象设计的原则——里氏替换原则
内容:子类对于父类应该是完全可替换的。
具体来说,如果S是T的子类,则T类的对象可以被S类的对象所替代而不会改变该程序的任何理想特性。
我们都知道,子类的实例是父类的间接实例。根据多态原则,当父类创建一个间接实例时并调用操作时,将根据实际类型调用子类的操作实现。
面向对象设计的原则——依赖倒置原则
内容:高层次模块不应该依赖于低层次模块,二者都应该依赖于抽象;抽象不应该依赖于具体,具体应该依赖于抽象。
根据依赖倒置原则,从高层次到低层次之间设计类结构的方式应该是:高层次类抽象层低层次类。
在设计时,可以使用接口作为抽象层。
面向对象设计的原则——接口分离原则
内容:在系统中任何客户类都不应该依赖于他们不使用的接口。
当系统中需要接入许多个子模块时,相比于只使用一个接口,将其分成许多规模更小的接口是一种更好的选择,其中每一个接口服务于一个子模块。
应用接口分离原则降低了系统的耦合度,从而使系统更容易重构,改变并重新部署。
面向对象设计的原则——单一职责原则
内容:每个类都应该只含有单一的职责,并且该职责要由这个类完全封装起来。
一个类应该只有一个可以引起它变化的原因。
每个职责都是变化的一个中轴线,如果类有多个职责或职责被封装在了多个类里,就会导致系统的高耦合,当系统发生变化时,这种设计会产生破坏性的后果。