java中类与类关系的UML图与代码表现

类与类之间存在以下关系:

  1. 泛化(Generalization)
  2. 依赖(Dependency)
  3. 关联(Association)  
  4. 聚合(Aggregation)

一、泛化(Generalization)

定义:表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。

具体表现:父类 父类实例 = new 子类()

UML图,Animal类与Tiger类,Dog类的泛化关系

代码表现:


 代码如下 复制代码
class Animal{}
 
class Tiger extends Animal{}
 
public class Test{
public void test(){
Animal a = new Tiger();
}
}

二、依赖(Dependency)

定义:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。

具体表现:依赖关系表现在 局部变量方法的参数,以及对静态方法的调用

现实例子:比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作

UML图:Person类与Screwdriver类的依赖关系

代码表现:


 代码如下 复制代码
public class Person{
/* 拧螺丝 */
public void screw(Screwdriver screwdriver){
screwdriver.screw();
}
}

三、关联(Association)

定义:对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系,这两个对象之间为关联关系。

具体表现:关联关系是使用实例变量来实现

现实例子:比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司。

UML图,公司和员工的关联关系:

代码表现:


 代码如下 复制代码
public class Company{
private Employee employee;
public Employee getEmployee(){
return employee
}
public void setEmployee(Employee employee){
this.employee = employee;
}
// 公司运作
public vodi run(){
employee.startWorking();
}
}

四、聚合(Aggregation)

定义:当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体部分之间的关系。

具体表现:与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系,语法上是没办法区分的,从语义上才能更好的区分两者的区别。

关联和聚合的区别:

  1. 关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
  2. 对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失时,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也就不存在了,除非张三实现把一些电脑的组件(比如硬盘和内存)拆了下来。

UML图:

代码表现:


 代码如下 复制代码

public class Computer{
private CPU cpu;
public CPU getCPU(){
return cpu;
}
public void setCPU(CPU cpu){
this.cpu = cpu;
}
// 开启电脑
public void start(){
// cpu运作
cpu.run()
}
}

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, class
, 实例
, 变量
, 代码
客户
uml生成java代码、java代码生成uml图、java代码转换成uml图、java 源代码 生成 uml、根据java代码生成uml,以便于您获取更多的相关知识。

时间: 2024-10-24 08:41:47

java中类与类关系的UML图与代码表现的相关文章

Java中类与类之间的关系

Java中类与类之间的关系存在以下关系: 1.泛化(Generalization) 很简单,就是我们常说的继承.是说子类获得父类的功能的同时,还可以扩展自己的功能. 如图: Java代码中表现为:extends和implements 2.依赖(Dependency) 两个相对独立的咚咚(A和B),当A负责构造B时,A与B形成依赖关系,即A使用B. 如图: Java代码中的表现为局部变量,方法的参数,以及对静态方法的调用 3.关联(Association) 两个相对独立的咚咚(A和B),当A对象持

问一个Java泛型与类继承的问题

问题描述 问一个Java泛型与类继承的问题 直接上代码了 //DeviceRepository类 public abstract class DeviceRepository<T extends Device> extends DomainRepository<T> //DeviceEventHandler类第一种写法 public abstract class DeviceEventHandler<M extends Device,R extends DeviceRepos

大话UML中类之间的关系

关于uml的内容在大学的时候学习过,感觉是花拳绣腿的一些知识,想用但是限于自己的认知和经验,实在是很难运用,到了工作的时候,感觉不需要这些工作也照样能做得很出色,过度的自信就这样维持了几年,等到积累了一定的项目经验,对于设计的关注程度也逐渐提升,有时候想表达一些设计的思想,自己DIY的图表可能只有自己能够看懂,看一些设计思想中的图也是似懂非懂,看来刚学外语也是不够的,还得学习UML,无规矩不成方圆嘛,让UML来作为我们设计中的思想转化器. 说起UML中类之间的关系,大体有以下几类 继承关系(Ge

Thrift的代码生成器Compiler原理及源码详细解析 1 类关系图

最近忙着研究GlusterFS,本来周末打算写几篇博客的,但是由于调试GlusterFS的一些新增功能就 用了整整的一天,还有一天就陪老婆大人逛街去了!今晚浏览完微博发现时间还早就来博客一篇,本篇 博客内容主要是前一段时间研究的Thrift的代码生成器的源码详细分析,没有具体分析语法解析,因为 是工具字段生成的代码,人是没有办法阅读的----到处都是跳转表!由于Thrift支持N多种语言,但是 生成代码原理都差不多,我主要分析了C++相关代码生成.关于Thrift的使用及原理.代码网上基本上 都

java中类A的对象a,类B的对象b,A是父类,B子类,那么b是a的子对象吗

问题描述 java中类A的对象a,类B的对象b,A是父类,B子类,那么b是a的子对象吗 java中类A的对象a,类B的对象b,A是父类,B子类,那么b是a的子对象吗 有没有父方法和子方法这种概念的 解决方案 一般来说,对象.子对象说的是对象的聚合,比如 class Car { public Engine engine; public Wheels wheels; ... } Car c = new Car(); Engine e = new Engine(); c.engine = e; 这里e

如何根据java源代码生成类图?

问题描述 如何根据java源代码生成类图? **我自己做了一个java模拟记事本,功能也比较齐全.但是要求画出类图,这个怎么画啊?我去百度上搜了,都不实用,总是遇到这样或那样的问题.请问应如何画这个类图,或者怎样由java代码生成类图?**

JDK1.6集合类UML图, 更好的使用Collection类

JDK1.6 集合类 UML 图, 更好的使用Collection类. Sets: Lists (no need Vector) Map: Queues:

java语法-java中类的对象和类的指针有神马区别和联系

问题描述 java中类的对象和类的指针有神马区别和联系 java中类的对象和类的指针有神马区别和联系 java中类的对象和类的指针有神马区别和联系 解决方案 可以这么理解 ,因为Java中没有指针这个概念,所以可以把对象的地址看作是C语言中的指针. 解决方案二: java中类有引用,没有指针的概念,c语言和c++里面有.

Visio与vs2005自带的“类关系图”功能哪个更好?好在哪里?

问题描述 Visio与vs2005自带的"类关系图"功能哪个更好?好在哪里? 解决方案 解决方案二:在线等解决方案三:visio的界面看起来没vs2005的"类关系图"界面舒服,这个软件好像比较老了,vs2008里不是也加强了"类关系图"功能吗?这样比起来呢?还是visio更专业吗?解决方案四:visio比较好用一点解决方案五:Visio肯定更专业点,初学者用用类关系图蛮方便的