百度百科上面对UML的解释:
简单地说,UML是软件开发的图纸——它对于软件的意义就像建筑物的图纸对于建筑物一样。
这里主要解释基本语法(以下使用starUML绘制):
类(class):
一般来说,类图用这样的矩形表示,第一行是类名(抽象类类名用斜体),第二行是类的特性,一般是指类的属性,第三行是类的操作,通常指类的方法,第二行和第三行开头的+,-,#,~分别表示public、private、protected、package四种访问权限(注:后面出现的类我就不写属性和方法了,直接空着了~)
接口(interface):
有两种表示:
- 第一种(左边的)和类差不多(上面的<<interface>>在starUML上还默认不显示),在Java里接口一般没有属性的,有也只能是public static finnal固定格式的,下面的class4是工厂接口的实现类。实现类由虚线+空心三角形构成的箭头指向接口~
- 第二种(右边的)被称作棒棒糖表示法,一个圈和实现类相连接,圈旁边显示接口名,然后属性方法如图显示(为空就可以不显示横线)。实现类由实线与棒棒糖(接口)相连~
类的继承(Super-Class and Sub-Class)
父类和子类,动物类是父类,野兽类是子类,子类由实线+空心三角形箭头指向父类,和父类和子类的关系和上面接口与实现类的关系有些类似,但一个是实线,一个是虚线,而且箭头方向是反的~
实际上呢,类的继承被称作 泛化关系(Generalization),是一般到特殊的关系,就像上面的动物到野兽,甚至再到老虎,这都是泛化。而接口和实现类被称作 实现关系(Realization),表示类是接口特性和行为的实现~
类似的关系还有组合、聚合、关联、依赖:
组合关系(Composition)
组合关系是整体和部分的关系,比如野兽和四肢,鸟和翅膀,整体和部分都是不可分离的,这种关系称之为组合。部分由实线+实心菱形箭头指向整体~
聚合关系(Aggregation)
聚合关系也是整体和部分的关系,但整体和部分是可以分离的,比如狮子和狮群,水滴和河流,汽车和轮胎,整体和部分是可以独立存在的,这种关系称之为聚合(你要说上面那个野兽和四肢、鸟和翅膀也能分离,那就当我例子没举好吧,意思懂了就行~)。部分由实线+空心菱形箭头指向整体(聚合关系的关联性显然没有组合关系那么强,所以实心菱形换成了空心菱形)
关联关系(Association)
关联关系表示一种拥有关系,拥有类可以知道被拥有类的信息。
关联关系可以是双向的,比如雄狮可以拥有雌狮,雌狮也可以拥有雄狮(互为配偶),再比如老师和学生的关系,老师拥有学生,学生也拥有老师。这样的双向关联的两个类之间用实线连接。
关联关系也可以是单向的,比如学生和课程的关系,学生可以有很多课程,但课程是没法拥有学生的(额,计算机的世界里不存在拟人~~),单向的关联直接由一个实线箭头从拥有类指向被拥有类
依赖关系(Dependency)
依赖关系是一种使用者和被使用着的关系,比如程序猿使用计算机。依赖关系表示一个类的实现会用到另外一个类(依赖),程序猿类类想要实现敲代码的方法就要用到计算机类~表示方法由使用者虚线箭头指向被使用者。
以上六种关系的强弱比较为:泛化=实现>组合>聚合>关联>依赖
以下的UML图基本表示了上面所有的关系(这大概是程序员被黑的最惨的一次了吧~~~):