java-XML类图与类的关系详解
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。
在构造类图的时候,理清类与类之间的关系是这个的重点,类的关系有泛化(generalization)、实现(realization)、依赖(dependence)和关联(assiociation)。其中关联又分为一般关联关系(aggregation)和聚合关系(composition)。下来我们对这几种关系进行详细解读:
基本概念:
类图(class diagram):类图是面相对象系统建模中最重要的图,是定义其他图的基础。类图主要用来现实系统中的类,接口,以及和他们之间的静态结构和关系的一种静态模型;
类图有三个几本组建:类名,属性,方法;
泛化(genneralization):
表示is-a关系,是对象耦合度最大的一种关系,子类继承父类的所有细节。使用java语言中的继承表达,在类图中使用三角尖头表示,尖头从子类指向父类:
实现(realization):
在类图中就是接口与实现的关系,使用三角尖头的虚线表示:尖头由实现类指向指定接口。
依赖(dependency):对象之间最弱的一种关系,是临时性的关系。代码中一般指由局部变量,函数参数,返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得意完成这个类的一些指责。在类图中使用虚线尖头表示。
关联(assiociation)。对象之间的一种引用关系,这种关系使用类的属性表达。其中关系又分为一般关系、聚合关系(aggreciation)和组合关系(composition)。下面给出一般关联的类图:
聚合关系(aggreciation):表示has-a关系,是一种不稳定的包含关系。较强与一般关联关系。有整体和局部的关系,但是没有了整体,局部仍可以单独存在,如公司和员工的关系,公司倒闭,员工可以更换公司。
组合关系(composition):表示强烈的包含关系。组合类负责被组合类的生命周期。是一种更强的聚合关系。部分不能脱离整体,比如公司和部门的关系,公司倒闭,公司的部门也就不能存在了。
多重性(mutiplicity):通常在关联、聚合、组合中使用。就是代表有多少个关联对象存在。使用数字..星号(数字)表示。如下图,一个割接通知可以关联0个到N个故障单。
我们大概理解了这些类图,接下来用教授布置的作业来用java实现一个类图:
类图如下:
这个图可以很好的展示类图中比较重要的关系,当然,这个类图中出现了很多问题
1)Atm类和BankServer类的关系应该如何表示,是一般关联还是依赖。
2)transaction类的定义,教授告诉我可以将transactino定义为int(- -!)
3)这是最为重要的问题,我们可以看到BankServer和Account的关系是组合,然后SavingsAccount和CheckingAccount的关系是泛化,那么,在实现的时候,BankServer的应用的类到底是Account还是SavingsAccount和CheckingAccount,虽然我默认实现的是SavingsAccount和CheckingAccount,但是这里仍然有待商榷;
聚合和组合的区别:
其实只要理解, 聚合是is-a关系,但是组合是has-a关系。组合又更强的依赖性,便可以理解聚合和组合的区别。