类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。
类与类之间存在以下关系:
(1)泛化(Generalization)
(2)关联(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)
UML图与应用代码例子:
1.泛化(Generalization)
[泛化]
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[具体表现]
父类 父类实例=new 子类()
[UML图](图1.1)
图1.1 Animal类与Tiger类,Dog类的泛化关系
[代码表现]
-
class Animal{}
- class Tiger extends Animal{}
- public class Test
- {
- public void test()
- {
- Animal a=new Tiger();
- }
- }
2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[具体表现]
依赖关系表现在局部变量,方法的参数,以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML表现](图1.2)
图1.2 Person类与Screwdriver类的依赖关系
[代码表现]
3.关联(Association)
[关联]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[具体表现]
关联关系是使用实例变量来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML图] (图1.3)
图1.3 公司和员工的关联关系
[代码表现]
-
public class Company{
- private Employee employee;
- public Employee getEmployee(){
- return employee;
- }
- public void setEmployee(Employee employee){
- this.employee=employee;
- }
-
- public void run(){
- employee.startWorking();
- }
- }
-
public class Person{
-
- public void screw(Screwdriver screwdriver){
- screwdriver.screw();
- }
- }
(4)聚合(Aggregation)
[聚合]
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
[具体表现]
与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
[关联与聚合的区别]
(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。
[UML图](图1.4)
图1.3 电脑和组件的聚合关系
[代码表现]
[参考资料]
1.《Java与模式》(阎宏 编著) 第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.run();
- }
- }
分享到:
相关推荐
"类与类关系的UML图与代码表现" 类与类关系是面向对象编程中非常重要的一部分,对于理解面向对象具有很重要的作用。在 UML 图中,类与类之间存在四种关系:泛化、关联、依赖和聚合。 一、泛化(Generalization) ...
### 类与类关系的UML图与代码表现详解 在面向对象编程中,类与类之间的关系对于构建清晰、高效且可维护的软件系统至关重要。这些关系不仅体现在代码的结构中,也是设计模式和架构原则的基础。通过UML(统一建模语言...
本篇文章将深入探讨四种主要的类关系:泛化、关联、依赖和聚合,以及它们在UML图和实际代码中的表现。 1. **泛化 (Generalization)**:泛化关系表示类之间的继承或接口实现。它展现了类之间的层次结构,子类继承或...
- **代码审查**:在代码审查时,通过UML图,团队成员能更直观地理解他人代码,减少沟通成本。 - **重构支持**:在进行代码重构时,UML图可以作为验证和指导工具,确保重构后代码结构的正确性。 - **文档生成**:...
本文将深入探讨斗地主游戏的UML图,并结合提供的Java代码,解析其设计思路与实现细节。 一、UML图的作用与类型 UML图是软件设计的重要工具,它通过图形化的方式展示系统的静态结构和动态行为。在斗地主游戏中,...
本文将详细探讨四种主要的UML类关系——依赖、泛化、关联和实现,并通过Java代码示例来阐述这些关系的实现。 1. **依赖(Dependency)**:依赖关系表示一个类(A)的正常工作需要另一个类(B)的存在。在代码中,这...
"JAVA类生成UML图"这个主题涉及到如何从已有的Java源代码自动生成UML类图,这是一种非常实用的技术。 1. **UML类图**: UML类图是UML中最基础的图表之一,它展示了类与类之间的关系,如继承、关联、依赖等。类图由类...
类在UML图中通常用矩形表示,分为三个部分,分别是类名、属性和方法。 2. 关联:表示两个类之间的联系,可以是一对一、一对多或多对多的关系。 3. 聚合:表示整体和部分的关系,但它允许部分脱离整体而独立存在。 ...
在软件工程领域,UML(统一建模语言)是...通过理解和熟练应用这些UML类之间的关系,开发者能够清晰地表达复杂的软件设计,提高代码的可读性和维护性。无论是进行系统分析、设计还是文档编制,UML都是不可或缺的工具。
**UML类图及其在代码中的表现形式** UML(统一建模语言)是一种标准化的图形建模语言,用于软件工程领域,特别是面向对象设计...熟悉并掌握UML类图及其与代码的对应关系,对于提升软件开发的质量和效率具有重大意义。
本主题将围绕“cpp-C源代码自动分析工具得到UML类图和函数间调用关系网图”这一主题进行展开,介绍如何利用工具来可视化和理解C++代码的结构。 UML(统一建模语言)是一种标准化的建模语言,用于软件工程中的系统...
在这个文档中,我们将深入探讨UML类图、类与类间的关系,并结合提供的文档资源进行详细的阐述。 首先,UML类图由一系列类和它们之间的关联、依赖、泛化(继承)以及实现关系构成。类是系统中的基本构造块,它封装了...
在UML(统一建模语言)中,类图是一种重要的模型表示工具,它用来描绘系统中的类、接口以及它们之间的关系。类图中的类扮演着核心角色,它们定义了系统的结构和行为。类可以分为抽象类和具体类,以及主动类和非主动...
在UML类图中,类与类之间的关系对于理解系统的结构至关重要。本文将详细介绍UML类图中的六种基本关系:依赖、类属、关联、实现、聚合和组合。 #### 二、依赖(Dependency) **定义**: - 当元素A的变化会影响元素B...
图片文件可能展示了这些关系的图形示例,通过观察和分析这些图,可以更直观地理解这四个概念在实际设计中的应用。 总结来说,依赖关系强调短暂的相互依赖,关联描绘类间的结构联系,聚合表示部分与整体的松散连接,...
**UML类图与类的关系详解** UML(Unified Modeling Language),统一建模语言,是软件开发中一种用于可视化和表达系统设计的图形表示法。类图是UML中的核心概念,它描述了系统中类的结构和它们之间的关系。在理解和...
在UML中,类图展示了类与类之间的多种关系,包括关联、单向关联、自关联、多重关联、聚合、组合、依赖以及泛化关系。下面我们将详细探讨这些关系及其在Java代码中的体现。 1. **关联关系**: - **双向关联**:例如...
UML中的类与类之间的关系是理解和设计复杂系统的关键,包括泛化、关联、依赖、聚合和组合等。 ### 泛化(Generalization) 泛化关系表示了类之间的继承关系,它体现了“is-a”(是一种)的概念,即子类是父类的一种...