产品经理的必备技能之一是画UML图,本文就告诉你怎么画标准的类图吧。本文结合网络资料和我的心得所成,不当之处,请多指教。程序员
咱们作项目的需求分析,最开始每每获得的是一堆文字,请看下面这堆文字:编程
本项目是在一期的基础上增长对电缆、通信工程的管理和施工详细数据的记录和统计,使整个系统更好的管理各工程项目从中标开始到竣工验收的所有过程和资料和分析施工过程的数据。 本系统将一条或一个标段的架空电力线路工程定为一个单位工程,即系统中的一个工程项目;每一个单位工程分为若干个分部工程;每一个分部工程分为若干个分项工程;每一个分项工程中又分为若干相同单元工程。网络
这是关于系统状况的一段概述,里面充斥了大量的术语、概念,若是你不是专业人士,恐怕难以读懂上述文字。架构
项目初期,咱们每每对业务一无所知,咱们最急迫须要解决的问题就是理清楚这些业务概念以及它们的关系,若是能用好类图,你将能深刻地剖析系统业务。工具
用下面这个UML图来描述是否清晰了许多呢?编码
在上图中,各个类之间是关联关系,也就是拥有的关系。spa
类图(Class diagram)主要用于描述系统的结构化设计。类图也是最经常使用的UML图,用类图能够显示出类、接口以及它们之间的静态结构和关系。设计
使用工具:Visio或者processon在线做图 在类图中一共包含了如下几种模型元素,分别是:类(Class)、接口(Interface)以及类之间的关系。 2.1 类(Class) 在面向对象(OO) 编程中,类是对现实世界中一组具备相同特征的物体的抽象。code
2.三、类图中关系(relation) 在UML类图中,常见的有如下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) 【泛化关系】:是一种继承关系,表示通常与特殊的关系,它指定了子类如何特化父类的全部特征和行为。 例如:老虎是动物的一种,即有老虎的特性也有动物的共性。 【箭头指向】:带三角箭头的实线,箭头指向父类cdn
5. 组合(Composition)
【组合关系】:是总体与部分的关系,但部分不能离开总体而单独存在。
如公司和部门是总体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,
它要求普通的聚合关系中表明总体的对象负责表明部分的对象的生命周期。
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向总体
复制代码
6. 依赖(Dependency)
【依赖关系】:是一种使用的关系,即一个类的实现须要另外一个类的协助,
因此要尽可能不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
复制代码
软件在分析与设计两个阶段各自会绘制一套UML类图,并且是由分析师和设计师两个不一样的角色绘制的。那么这两套UML类图有什么异同呢?下面将解释这个问题。
领域UML类图vs实现UML类图
上文提到,在软件分析与设计过程当中,会由两种角色产生两套UML类图。通常状况下,分析师绘制的UML类图叫作“领域UML类图”,而设计师绘制的UML类图叫作“实现UML类图”。这里要声明,这两个名词是个人习惯性叫法,并非你们都认同的通用叫法。下面,我对这两种UML类图给出个人定义:
领域UML类图:产生于分析阶段,由系统分析师绘制,主要做用是描述业务实体的静态结构,包括业务实体、各个业务实体所具备的业务属性及业务操做、业务实体之间具备的关系。
虽然这个UML类图也叫“UML类图”,可是说实话,它和编程中的“类”实在是没啥关系,由于最后的系统中可能根本没有类和它们对应,并且不少最后系统中的类如控制类和界面类这套UML类图中也没有。也就是说这套图和具体技术无关,也不是画给程序员看的,它只是表达业务领域中的一个静态结构。下面给个例子:
最后,咱们总结一下要点: 1.软件分析与设计是编码前的两个阶段,其中分析仅与业务有关,而与技术无关。设计以分析为基础,主要与具体技术有关。 2.分析阶段由分析师绘制领域UML类图,设计阶段由设计师绘制实现UML类图。 3.领域UML类图表示系统的静态领域结构,其中的类不与最终程序中的类对应;设计UML类图表示系统的技术架构,是程序员的编码依据,其中的类与系统中的类对应。 4.领域UML类图中类的属性与操做仅关注与业务相关的部分,实现UML类图中的属性与操做要包括最终须要实现的所有方法与操做。