先来简单的说一说什么是UML?
UML是统一建模语言,是用来设计软件的可视化建模语言,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息,UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9种图。
到这里,相信大家对UML还是一脸懵逼,相信耐心的看完这篇(不讲概念,只求看懂),一定对UML的理解会更加透彻
1.类图的表示方法
在这个UML图中,类使用包含类名、属性(field)和方法(method)且带有分割线的矩形来表示,比如上图表示是一个Lufei类,它包含name、age和address这三个属性,以及fight()方法
属性/方法名称前加的加号和减号表示了这个属性/方法的可见性,UML类图中表示可见性的符号有三种:
- +: 表示public
- - : 表示private
- #: 表示 protected
举个比较形象的例子:
上图定义了一个路飞类(这里)
- fight1()方法:修饰符为public,没有参数,没有返回值
这是路飞刚出场的招式,利用自己的橡胶人的特性,具有反弹,public可以理解为,反弹这个招式,不只是只有橡胶人才可以做到,访问范围是最大的,没有参数可以理解为这个招式不需要任何的前提条件或者不局限于某个特定的场景,因为路飞的身体特性造成的,没有返回值是不会对路飞自身做出任何的改变
- fight2()方法:修饰符为protected,没有参数,返回值类型为String类型
这是路飞第一次二挡形式,这种形式会给它的身体造成各方面的优化(String),也不存在前提条件或者某种特定的场景
- fight3()方法:修饰符为private,接收一个参数,参数类型为int,返回值类型是int
这是路飞4挡蛇人模式,private意味的是私有的,这种形态整个海贼世界只有路飞才有,参数可以理解成为进阶4挡得有充足的体力(4挡对身体的消耗是巨大的),返回值可以理解为对凯多老师的伤害值
2.类与类之间的表达方式
1.关联关系
关联关系是对象之间的一种引用关系,用来表示一类对象与另一对象之间的关系,如雷利和路飞、汉库克和路飞()等,关联关系式类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系
- 单向关联
在UML图中单向关联用一个带箭头的实线表示,上图表示每个海贼都有一个家乡,比如路飞-风车镇、艾斯-蒙巴拉村等,让Pirates类持有一个类型为HomeTown的成员变量实现
- 双向关联
从上图我们很容易看出,所谓的双向关联就是双方各自持有对方类型的成员变量,在UML类图中,双向关联用一个不带箭头的直线表示,pirateCorps代表的是海贼团,pirates指的是海贼,海贼团中有很多海贼,每个海贼属于一个海贼团
就好比艾斯属于白胡子海贼团,白胡子海贼团中还有其他成员(马尔科等)
- 自关联
自关联在UML类图中用一个带有箭头且指向自身的线表示,自己包含自己
听说路飞5挡可以把自己变成任何东西,它应该可以变出很多个自己吧,类似于自己包含自己
2.聚合关系
聚合关系是关联关系的一种,是强关联关系,是整体和部分之间的关系
聚合关系也是通过成员对象来实现的,其中成员对象时整体的一部分,但是成员对象可以脱离整体对象而独立存在。比如:布鲁克与他的旧船团的关系,即使旧船团早已不在,但是他仍然是海贼
--------------------------->
3.组合关系
组合表示类之间与部分的关系,但它是一更加强烈的聚合关系,在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在, 部分对象也将不存在,部分对象不能脱离整体对象而存在(头和嘴的关系),一般用带菱形的实线表示,菱形指向整体
4.依赖关系
依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联,在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖的类)中的某个方法来完成一些职责
在UML图中,依赖关系用带箭头的虚线表示,箭头从使用类指向被依赖的类,如上图:
BIG MOOM和宙斯的关系图,大妈驾驶宙斯
5.继承关系
继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类和子类之间的关系,是一种继承关系
海贼王中的天龙人就好像是神一般的存在,有些人天生出身就是天龙人,这就是从父亲那里继承来的荣华富贵以及头衔()
在UML类图中,泛化关系用带空心三角箭头的实线表示,箭头从子类指向父类,在代码实现的时候,使用面向对象的继承机制来实现泛化关系,如上图所示
6.实现关系
实现关系是接口与实现类之间的关系,在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有抽象操作
“我可不打算统治,在这大海上最自由的人就是海贼王”
在UML类图中,实现关系使用空心三角形箭头的虚线来表示,箭头从实现类指向接口,例如:路飞和罗杰都继承了海贼王的意志(有点牵强,但是大概就是这么个意思)