UML--类图

统一建模语言(Unified Modeling Language,UML)是一种为

面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

UML —> 类图 (Class Diagram)

类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让开发人员在正确编写代码以前对系统有一个全面的认识。类图是一种模型类型,确切地说,是一种静态模型类型。类图表示类、接口和它们之间的协作关系。

类的表示法

类图标由三个部分组成:第一个部分是类名,第二个部分是属性,第三个部分是操作

类名在它的命名空间中唯一。类名以大写字母开头,省略多个单词之间的空格。

属性和操作在类的范围内必须无二义。属性和操作是以小写字母开头后续单词的首字母大写,且同样省略空格。

抽象类抽象操作斜体表示。

  • 属性规格说明格式:

可见性 属性名称:类型 [多重性] = 默认值 {特性字符串}

  • 操作规格说明格式:

可见性 操作名称(参数名称:类型):返回值 {特性字符串}

可见性

  • 公有可见性(+):对能看到这个类的任何元素都可见。
  • 保护可见性(#):对这个类及其子类的其他元素可见。
  • 私有可见性(-):对这个类的其他元素可见。
  • 可见性(~):对同一个包中的其他元素可见。

类关系

类的基本联系包括关联、泛化、聚合和组合

关联

关联用不带箭头的实线表示。

关联连接了两个类,体现了一种语义关系

关联通常用名词词组来标注,如下图中的Analyzes,以说明关系的实质。

类可能与它自己有关联(称为自关联),如PlanAnalyst类的实例之间的协作。注意,这里同时使用了关联端名称关联名称,目的是提供清晰性。

关联可以进一步通过多重性来修饰(没有也可以)。多重性的语法如下:

  • 精确到1个。
  • 数目不限(0个或多个)。
  • 0..*:0个或多个。
  • 1..*:1个多多个。
  • 0..1:0个或1个。
  • 3..7:指定范围(3~7个,包含3和7)

多重性应用于关联的目标端,说明源类的每个实例与目标类实例的连接个数。除非显式说明,否则关系的多重性就是未指定的。

高级概念:关联的方向性。

在分析时,我们认为关联是分析类之间的双向逻辑连接。在设计时,我们将关注的焦点转到关联的导航性上。

GrainCrop类到GrainYieldPredictor类的单向关联通常意味着GrainCrop类的某些方法在实现时使用了GrainYieldPredictor类的服务。注意,GrainCrop类和GrainYieldPredictor类之间的关联端名称的可见性,GrainCropGrainYieldPredictor类似私有的。

泛化

泛化描述的“是一种”的关系。

泛化用带有封闭箭头的实线表示。箭头指向超类,关联的另一端是子类

子类继承超类的结构和行为。根据这些规则,一个类可以有一个(单继承)或多个(多继承)超类,超类间的名字冲突也可以根据所选语言的规则来处理。

泛化关系不能有多重性指定

聚合

聚合表明一种整体-部分的层次结构。

聚合用带有一个空心菱形的实线表示。菱形所在的一端是聚合体(整体),另一端的类代表它的实例构成了聚合对象的部分

自聚合和循环聚合关系是可能的。这种整体-部分的层次关系并不意味着物理上的包容:一个专业协会有一些成员,但不表示协会拥有它的成员。就如汽车和轮胎,当汽车销毁的时候,并不意味着轮胎也销毁了。即两个对象的生命周期是相互独立的

聚合关系末端的*(0个或多个)多重性进一步突出了这不是物理包容关系。

组合

组合则是关联更强的聚合。部分与整体共存亡,是物理包容。

组合用带有一个实心菱形的实线表示。菱形所在的一端是整体,另外一端是部分

整体所在的一端的多重性是1,因为根据定义,部分在整体之外就没有任何意义,整体拥有部分,部分的生命周期与整体式一样的