统一建模语言(UML)
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。
Grady Booch的描述对象集合和它们之间的关系的方法。James Rumbaugh的对象建模技术(OMT)。Ivar Jacobson的包括用例方法的方式。还有其他一些想法也对UML起到了作用,UML是Booch, Rumbaugh, Jacobson。UML已经被对象管理组织(OMG)接受为标准,这个组织还制定了通用对象请求代理体系结构(CORBA),是分布式对象编程行业的领头羊。计算机辅助软件工程(CASE)产品的供应商也支持UML,并且它基本上已经被所有的软件开发产品制造商所认可,这其中包括IBM和微软(用于它的VB环境)。
UML规范用来描述建模的概念有,类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态
UML定义了5类,9种模型图
五种类图定义
一, 用例图:
1, 用例图:从用户角度描述系统功能,并指各功能的操作者。
用例图有四部分组成:用例(Use Case)、参与者(Actor)、系统边界、关联
二, 静态图:包括类图,包图,对象图。
2, 类图:描述系统中类的静态结构
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
泛化:A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)
继承: 指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;
实现: 指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;
依赖: 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;
关联:他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量
聚合: 聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
组合: 组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
3, 包图:是包和类组成的,表示包与包之间的关系,包图描述系统的分层结构
上图为某java项目的一个工具Package,里面有四个工具类。类比较多的时候,为简单明晰起见,也可以不填写子元素。
如果只有一个Package,那也就失去了Package的作用,没有画Package Diagram的意义。Package之间的关系非常的简单,两个字,依赖,UML中依赖用带箭头的虚线表示。我个人还是非常不建议依赖关系出现Cycle的。依赖关系最常见的一个例子就是分层架构,把代码分布到多个层次中,某层可以依赖于下层以及同层,但是不能依赖于上层。其它的组织方式还包括按照模块划分,按照功能划分等。下图是一个Java项目的简单三层架构Package Diagram:
4, 对象图:是类图的实例
对象图(Object Diagram)表示一组对象和它们之间的联系。对象图是一个系统的详细状态在某一时刻的快照。对象图实质上是对象类图的实例,或者是交互图的静态部分的实例,对象图有时也称为实例图。对象图的表示方法与类图没有什么不同,对象图同样是由节点和弧组成
三, 行为图:描述系统动态模型和对象组成的交换关系。包括状态图和活动图
5, 活动图:描述了业务实现用例的工作流程, 但是活动提和流程图是有区别的,不能将两个概念混淆。
6, 状态图:状态图着重描述从一个状态到另一个状态的流程,主要有外部事件的参与。
四, 交互图:描述对象之间的交互关系
7, 顺序图(也叫时序图):对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互,用对象间的交互来描述用例(注意是对象间的), 寻找类的操作。
8, 合作图也叫(协作图):描述对象之间的协助关系, 时序图按照时间顺序布图,而协作图按照空间结构布图协作图与时序图在语义上是等价的,二者可以相互转换,而不会丢失信息。(通过上面的例子,你可能已经看出他们之间的转化关系)
还是以三国的例子画出协作图
五, 实现图:
9, 配置图(也叫部署图):定义系统中软硬件的物理体系结构
部署图和网络拓扑图相似,都是在物理层次上做整体的系统规划,但是部署图功能更强大,可以继续细化设计。
部署图可以描述客户当前的IT环境架构,可以用来设计客户改造后的IT环境架构。