1.泛化(Generalization)
[泛化]
表示类与类之间的继承关系
,接口与接口之间的继承关系
,或类对接口的实现关系
。一般化的关系是从子类指向父类的
,与继承或实现的方法相反
。
[简单理解]
是一个 is a
的关系。如老虎是一个动物
[具体表现]
父类
父类实例=new
子类
()
[UML图](图1.1)
图1.1
Animal类与Tiger类,Dog类的泛化关系
2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例
,或者依赖另一个对象的服务
时,这两个对象之间主要体现为依赖关系。
[具体表现]
依赖关系表现在局部变量
,方法的参数
,以及对静态方法的调用
[简单理解 ]
一个类使用了另外一个类作为局部变量和方法参数。是一个 use
a关系!
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML表现](图1.2)
有时在uml图中不出先箭头只是虚线
图1.2
Person类与Screwdriver类的依赖关系
理解:
指Person类可能要用到
Screwdriver
的一些方法,也可以这样说,要完成
Person
里的所有功能,一定要有
Screwdriver
的方法协助才行。
Person
依赖于
Screwdriver
的定义,
。ROSE对依赖关系不产生属性。
注意,要避免双向依赖。一般来说,不应该存在双向依赖
3.关联(Association)
[关联]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[具体表现]
关联关系是使用实例变量
来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML图] (图1.3)
图1.3
公司和员工的关联关系
(4)聚合(Aggregation)
[聚合]
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体
与部分
之间的关系。
[具体表现]
与关联关系一样,聚合关系也是通过实例变量
来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义
上才能更好的区分
两者的区别。
[关联与聚合的区别]
(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的
对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)
拆了下来。
[UML图](图1.4)
图1.3
电脑和组件的聚合关系
那依赖和聚合\组合、关联等有什么不同呢?
关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。
依
赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也
可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,
但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。
组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。
上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。
这
里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如可能在某个问题域中,我是一个木匠,需要拿着锤
子去干活,可能整个问题的描述就是我拿着锤子怎么钉桌子,钉椅子,钉柜子;既然整个问题就是描述这个,我和锤子就不仅是偶然的依赖关系了,我和锤子的关系
变得非常的紧密,可能就上升为组合关系(让我突然想起武侠小说的剑不离身,剑亡人亡...)。这个例子可能有点荒谬,但也是为了说明一个道理,就是关系和
类一样,它们都是在一个问题领域中才成立的,离开了这个问题域,他们可能就不复存在了。
组合和聚合的区别:
当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
聚合:表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。这句话怎么解,请看下面组合里的解释)。
组
合(也有人称为包容):一般是实心菱形加实线箭头表示,如上图所示,表示的是C8被C7包容,而且C8不能离开C7而独立存在。但这是视问题域而定的,例
如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,
这就可以用聚合了。在《敏捷开发》中还说到,A组合B,则A需要知道B的生存周期,即可能A负责生成或者释放B,或者A通过某种途径知道B的生成和释放。
分享到:
相关推荐
4. **类之间的关系**:类之间常见的关系有继承、多态和组合。**继承**(Inheritance)允许一个类(子类)从另一个类(父类)继承属性和方法。这有助于代码重用和创建层次结构。例如: ```csharp class Student : ...
### Java中类与类之间的关系 #### 泛化(Generalization) 在面向对象编程中,泛化是指一种类从另一种类获取属性和行为的方式。在Java语言中,泛化主要通过继承来实现。继承允许一个类(子类或派生类)继承另一个类...
在Java编程语言中,类与类之间的关系是构建复杂系统结构的基础,这些关系不仅限于继承和封装,还包括了关联、依赖、聚合和组合等多种形式。以下是对这些关系的深入探讨: ### 1. 关联关系(Association) 关联关系...
7.3 确定类或对象之间的关系,如继承、关联、聚合和组合,有助于建立对象间的结构和交互。这些关系帮助我们理解类如何协同工作以完成系统功能,同时提高代码的重用性和可维护性。 7.4 设计类的属性涉及定义每个类的...
### 文档类、视图类等与框架之间的关系 在探讨文档类、视图类以及它们与框架之间的关系时,我们需要深入理解MFC(Microsoft Foundation Classes)中的几个关键概念及其相互作用机制。以下是对这些概念及其关系的...
Java 中类与类之间的关系 Java 中类与类之间的关系是理解面向对象编程的关键概念。这些关系包括泛化、依赖、关联和聚合等。了解这些关系对于设计和实现软件系统非常重要。 一、泛化关系 泛化关系是类与类之间的...
- **窗口类对象与窗口**:窗口类对象(如`CWnd`)与窗口之间的联系主要通过窗口句柄(HWND)建立。每个`CWnd`对象都有一个成员变量`m_hWnd`,指向一个实际的窗口。通过这个句柄,`CWnd`对象可以调用各种Windows API...
类之间的关系是理解复杂系统设计的关键,这通常涉及到继承、多态性和关联等概念。在这个“C++类之间的关系1”课程实验及报告中,我们将深入探讨这些核心主题。 **1. 继承(Inheritance)** 继承允许一个类(子类或...
Java 类与类之间的关系是面向对象编程的核心概念之一,它帮助我们组织代码,实现代码的重用和模块化。在 Java 中,类与类的关系主要包括依赖(uses-a)、聚合(has-a)和继承(is-a)这三种主要类型。 1. 依赖...
继承是C++类之间关系的基础,允许一个类(子类或派生类)从另一个类(基类或父类)继承属性和行为。通过继承,子类可以重用基类的功能,并根据需要添加新的特性和方法。继承有助于代码复用,提高程序的可维护性和...
如果类之间有直接的引用或指针关系,可以直接访问对方的公共或友元成员变量进行参数交换。例如,视图类可以持有对文档类的引用,直接读写其成员变量。 ```cpp class CMyView : public CView { public: ...
本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...
- **关联**:表示类之间的结构关系,比如“学生”类和“课程”类之间的关联。 - **聚合**:一种强关联,表示整体与部分的关系,如“汽车”类包含“轮胎”类。 - **组合**:比聚合更强的关系,部分和整体有生命...
### 基于UML类图的类之间依赖关系图论问题研究 #### 摘要及背景介绍 本文探讨了UML(统一建模语言)类图中的类间依赖关系,并通过图论的方法对其进行深入分析。随着面向对象编程方法在软件开发领域的广泛应用,UML...
JAVA类之间的关系思维导图,便捷整理思路,泛化、实现、依赖、关联、组合、聚合……
- **关联**:关联描述了类之间的结构关系,例如“朋友”关系或“拥有”关系。在UML中,关联用一条实线表示,可带有箭头指示方向,也可以用角色名和多重性来细化描述。 - **依赖**:比关联更弱的关系,表示一个类...
关联是最常见的类间关系之一,它表示两个或多个类之间的结构连接。这种关系可以是单向的、双向的,甚至是自关联。例如,在一个图书馆管理系统中,书籍与作者之间就存在一种关联关系,每本书都对应着一个或多个作者,...