类图初探


    在编写一个程序之前,我们常常需要对整个程序的结构进行架构,这时我们就需要一些工具来辅助我们更好的梳理整个程序的结构,其中很重要的一种就是类图。
    类图——Class diagram,在wikipedia里的定义是:In software engineering,a class diagram in the Unified Modeling Language(UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations(or methods), and the relationships among the classes.可翻译为:在软件工程里,UML中的类图是一种用以描述一个系统构成的静态结构,它描述了系统的类以及它们的属性、操作(或者说是方法),还有类与类之间的关系。
     下面粗略地介绍一下类图中的类(Class)以及类与类之间的关系:
     首先,是一个类(Class)的图,它一般由三个部分组成:第一层是类名,正体字说明可以被实例化,斜体字说明该类为抽象类;第二层为属性,格式为:【修饰符 属性名:类型】(【】只是用以区别,并非格式的一部分),如果为静态属性,则加下划线,对于修饰符,+表示pubic,-表示private,#表示protected,什么也不加表示包级别可见的;第三层是方法,格式和属性相近:【修饰符 方法名(参数:类型):返回类型】,如果是静态方法,加下划线,修饰符的规则也和属性一样。除了第一层类名外,其他层均可没有。此外,还可以在第四层加类的性质,第五层加上内部类,但是由于这很少用到,在此不再赘述。下面是我最近一个项目CR的一个用户信息类的类图展示:

类图初探

图1.CRUserInfo类类图

    下面介绍一下类与类之间关系及其类图画法。我们知道在java语言或其他面向对象语言中,一般会有一个以上的类,而这些类之间肯定具有一定的联系,类的关系参照wikipedia上:http://en.wikipedia.org/wiki/Class_diagram#Overview,网上很多相关的汉语资料都是翻译自这里的。这里就根据我的理解再梳理一遍吧:
    ①.Association:关联。首先,这对应着两个相互独立的类,它们的实例在某些方面具有固定的、对应的关系,一般说来这种关系是相互的,比如School总是对应着一定数量的Student,Student也总是对应着学校,而且这种关系可以建立,也可以解除。那么School和Student就是关联的关系。在类图中就是用一根单向箭头(实线)表示,示例如下:

类图初探

图2.School与Student之间的关系:关联

    ②.Aggregation:聚合。它是一种“ has a ”的关系,比Association更加的具体,是一种部分和整体的关系,可能不涉及两个以上的类,部分是可以不依靠整体而存在的。比如老师和他所教授的课程就是聚合的关系。Computer和Mouse之间也可以算是一种聚合的关系。在UML中,聚合关系用一端空心菱形一端箭头的实线表示,示例如下:

    类图初探

    图3.PC与Mouse、KeyBoard的关系:聚合

    ③.Composition:组合。组合关系是所有关系中最强的一种。是“ owns a ”的关系。Composition is more specific than aggregation,部分必须依靠整体而存在,这种关系就好像一台Computer和它的CPU一样,离开了电脑,CPU也基本无从生存了。另一个典型的例子就是人类和手脚之间的关系就是组合。在UML中,聚合关系用一端实心菱形一端箭头的实线表示,示例如下:

    类图初探

    图4.Human和Hand、Legs的关系:组合

    ④.Dependency:依赖。依赖是一种较弱的关系,也是一种比较常见的关系类型。一般这两个类是相互独立的,但是一个类的对象可能会在某一时刻用到另一个类的某些方法,这就是典型的依赖。举例说明就是Fish与Water,Fish必须依赖Water提供的呼吸方法breath()。在UML中,用一条带箭头的虚线表示,示例如下:

   

    图5.Fish与Water的关系:依赖

    ⑤.Generalization:泛化(一般化)。用来表示类与类之间,接口与接口之间的继承关系,或者接口与实现类之间的关系。这个比较容易理解,在编写画图板时,我们会把所有的形状共有的属性和方法放在一个Shape类里面,而其他的诸如Triangle、Rectangular、Oval都是继承自Shape类。在UML中,我们用一个带箭头的实现表示继承,示例如下:

    类图初探

    图6.Shape与Triangle、Oval的关系:泛化

    以上就是一些类之间基本的关系及其UML表示。当然这些在类图中只是一些皮毛,还有很多诸如各种关系之间的比较(最常见的对比就是组合和聚合)等等更多的东西需要在不断的学习中掌握,我坚信,凡是能用Google和书本解决的问题都不是问题!当然这其中肯定会存在一些问题,也欢迎大家指正,不胜感激!

你可能感兴趣的:(java,UML,类图,类与类的关系)