UML 类图1 类图的结构

用动物园的类图结构来举例,先抽象化动物类如图所示:

一个类图包括类名、属性和行为,类名不用解释,在介绍属性和行为前,先了解一下访问权限:

  • ‘ – ’ private:只有类内部的成员才能访问

  • ‘ + ’ public:类内部和类外部都能访问

  • ‘ # ’ protected:类内部和它的子类才能访问

  • ‘ ~ ’ package/default:同一个包中任何其它的类都能访问

属性以” -name:string“为例,’ – ‘表示访问权限为private,’name’是属性名,’string’是属性name的数据类型。

行为以”-eat():bool“为例,’ – ‘表示访问权限为private,’eat’是行为名,’bool’是行为eat的返回值。

2 类之间的关系

  • ‘ —▷ ‘ Inheritance,继承
  • ‘ — ‘ Association,联合
  • ‘ —◇ ‘ Aggregation,聚合:表示整体和部分关系,而且部分可以脱离整体存在,类之间没有强的生命周期依赖
  • ‘ —◆ ‘ Composition,组合:表示整体和部分关系,而且部分不能脱离整体存在,有强的生命周期依赖,一个类被删了,组合的类也随之被删了

此外,多重性指在类之间关系连接上的数字,表示它们之间的数量约束,如1表示只能有一个,1…*表示有一到多个。

3 读类图

看到类图,我们先看清有什么类,再看类之间的关系和多重性,从而理解整个类图的结构和各个属性和行为的含义。

在这个类图中,首先看到User用户类,它有4个属性和一个方法,用来实现用户的登录。

随后是Administrator管理员类和Customer顾客类,它们都是User的子类,继承User所有的属性和方法,同时也有自己特定的属性和方法,比如Administrator可以updateCatalog更新目录。

再看Customer类,有Shopping Cart购物车类和Order订单类和它组合,意味着若Customer类被销毁,那么Shopping Cart类和Order类也将消失,它们不能独立存在于Customer外部。Customer可以有任意个(0…*)Shopping Cart和Order,但Shopping Cart和Order只能有一个Customer。

最后看Order类,Shipping info发货信息类和Order Details订单详情类也和它组合,Order只能有一个Shipping info和一个Order Details,Shipping info和Order Details也只能有一个Order。