面向对象中类和类的关系

在面向对象方法中,我们在确定了类及类的属性和方法后。不可避免的要研究类和类之间的关系,正是这些关系将整个事情串联起来。使彼此之间有了联系,就像现实生活中,人与人交往中存在着不同的关系。

了解这些关系,对于我们开发系统百利而无一害,能够让我们轻松、高效的工作,相同像我们在日常生活中处理好人与人之间的关系。会给我们带来巨大的优点。那么我们就来认识一下。面向对象中类与类之间有那些关系。

类和类之间的关系大概能够分为一下几种类型:泛化关系(Generalization)、实现关系(realization)、依赖关系(Dependency)、关联关系(Association)(关联、聚合(Aggregation)、组合(Composition))。

泛化关系和实现关系体现的是一种类和类、或者类和接口间的关系。不存在引用,归结为纵向关系。依赖关系和关联关系体现的是类和类、类与接口间的引用。归结为横向关系。

一、泛化关系

泛化关系是一个类(子类、子接口)继承另外的一个类(父类、父接口)的功能,而且能够有自己的新功能。也既是我们所说的继承关系。在java中通过extends来标识。在UML中用一条带空心箭头的实现表示,从子类指向父类,或者子接口指向父接口。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHZzaGlodWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

 代码例如以下:
   Class _A{}
   Class _B extends _A{}
   Public class Test{
      Public static void main(String args[]){
         _A  a = new _B();
      }
   }

二、实现关系

实现关系指的是class类实现interface接口(能够使多个接口)。在java中用implements标识,在UML中用一条带空心三角箭头的虚线标识,从类指向实现的接口。

代码例如以下:
Interface  A{}
Class  B  implements  A{}
Public class Test{
      Public static void main( String args[] ){
         B  b = new B();
      }
   }

说明:以上泛化和实现为一对,两者都用空心三角形。继承关系比实现接口关系耦合性强,  所以继承用实线,实现接口用虚线

三、依赖关系

依赖关系是类与类之间的连接. 表示一个类依赖于还有一个类的定义. 依赖关系总是单向的 。依赖是类的五种关系中耦合最小的一种关系。

由于依赖关系在生成代码的时候,这两个关系类都不会添加属性。这样的微弱的关系能够用类之间的相互了解的程度来说明。在java 中. 依赖关系体现为: 局部变量, 方法中的參数, 和对静态方法的调用.。

在UML中。依赖关系用由类A指向类B的带箭头虚线表示。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHZzaGlodWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

代码例如以下所看到的:

Class  A{ }
Class  B{ }

依赖关系表现形式一:

A类是B类的某个方法中的变量,则B类能够调用它。代码例如以下:

Class B{
   Public void info(){
     Private A a;
   }
}

注:B有一个info方法,A类作为该方法的变量来使用。

A类的生命期。它是当B类的info方法被调用的时候,才被实例化。

依赖关系表现形式二

A类是作为B类中某个方法的參数或者返回值时,代码例如以下:

Class  B {
   Public  A  info( A  a){
      Return null;
   }
}

依赖关系表现形式三:

A类中有一个是静态方法,B类能够调用它

无用多说。A类被B类的一个方法持有。生命期随着方法的运行结束而结束。

四、关联关系

关联体现的是两个类之间语义级别的一种强依赖关系。这样的关系比依赖更强、不存在依赖关系的偶然性、关系也不是暂时性的。通常是长期性的,它使一个类知道还有一个类的属性和方法。并且两方的关系通常是平等的。关联能够是单向、双向的。在java 语言中关联关系是使用实例变量实现的。

在UML中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端能够标注关联两方的角色和多重性标记。

单向关联例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHZzaGlodWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

Class  A { }
Class  B {
   Public  A  a;
}

双向关联例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHZzaGlodWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

Class  A {
   Public  B  b;
 }
Class  B {
   Public  A  a;
}

说明:依赖和关联的差别:

①从类的属性是否添加的角度看:

发生依赖关系的两个类都不会添加属性。当中的一个类作为还有一个类的方法的參数或者返回值,或者是某个方法的变量而已。

发生关联关系的两个类,当中的一个类成为还有一个类的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。

②从关系的生命期角度看:

依赖关系是仅当类的方法被调用时而产生。伴随着方法的结束而结束了。

关联关系是当类实例化的时候即产生。当类销毁的时候。关系结束。

相比依赖讲,关联关系的生存期更长。

由于,关联关系比依赖关系耦合性强,所以,关联关系用实线。依赖关系用虚线。

关联关系经过细化,还存在两种特例:聚合和组合。

(1)聚合关系:是总体和个体之间的关系,即has-a的关系,此时总体与部分之间是可分离的。他们能够具有各自的生命周期,部分能够属于多个总体对象,也能够为多个总体对象共享;表如今代码层面,和关联关系是一致的,仅仅能从语义级别来区分。从java 语法上是分不出关联和聚合的。

在UML中。聚合关系以空心菱形加实线箭头表示。

代码例如以下:

Class B { }
Class A{
   Public  B  b;
   A (B  b){
     This.b = b;
     }
}

注意:关联关系中两个类是处于同样的层次, 而聚合关系中两不类是处于不平等的层次, 一个表示总体, 一个表示部分。

(2)组合关系: 体现的是一种contains-a的关系,这样的关系比聚合更强。也称为强聚合;他相同体现总体与部分间的关系,但此时总体与部分是不可分的,总体的生命周期结束也就意味着部分的生命周期结束;比方你和你的大脑;合成关系不能共享. 。

表如今代码层面,和关联关系是一致的,仅仅能从语义级别来区分。在UML中,组合关系以实心菱形加实线箭头表示。

代码例如以下:

Class B { }
Class A{
   Public  B  b;
   A (){
     b = new Wings();
     }
}

注意:这两种关系的差别在于

①构造函数不同

聚合类的构造函数中包括了还有一个类作为參数。A的构造函数中要用到B作为參数传递进来。

A能够脱离雁群类而独立存在。

组合类的构造函数中包括了还有一个类的实例化。

表明A在实例化之前,一定要先实例化B,这两个类紧密的耦合在一起,同生共灭。

B类是不能够脱离A类而独立存在

②信息的封装性不同

在聚合关系中,client能够同一时候了解A类和B类,由于他们都是独立的

而在组合关系中,client仅仅认识A类,根本就不知道B类的存在,由于B类被严密的封装在A中。

③生命周期不同:

聚合是总体与部分之间是可分离的,他们能够具有各自的生命周期。不会由于一方的消失还有一方跟着消失。

聚合是总体与部分是不可分的,总体的生命周期结束也就意味着部分的生命周期结束。

时间: 2024-10-17 13:44:36

面向对象中类和类的关系的相关文章

UML描述面向对象程序设计中类与类的关系

在面向程序设计中,类与类之间的关系主要有关联关系.依赖关系.泛化关系.接口与实现关系共四种关系.下面将简要进行概述: 一.关联关系 关联关系是类与类中较为常见的关系,其中又包含了以下六种子关联关系: (一)双向关系: 默认情况下,关联是双向的,例如,顾客与商品.父母与子女.双向关联关系用实线表示. (二)单向关联关系 表示一个类与另一个类单方面关联关系,例如居民拥有地址.单向关联用带箭头的实线表示. (三)自关联关系 代表该类与自身有关联关系,一个节点类的成员又是节点对象.用指向该类的带箭头的实

Java中类与类的关系

1.泛化(Generalization) 根据我所理解.泛化就是子类继承父类的方法,还能扩展自己的功能 eg:extend implements 2. 依赖(Dependency) 对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系. 体现为:局部变量.方法的参数或者对静态方法的调用 eg:你要过河.需要借助船 3.关联(Association) 当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系.

UML类图与类的关系详解

在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静

设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)

类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.接下来我们就来谈谈类图的组成,在下一篇中我们将讨论一下类图之间的关系. 一.类图的组成 1. 普通类 上图就是一个UML的普通类图,从上图我们看出,一个UML通常由三部分组成. 第一部分是类名:每个类都必须有一个名字,类名是一个字符串. 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量.一个类可以有任意多个属性,也可以没有属

【转】UML类图与类的关系详解

UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类

黑马程序员----java基础----面向对象思想和类的概述

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面向对象(掌握) (1)面向对象 面向对象是基于面向过程的编程思想. 面向对象和面向过程的区别:面向过程强调的是每一个功能的具体步骤.面向对象强调的是对象,然后由对象去调用功能. (2)面向对象的思想特点 A:是一种更符合我们思考习惯的思想 B:把复杂的事情简单化 C:让我们从执行者变成了指挥者 举例: 买电脑 面向过程:了解电脑---了解自己的需求---对比电脑参数---去中关村买电脑--买

UML类图与类的关系详解--转

http://www.uml.org.cn/oobject/201104212.asp 原文地址 UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(

C#编程语言与面向对象——抽象基类与接口

在一个类前加“abstract”关键字,此类就成为抽象类. 对应的,在一个方法前加“abstract”关键字,此方法就成为抽象方法. abstract class Fruit //抽象类 { public abstract void GrowInArea();//抽象方法 } 注意抽象方法不能又实现代码,在方法名后直接跟一个分号. 抽象类专用于派生出子类,子类必须实现抽象类中所生命的方法.否子子类仍是抽象类. 抽象类一般用于表达一种比较抽象的事物,比如说“水果”,而抽象方法则说明此抽象类应该具有

Python面向对象编程、类

一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功能.举个例子,你要做饭,可以用电磁炉,也可以用煤气灶.不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,两种最重要的编程范式分别是面向过程编程和面向对象编程. 提到面向对象,就不得不提到另一种编程思想,面向过程:什么是面向过程呢,面向过程的思想是把一个项目.一件事情按照一定的顺