
2.3.1 实体元素
类是实体元素中重要的模型元素,也是面向对象系统中最重要的结构元素。软件建模最重要的目标之一,就是构建软件的结构模型。
UML使用一个带有类名的,并且含有一组属性和操作的矩形框来表示类。
例如,图2-3给出了一个类图实例,图中Employee是类名,Name、EmployeeID和Title是这个类的属性。GetName()、GetID()和GetTitle()则是这个类的方法。

图2-3 类的图形表示实例
为有效地支持对象的封装、继承和多态等机制,UML中还为类定义了公共、私有和保护三种可见性,使用+、-和#等符号表示属性和方法。
图2-3中,Name、EmployeeID和Title三种属性均是私有属性。GetName()、GetID()和GetTitle()三个方法的可见性则是公共的。
对于类的属性和方法来说,还有一个称为作用域的特性。作用域有类作用域和实例作用域两种。类作用域是指类中那些不依赖类的实例而存在的属性和方法。具有类作用域的属性和方法可以不用实例化即可以访问。
在UML中,使用下划线的方式表示的具有类作用域的属性或方法,正常字体形式表示实例作用域的属性和方法。
为了实现继承机制,UML中还定义了类和类方法的抽象性。对于类,抽象表示一个类是否可以实例化,抽象类指不能实例化的类,可以实例化的类则被称为具体类。对于方法来说,抽象表示这个方法是否可以被派生类中的方法覆盖,能够覆盖的方法则称为抽象方法。
在类图中,UML使用斜体形式的类名或方法名表示抽象类或抽象方法,否则,就用正常字体形式的类名或方法名表示。
目前,绝大多数程序设计语言均支持强数据类型,即程序中的数据需要有明确的数据类型。UML采用不强制地使用数据类型的方式支持数据类型问题,即建模时可以不指定数据类型,同时UML还提供了一组标准的数据类型,同时也支持自定义数据类型。
类定义中,属性、方法和方法的形式参数均可以使用这些标准数据类型和自定义的数据类型。图2-3中,属性Name的数据类型string就是一个标准的数据类型。而方法SetPhoto(p:Photo)和GetPhoto()中使用的数据类型Photo则是一个自定义的数据类型。
作为一种特殊的类,接口也被UML定义为一种重要的模型元素。图2-4给出了接口的UML符号表示。

图2-4 接口的符号表示
可以看出,UML把接口定义为构造型为《interface》的类,其构成和类相似,只是接口中没有属性,方法不需要实现。除了类和接口之外,UML还定义了用例、协作、构件和节点等实体元素。这些元素的符号表示如图2-5所示。

图2-5 用例、协作、构件和节点等实体元素的符号表示