uml关系

面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。

1. 依赖(Dependence)

设计模式中类的关系 - 凌晨四点半 - 凌晨四点半

        依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。类上面的图例中:People类依赖于Book类和Food类,Book类和Food类是作为类中方法的参数形式出现在People类中的。

代码样例:

public class People{ //Book作为read方法的形参 public void read(Book book){ System.out.println(“读的书是”+book.getName()); } }

2.关联(Association)

单向关联:

设计模式中类的关系 - 凌晨四点半 - 凌晨四点半

双向关联:

设计模式中类的关系 - 凌晨四点半 - 凌晨四点半

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联关系分为单向关联和双向关联。在java中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。

public class Son{ //关联关系中作为成员变量的类一般会在类中赋值 Father father = new Father(); public void getGift(){ System.out.println(“从”+father.getName()+”获得礼物”); } }

public class Father{ Son son = new Son(); public void giveGift(){ System.out.println(“送给”+son.getName()+“礼物”); } }

3.聚合(Aggregation)
设计模式中类的关系 - 凌晨四点半 - 凌晨四点半

聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。

public class People{ Car car; House house; //聚合关系中作为成员变量的类一般使用set方法赋值 public void setCar(Car car){ This.car = car; } public void setHouse(House house){ This.house = house; }

public void driver(){ System.out.println(“车的型号:”+car.getType()); } public void sleep(){ System.out.println(“我在房子里睡觉:”+house.getAddress()); } }

4.组合(Composition)

设计模式中类的关系 - 凌晨四点半 - 凌晨四点半

相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。在下图的例子中,People与Soul、Body之间是组合关系,当人的生命周期开始时,必须同时有灵魂和肉体;当人的生命周期结束时,灵魂肉体随之消亡;无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。

Public class People{ Soul soul; Body body; //组合关系中的成员变量一般会在构造方法中赋值 Public People(Soul soul, Body body){ This.soul = soul; This.body = body; }

Public void study(){ System.out.println(“学习要用灵魂”+soul.getName()); } Public void eat(){ System.out.println(“吃饭用身体:”+body.getName()); } }

5.继承(Generalization)

设计模式中类的关系 - 凌晨四点半 - 凌晨四点半

继承表示类与类(或者接口与接口)之间的父子关系。在java中,用关键字extends表示继承关系。UML图例中,继承关系用实线+空心箭头表示,箭头指向父类。

6.实现(Implementation)

设计模式中类的关系 - 凌晨四点半 - 凌晨四点半

表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示。UML图例中,实现关系用虚线+空心箭头表示,箭头指向接口。

### 绘制UML关系图的方法 在UML中,关系图是一种重要的表达方式,它通过图形化的方式描述系统的结构和行为。以下是关于如何绘制UML关系图的一些指导: #### 使用工具支持 Visual Paradigm 是一种强大的 UML 建模工具,能够帮助用户轻松创建各种类型的 UML 图形[^2]。对于初学者来说,这款工具提供了直观的界面以及详细的教程文档来引导用户完成绘图过程。 #### 创建具体图表实例 以活动图为例子,在启动 Visual Paradigm 后可以通过新建项目并选择相应的模板来进行操作。当需要定义一个新的活动图时,按照提示输入名称比如 `Activity Diagram Tutorial` 并确认即可获得空白画布开始构建自己的逻辑流程[^3]。 #### 关于约束的应用 如果涉及到复杂场景下的条件判断或者特定规则设定,则可以利用UML中的约束机制。需要注意的是,在不同的版本间可能存在差异;例如从UML 1.x升级至2.0后,约束不再局限于单条消息之上而是有了更灵活的表现形式[^1]。 ```java // 示例代码展示简单的类之间关联关系 public class Student { private String name; public void enrollCourse(Course course){ System.out.println(name+" has enrolled into "+course.getName()); } } public class Course{ private String name; public String getName(){ return this.name; } } ``` 上述Java伪代码展示了两个实体Class之间的基本连接模式,这正是我们在制作UML类图时候所要捕捉的内容之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值