类是具有相同属性和方法的一组对象的抽象,是面向对象设计中的基本单位。比如老虎、鱼、鸟等这些动物都有生命,都需要进行新陈代谢,他们都有这些共同的属性和方法,所以“动物”就是一个类;如果再往下分比如鸟有燕子、喜鹊、啄木鸟等种类,但它们都有翅膀,它们都可以飞翔,所以说,“鸟”也是一个类。
类图是面向对象系统建模中最重要、最基本、最常见的图。类图显示了一组类、接口、协作以及它们之间的关系。
类图中可以包含类、包、接口以及它们之间的关系等元素。
类在类图中的表示如下:
上图中,类由三部分组成,最上层为类名,中间层为类的属性,最底层为类的方法。属性和方法前面的图标分别表示公有(public)、私有(private)、保护(protect)、包内成员可见(package),举的“鸟类”的例子,类名为“Bird”,所有的鸟都有life和Wings,所有的鸟都会飞,都会下蛋。
有些系统中可能存在大量的类和接口等元素,因此,有必要把这些元素组织成一组一组的,包正是用于把建模元素组织成组的通用机制。包中可以包含类、接口、构件、结点、协作等元素,甚至可以包含其他包。包在图中的表示为:
接口是一组操作的集合,这组操作用于描述类或构件的一个服务。在UML图中通常用一个类似于类图的矩形框,不过第一层要写明“<<interface>>”,或者还可以用一个小圆圈表示,如:
1、关联关系:
(1)、单向关联:表示两个类由一定的关联,但只有一个类知道这种关系的存在,它知道另一个类的属性和方法,通常用一条直线加一个箭头表示,比如:
(2)、双向关联:两个类也有联系并且这两个类彼此都知道这种关系的存在,通常用两段都有箭头的一条直线表示,比如:
(3)聚合:聚合是比较强的关联关系,表现的更多的是整体与部分的关系,比如一辆车有多个车轮,但每个车轮不一定要装在这辆车上,比如:
(4)组合:组合是更强的关联关系,它在聚合关系的基础上表示部分与整体不可分割,比如一个人有两条胳膊和腿,而且这两条胳膊和腿必须长在这个人的身上,比如:
2、泛化:
泛化就是类与类、接口与接口、类与接口之间的继承关系,在途中通常用一条直线加一个小三角表示:
在这个图中,Animal、BIrd、Fish分别是一个类,但Bird类和Fish类继承了Animal类,所以Bird类和Fish类也就同时继承了Animal父类中的属性和方法。
3、依赖:依赖在图中用一条虚线加箭头表示,它表明一个类依赖于另一个类,比如人需要吃东西,下面这个图就表示人类依赖于食物类:
注:它与关联的区别在于,关联更强,依赖更弱,关联在类中表现为成员变量,而依赖关系表现为成员方法内部的局部变量,方法参数和静态方法的调用等
4、实现关系:在我理解来看,实现关系跟“使用”差不多,通常指一个类实现接口的功能,在图中用一条虚线加一个小三角表示:
5、几种关系的强弱次序:组合>聚合>关联>依赖
第一次画系统的类图,感觉抽象的不是特别好,因为每种用户的权限不同,而且一般用户、操作员、管理员的权限一级一级升高,所以就就给他们抽象出来一个用户类,然后一级一级往下泛化,不知道这样是否合适……