官方定义:UML-UnifiedmodelinglanguageUML(统一建模语言),是一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的结果
UML是对软件密集型系统中的制品进行可视化、详述、构造和文档化的语言。制品{Artifact}是指软件开发过程中产生的各种各样的产物,如模型、源代码、测试用例等。
简单来说,UML是一门语言,在统一的标准规则下,用于给对象建模,可应用于软件开发过程中的不同场景,如需求分析,组件开发,用例测试等等。
面向对象软件工程的概念由Booch提出,Booch也是面向对象方法最早的倡导者之一。Booch1993表示法比较适用于系统的设计和构造。
Rumbaugh等人提出了面向对象的建模技术(OMT)方法,采用面向对象的概念,并引入各种独立于语言的表示符。用对象模型、动态模型、功能模型和用例模型共同完成对整个系统的建模,所定义的概念和符号可用于软件开发的全过程,软件开发人员不必在不同阶段进行概念和符号的转换。OMT-2适用于分析和描述数据为中心的信息系统。
1994年Jacobson提出了OOSE方法,其最大特点是面向用例,并在用例的描述中引入了外部角色的概念。OOSE适合支持商业工程和需求分析。
1996年10月,UML建模语言获得了700多个公司支持,到1996年年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。
1997年年底,OMG组织(ObjectManagementGroup,对象管理组织)采纳UML1.1作为基于面向对象技术的标准建模语言,目前最新版本为UML2.0,UML发展史如下图所示。
其中事物与关系,构成了图
用例图
包图
活动图
UML建模可以达到以下目的:
交互图是描述对象之间的关系以及对象之间的信息传递的图。通常描述一个用例的行为,显示该用例中所涉及的对象之间的消息传递。交互图可以帮助分析人员对战检查每个用例中描述的用户需求,如这些需求是否已经落实到能够完成这些功能的类中去实现,提醒分析人员去补充遗漏的类或方法。
通过斜体名字来表示抽象类
通过增加interface注释来表示接口类
属性写在类图中部
属性的写法:(权限)(属性名):(属性类型)
其中权限有四种,分别为:
最后,下划线表示static
方法写在类图的下方
方法的写法:(权限)(方法名)[(参数名)]:[返回值类型]
方法的权限与static表示方法与属性一致
依赖表示:由依赖方(类B)连线被依赖方(类A),连接线为虚线,终点为箭头状,指向被依赖方(类A)
依赖含义:只要类中用到了对方。即一个类的实现需要另外一个类的协助,如果没有对方,就无法通过编译,就可以表示为依赖关系。其他五种关系都是依赖关系的特例。
代码体现:
类中用到了另一个类
publicclassA{publicBb=null;}publicclassB{}类中用到了另一个类的成员属性
publicclassA{publicStringid=B.id;}publicclassB{publicfinalstaticStringid="001";}泛化
泛化表示:由子类(类B)连线父类(类A),连接线为实线,终点为空心三角形,指向父类(类A)
泛化含义:泛化关系实际上就是继承关系,他是依赖关系的特例,如果A类继承了B类,我们就说A和B存在泛化关系
生活实例:我们知道很多世界上有很多动物,而动物并不具体表示哪一种类型的动物,而是所有类型动物的一个抽象称呼。其中猫属于动物,它拥有动物所拥有的一切属性和方法。比如名字,体重,会动等等。这时我们就可以说猫是继承自动物。猫与动物之间存在泛化关系。
publicclassAnimal{privateStringname;privateintweight;publicvoideat();}publicclassCatextendsAnimal{publicvoidmiao();}实现
实现表示:由实现类(类B)连线接口类(类A),连接线为虚线,终点为空心三角形,指向接口类(类A)
实现含义:实现关系实际上就是A类实现B接口,就表示A类和B类具有实现关系,也是依赖关系的特例
publicinterfaceAnimal{publicvoideat(Stringfood);}publicclassCatimplementsAnimal{publicvoideat(Stringfood){System.out.println("eating"+food);}}关联
关联表示:由类A连线类B,连接线为实线,终点为点/箭头,表示单向关联/双向关联,连接线上可以标注数字,以用来表示类A与类B间的数量关系。
关联含义:实际上就是类与类之间的联系,体现的是业务逻辑的关系,是依赖关系的特例。
生活实例:
代码体现:略
聚合表示:由部分类(类B)连线整体类(类A),连接线为实线,终点为空心菱形,连接线上可以标注数字,以用来表示类A与类B间的数量关系。
聚合含义:聚合关系表示的是整体和部分的关系,整体与部分可以分开,聚合关系是关联关系的特例,所以他具有关联的导航性与多重性,是强的关联关系,关联和聚合在语法上无法区分,必须考察具体的逻辑关系
生活实例:一支大雁队伍由许多只大雁组成,大雁可以从大雁队伍中离开独立存在,并且大雁队伍也依然存在,这就表示大雁与大雁队伍是聚合关系。
//聚合关系publicclassComputer{privateMousemouse;privateMonitormonitor;publicvoidsetMouse(Mousemouse){this.mouse=mouse;}publicvoidsetMonitor(Monitormonitor){this.monitor=monitor;}}classMouse{}classMonitor{}组合
组合表示:由部分类(类B)连线整体类(类A),连接线为实线,终点为实心菱形,连接线上可以标注数字,以用来表示类A与类B间的数量关系。
组合含义:组合关系表述的也是整体与部分的关系,但是整体与部分不可以分开,同样,组合关系是关联关系的特例,必须考察具体的逻辑关系而定,语法层面是无法区分的
生活实例:汽车由车身,发动机,轮胎等组成。汽车无法在失去发动机的情况下存在,那么就表示汽车和发动机是组合关系。
/**人和头的关系*/publicclassPerson{privateHeadhead=newHead();//组合关系}classHead{}测试一下
元素表示:用实心的圆点表示
元素介绍:状态图用初始状态(InitialState)表示对象创建时的状态,每一个状态图都要有且只有一个初始状态
元素表示:用一个实心圆外加一个圆圈表示
元素介绍:每一个状态图可能有多个终止状态或者没有(FinalState)
元素表示:这是一个简单的状态表示,用圆形矩形表示状态框,中间写上状态名字
元素介绍:指在对象的生命周期中的某个条件或者状况
元素表示:这是一个完整的状态表示,用圆形矩形表示状态框,分为上中下三部分。最上面写状态名字,中间写状态变量,最下面写行为。
元素介绍:指在对象的生命周期中的某个条件或者状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。
元素表示:从一个状态到另一个状态之间的连线称为转移,又名迁移,连线为实线,终点为箭头。可在转移上添加转移事件,表示源状态触发转移事件后会进行转移。若不加转移事件,则表示在源状态的内部活动执行完毕后自动触发。
元素介绍:表示状态间的转换
提示:以上只是状态图常用的元素介绍,已足以应用于我们的日常。但其中还存在许多额外的图形表示,如历史状态,内部状态,复合状态等等,限于篇幅就不一一介绍,有兴趣可以自行寻找资料学习。