在画UML图的时候,常常为类与类之间的关系犯愁,下面主要是对这方面的总结。
类之间的关系有五种:继承、依赖、关联、聚合、组合。
1.继承
指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能力,继承是类与类之间最常见的关系。这个很好理解,没什么可讲的。
2.依赖
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;
3.关联(Association)
这体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
4.聚合aggregation
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
5.组合Composition
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
6.依赖、关联、聚合、组合之间的区别
几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;
聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。
聚合与组合的区别:聚合∶分散的聚集到一起 组合∶几个独立部分组成的整体
- 大小: 8.3 KB
- 大小: 18.6 KB
- 大小: 15.1 KB
- 大小: 14.9 KB
分享到:
相关推荐
### 类与类之间的关系 #### 1. 继承关系 **定义**:继承是指一个类(称为子类或子接口)继承另一个类(称为父类或父接口)的功能,并可以在此基础上添加新的功能。在Java中,继承关系通过关键字`extends`明确表示...
### Java中类与类之间的关系 #### 泛化(Generalization) 在面向对象编程中,泛化是指一种类从另一种类获取属性和行为的方式。在Java语言中,泛化主要通过继承来实现。继承允许一个类(子类或派生类)继承另一个类...
总结来说,类间关系是面向对象设计的重要组成部分,它们帮助我们构建出结构清晰、可维护性强的软件系统。每种关系都有其特定的应用场景和语义,正确理解和应用这些关系对于提高软件质量至关重要。
1. **关联关系**:关联是描述类之间的一种结构关系,它表示一个类的对象与另一个类的对象之间存在某种联系。在图书管理系统的例子中,"管理员类"与"用户类"可能存在关联关系,例如,管理员管理多个用户,用户可以...
### Cocoa框架类之间的继承关系详解 #### 一、概述 Cocoa框架是苹果为开发者提供的一个强大且完整的软件开发框架,主要用于Mac OS X和iOS应用的开发。它由多个子框架构成,其中最为基础和核心的是Foundation框架和...
### io包中常用类的作用、重要方法及类之间的继承关系 #### 一、概述 Java的`io`包提供了大量的类来处理输入/输出操作,包括文件读写、网络通信等场景。这些类的设计遵循了良好的面向对象设计原则,通过抽象类和...
C#是一种面向对象的编程语言,其核心概念之一就是类与对象之间的关系。类是对象的模板或蓝图,它定义了创建对象的属性和方法。对象则是类的具体实例,是实际存在的实体。 在C#中,创建类意味着定义了一组属性和方法...
接下来,我们将深入探讨`Date`和`Time`类之间的关系以及如何在实际代码中实现这一概念。 首先,`Date`类通常用来表示日期,可能包括年、月、日等信息,而`Time`类则用来表示时间,如小时、分钟和秒。当`Time`类的...
在面向对象编程中,类与类之间的关系对于构建清晰、高效且可维护的软件系统至关重要。这些关系不仅体现在代码的结构中,也是设计模式和架构原则的基础。通过UML(统一建模语言)图,我们能够直观地理解和展示这些...
文档类、子框架类及视图类是MFC(Microsoft Foundation Classes)应用程序框架的核心组成部分,了解它们之间的关系及相互调用是编写MFC程序的基本功。下面是对文档类、子框架类及视图类的关系及相互调用的详细解释。...
- **定义**:关联是类之间的一种链接关系,表示一个类的对象与另一个类的对象之间有某种联系。 - **类型**: - **一对一关联**:一个A类对象只能与一个B类对象相关联。 - **一对多关联**:一个A类对象可以与多个B...
这种结构不仅能够提高代码的组织性,还能帮助我们更好地处理类与类之间的关系。根据描述,本文将对Java内部类进行深入总结,包括内部类的不同类型、特点及其应用场景。 #### 一、内部类的基本概念 内部类分为四类...
#### 三、类之间的继承关系 1. **`CObject`类**:作为MFC中最基础的类,它提供了序列化、RTTI等功能。所有MFC类都直接或间接地从`CObject`继承。 2. **文档/视图体系结构**: - `CView`和`CDocument`都是直接从`...
实验要求学生不仅能够创建数据域和方法,还要构建类与类之间的关系,并使用这些类进行实际的几何运算。 二. 类的设计 1. **Point 类**:Point 类代表二维平面上的一个点,包含两个私有成员变量 `x` 和 `y` 分别...
在UML类图中,类与类之间的关系对于理解系统的结构至关重要。本文将详细介绍UML类图中的六种基本关系:依赖、类属、关联、实现、聚合和组合。 #### 二、依赖(Dependency) **定义**: - 当元素A的变化会影响元素B...
Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...
#### 二、关键概念与类 **1. MediaSink** MediaSink是Live555框架中用于消费数据的抽象基类。它定义了处理和显示或保存多媒体数据的接口。MediaSink对象负责接收来自MediaSource或其他MediaSink的数据,并执行诸如...