在C#中,通常使用类图和对象图来表示项目内程序类的结构和各元素间的对应关系。在下面的内容中,将简要介绍类图和对象图的基本知识。
1.类图
类图表示了不同实体间的相互关系,显示了系统的静态结构。类图可以表示逻辑类,逻辑类通常指事物的种类,比如球队、电影之类的抽象描述。类图还可以表示实现类。实现类就是程序员要编写的类。实现类图与逻辑类图能够描述一些相同的类,但不会使用相同的描述属性。
通常用矩形来表示类图,并在矩形内将类分为三个部分。其中最上面的部分显示类的名称,中间部分显示类的属性,最下面的部分显示类的方法。例如图6-2所示的格式。
图6-2 典型类图结构
注意
在现实应用中,最常用、最简单的类图就是一个显示类名的长方形。在大多数的UML中,多数类只要有一个能够清楚表达的命名就可以了。
在类名部分可以显示类的构造类型,类的构造类型在成对双角括号“<<>>”之间指定,并放在类的名称上。常见的构造类型包括如下三类。
1)实现类:直接显示类的名称。
2)接口:在类名上方的双角括号“<<>>”内显示。
3)工具类:在类名上方的双角括号“<<>>”内显示。
如果用斜体表示类名,或者在类名下面,则表示这个类是一个抽象类。
在属性和方法的前面可以用修饰符“+”或“-”表示属性或方法的作用域,具体说明如下。
修饰符“-”:表示属性或方法是私有的(private)。
修饰符“#”:表示属性或方法是保护的(protected)。
修饰符“+”:表示属性或方法是公用的(public)。
通常,在类的属性或方法参数名称的冒号后,显示了属性的类型或方法的参数的类型。方法的返回值类型显示在方法后面的冒号之后。
例如,图6-3显示了一个类Lei的类图结构。
上述类图结构对应类的C#代码如下:(www.xing528.com)
图6-3 类图结构
2.对象图
对象图能够表示类的实例化对象。通常,用一个两层的矩形结构来表示对象图,其中在上层标识对象名和类名,在下层标识对象的实例化属性值。例如在下面的代码中,创建了一个Lei类的对象mm:
上述mm对象的对象图如图6-4所示。
图6-4 对象图示例
在同一个应用项目中,类之间存在多种类别的相互关系,具体说明如下。
继承(inheritance),指一个类从其父类派生而来,继承了父类的属性和方法。基于类的继承叫做一般化(generalization),基于接口的继承叫做实现(realization)。
关联(association),通常用类之间的关联来表示变量实例持有对其他对象的引用,这种关系是半永久的,并没有包含关系。
依赖(dependency),是不同类的实例之间的暂时关系。
聚合(aggregation),是关联的一种特殊形式,代表着一种整体和部分的关系,并且里面的部分可以作为其他整体的部分,而部分和整体之间也没有生命期的依赖。
组合(composition),是聚合的一种特殊形式。组合的关联性比聚合更强,而部分只能作为唯一的一个整体的部分,而且部分的生命周期依赖于整体的生命周期。
UML是一种设计语言,它的目的不是表现细节而是表现结构,仅仅用于展示必要的细节。所以UML不可能与源代码一一对应,只存在结构上的对应关系。看下面的一段C#代码:
在上面的代码中,Lei类实现了zz接口,Author类继承了Lei类;mm类与Author类之间的关联是一对多的,即一本书可能有一个或多个作者;Lei读书,这是一种暂时的单向依赖;mm由一个或多个Page(页)组成,每一个Page(页)只能作为一本mm的一部分,这是一种组合关系;mmshelf里可以不放或者放多本mm,mm也可以放在其他的mmshelf中,mmshelf的存在并不能影响mm的存在性,这是一种聚合关系。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。