UML类图

来源:互联网 发布:mk文件编译data数据 编辑:程序博客网 时间:2024/04/27 05:12
     类图用于显示类,接口以及它们之间的静态结构和关系的图。通过定义我们可以了解到类图分为两个方面一是类,接口的静态结构,二是他们之间的静态关系。

      首先我们必须先了解类或接口的静态结构,这样才可以去理解他们之间的关联。而一个类图可以分为五个层次来说明类的静态结构(接口少于5层,一般只有3层):

      类图的第一层是类名。当一个类名使用正体字时,说明该类可以创建实例。反之,说明这个类是一个抽象类(接口的话则在类名之前再加上“inteface”说明符)。

      类图的第二层是类的属性层。属性层显示的是类的属性清单。属性清单在表示一个类的属性时需要包含属性名称,属性的访问权限(“+”表示public,没有说明是包访问权限,“#”表示protected,“-”表示private)和属性类型。

      类图的第三层是类的方法层。方法层显示类的所有方法。显示类方法时同样需要包含了方法名称,方法访问权限(表示同类属性清单),方法的返回类型和方法是否是静态方法(如果方法是静态方法,则在方法名有条下划线)。

      类图的第四层是类的性质层。何谓累的性质?其实类性质非常的简单,就是具有get和set方法的私有属性,这些属性就是类的性质。了解类的性质之后也就明白了性质层是如何表示类的性质了:它包含性质的名称和类型。

       第五层用得比较少,用于说明类的内部类。

       一般对于一个接口而言:类图分为三个层:接口名称,方法成和属性层。当然它还具有内部类。

       类的静态结构说完之后,就是要说说它们之间的相互关系了。我们可以将类图分为五种关系,分别如下:

       一、一般化关系。这和Java的泛化是一样的。它代表了类与类,接口与接口的继承关系;类与接口的实现关系。在类图中通过一个方向箭头表明继承的关系。需要注意是在类图中是导出类指向基类,而在Java 的继承中确是基类指向导出类。

      二、关联关系。关联关系容易和下面的聚合关系和合成关系搞混淆。但是只要我们认真的思考,是可以判别出他们之间的区别的。我们可以这么认为,关联关系是类与类之间的弱关联。此为何意呢?也就是说这两个关联的类他们属于同一层次的。例如师傅和徒弟。他们关系并不是非常强。师傅可以没有徒弟,同时徒弟学好本事之后就可以不要师傅自己当师傅了。

      三、聚合关系。它对于关联关系可以说属于强关联。区分关联和聚合最好的办法是通过他们是否属于同一层次的。这就是它们最本质的区别。请看一个聚合的例子:车和引擎。他们不是一个层次。车是一个交通工具,而引擎只是一个部件。可以说车比引擎搞一个层次。从例子中我们可以看出聚合关系是整体和个体的关系。

      四、合成关联。他与之前两个进行区分更加非常的容易和简单。我们可以通过代码区分(有时,这确实是一个有效而简单的方法),合成关系中某一方需要维护另一方的声明周期,也就是说当维护方生命结束之后也意味着被维护方也结束了声明。在实际中合成关系代表整体和部分的关系。比如动物和其四肢。三种关联关系的区分介绍好之后,需要知道它们的共同要素:关联名称,类之间的关联我们都需要给关联定义个名称。比如师傅和徒弟,那么他们就是师徒关系(师徒关联)。其次是端点。端点表明这两个类产生了关联。最后是基数(可以理解为关联是一对一,还是一对多或是多对多)。

      五、依赖关系。这种过代码也是非常的容易判别。这里我想说明是为什么通过代码判别是非常好的。UML想说明什么?不就是类的静态接口和类之间的关系嘛,最后这些都是如何体现的呢?不正是代码嘛。因此不要以为通过代码来判别它们的依赖关系是不好的一件事情,其实我认为这非常的好(个人意见)。在代码中依赖关系通过局域变量,方法参数和类的静态方法调用来体现的。在类图中依赖关系也与一个名称,同时也有一个箭头表明依赖的方向,但与关联关系不同的是,依赖关系总是单方向的。

原创粉丝点击