精华内容
下载资源
问答
  • 1.泛化(Generalization):是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征行为. (1) 熊猫是动物的一种, 即有熊猫的自身的特性也有动物的共性. 2.实现(Realization):是一种类与...

    1.泛化(Generalization):是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为.
    (1) 熊猫是动物的一种, 即有熊猫的自身的特性也有动物的共性.

    2.实现(Realization):是一种类与接口的关系, 表示类是接口所有特征和行为的实现.

    3.关联(Association):是一种拥有的关系, 它使一个类知道另一个类的属性和方法.
    (1)例如:老师与学生

    4.聚合(Aggregation):是整体与部分的关系, 且部分可以离开整体而单独存在.
    (1)例如:车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

    5.组合(Composition):是整体与部分的关系, 但部分不能离开整体而单独存在. (1)例如:学校和学生是整体和部分的关系, 没有学校就不存在学生.

    6.依赖(Dependency):是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.

    7.总结:
    各种关系的耦合度强弱顺序:

    泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

    展开全文
  • 耦合度和聚合

    2015-09-15 09:14:00
    简单地说,对象之间的耦合度就是对象之间的依赖性。指导使用维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类构件之间的耦合最小. 耦合性是程序结构中各个...

    简单地说,对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小.

                耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口.一般模块之间可能的连接方式有七种,耦合性由低到高分别是:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合等。

    聚合(Aggregation):

      这是一种松散的对象间的关系.举个例子:计算机和他的外围设备就是一例.

    用来表示拥有关系或者整体与部分的关系。

    组合(Composition):

    这是一种非常强的对象间的关系,举个例子,树和它的树叶之间的关系.

    在一个合成里,部分与整体的生命周期都是一样的。一个合成的新对象完全拥有对其组成

    部分的支配权。包括他们的创建和毁灭。

    最后总结一下:

    聚合:

    聚合有时能够不依赖部分而存在,有时又不能
    部分可以独立于聚合而存在
    如果有一部分遗失,聚合会给人一种不完全的感觉
    部分的所有权可以由几个聚合来共享,比如打印机
    合成:

    部分某一时刻只能属于某一个组成
    组成唯一的负责处理它的所有部分--这就意味着负责他们的创建与销毁
    倘若对于部分的职责由其他对象来承担的话,组成也就可以放松这些职责。
    如果组成销毁的话,它必须销毁所有的部分,或者把负责他们的权利转移给其他对象

    转载于:https://www.cnblogs.com/CandiceW/p/4809231.html

    展开全文
  • 在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。 1. 依赖(Dependence)   依赖关系的定义为:对于两个相对独立的...

    在java以及其他的面向对象设计模式中,类与类之间主要有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图例中,实现关系用虚线+空心箭头表示,箭头指向接口。

    展开全文
  • 在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合泛化这五种关系,耦合性依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强...


    在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合和泛化这五种关系,耦合度依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强。

    下面根据个人理解,尝试讲解这五种类关系。

    1.依赖(Dependency)

    依赖关系使用虚线加箭头表示,如下图所示:
    这里写图片描述

    学生在学习生活中经常使用电脑,于是对电脑产生了依赖。依赖关系是五种关系中耦合最小的一种关系。类A要完成某个功能引用了类B,则类A依赖类B。依赖在代码中主要体现为类A的某个成员函数的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B。以Student类和Computer类为例,用C++语言编码如下:

    class Computer {
    public:
    	static void start(){
    		cout<<"电脑正在启动"<<endl;
    	} 
    };
    class Student {
    public:
    	//返回值构成依赖
    	Computer& program();
    	//形参构成依赖
    	void program(Computer&);
    	void playGame() {
    		//局部变量构成依赖
    		Computer* computer=new Computer;
    		...
    		//静态方法调用构成依赖
    		Computer::star();
    	}
    };
    

    2.关联(Association)

    关联关系使用实线加箭头表示,类之间的关系比依赖要强。学生与老师是关联的,学生可以不用电脑,但是学生不能没有老师。如下图所示:
    这里写图片描述

    关联与依赖的对比:
    相似之处:
    关联暗示了依赖,二者都用来表示无法用聚合和组合表示的关系。

    区别:
    (1)发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。

    发生关联关系的两个类,类A成为类B的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。 在代码中的表现如下:

    class Teacher;
    class Student {
    public:
    	Teacher teacher;  //成员变量
    	void study();
    }	
    

    (2)从关系的生命周期来看,依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束。关联关系当类实例化的时候产生,当类对象销毁的时候关系结束。相比依赖,关联关系的生存期更长。

    关联关系有单向关联、双向关联、自身关联、多维关联等等。其中后三个可以不加箭头。
    单向关联:
    这里写图片描述

    双向关联:
    这里写图片描述

    自身关联:
    这里写图片描述

    多维关联:
    这里写图片描述

    3.聚合(Aggregation)

    聚合关系使用实线加空心菱形表示。聚合用来表示集体与个体之间的关联关系。例如班级与学生之间存在聚合关系,类图表示如下:
    这里写图片描述

    聚合关系在代码上与关联关系表现一致,类Student将成为类Classes的成员变量。代码如下:

    class Student;
    class Classes {
    public:
        Student* student; 
    	Classes(Student* stu):student(stu) {}
    };
    

    4.组合(复合,Composition)

    复合关系使用实线加实心菱形表示。组合又叫复合,用来表示个体与组成部分之间的关联关系。例如学生与心脏之间存在复合关系,类图表示如下:
    这里写图片描述

    组合关系在代码上与关联关系表现一致,类Heart将成为类Student的成员变量。代码如下:

    class Heart;
    class Student {
    public:
        Heart* heart; 
    	Student() {
    		heart=new Heart;
    	}
    	~Student() {
    		delete heart;
    	}
    };
    

    聚合与组合的对比:
    (1)聚合关系没有组合紧密。
    学生不会因为班级的解散而无法存在,聚合关系的类具有不同的生命周期;而学生如果没有心脏将无法存活,组合关系的类具有相同的生命周期。

    这个从构造函数可以看出。聚合类的构造函数中包含另一个类的实例作为参数,因为构造函数中传递另一个类的实例,因此学生可以脱离班级体独立存在。组合类的构造函数包含另一个类的实例化。因为在构造函数中进行实例化,因此两者紧密耦合在一起,同生同灭,学生不能脱离心脏而存在。

    (2)信息的封装性不同。
    在聚合关系中,客户端可以同时了解Classes类和Student类,因为他们是独立的。

    在组合关系中,客户端只认识Student类,根本不知道Heart类的存在,因为心脏类被严密地封装在学生类中。

    理解聚合与复合的区别,主要在于聚合的成员可独立,复合的成员必须依赖于整体才有意义。

    5.泛化(Generalization)

    泛化是学术名称,通俗来讲,泛化指的是类与类之间的继承关系和类与接口之间的实现关系。

    继承关系使用直线加空心三角形表示。类图结构如下:
    这里写图片描述
    类接口的实现关系使用虚线加空心三角形表示。类图结构如下:
    这里写图片描述

    6.小结

    依赖、关联、聚合、组合与泛化代表类与类之间的耦合度依次递增。依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,组合是一种更强的关联,泛化则是一种最强的关联,所以笼统的来区分的话,实际上这五种关系都是关联关系。

    依赖关系比较好区分,它是耦合度最弱的一种,在编码中表现为类成员函数的局部变量、形参、返回值或对静态方法的调用。关联、聚合与组合在编码形式上都以类成员变量的形式来表示,所以只给出一段代码我们很难判断出是关联、聚合还是组合关系,我们需要从上下文语境中来判别。关联表示类之间存在联系,不存在集体与个体、个体与组成部分之间的关系。聚合表示类之间存在集体与个体的关系。组合表示个体与组成部分之间的关系。

    依赖、关联、聚合与组合是逻辑上的关联,泛化是物理上的关联。物理上的关联指的是类体的耦合,所以类间耦合性最强。


    参考文献

    [1] 认识UML中类之间的依赖、关联、聚合、组合、泛化的关系
    [2] UML类关系(依赖,关联,聚合,组合的区别)
    [3] 谈一谈自己对依赖、关联、聚合和组合之间区别的理解

    展开全文
  • 类与类之间的关系和耦合度

    千次阅读 2020-06-30 21:19:46
    根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。 依赖关系 依赖(Dependency)关系是...
  • https://blog.csdn.net/kiki44944/article/details/81153804
  •  关联关系可以就依据耦合度的强弱划分为:依赖,关联,聚合,组合四种(耦合度依次增强)。耦合度简单的说的就是关系的紧密程度(类 A 改变对类 B 的影响程度),详情请自行谷歌  四种关系的区别概述如下:  ...
  • 他们的耦合度依次增强依赖、关联、聚合和组合之间区别• 依赖(Dependency) 关系是类与类之间的联接,一般而言,依赖关系体现为局域变量、方法的形参,或者对静态方法的调用。• 关联(Association)关系是类与类之间...
  • 在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合泛化这五种关系耦合度依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强...
  • 依赖、关联、聚合和组合之间区别

    千次阅读 2019-06-06 00:11:32
    耦合度依次增强:依赖、关联、聚合和组合 1、依赖(Dependency)关系 依赖关系表示一个类依赖于另一个类的定义。依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的...
  • 在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合泛化这五种关系耦合度依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强...
  • 在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。他们在编程语言中的体现却是基本相同的,...
  • UML类关系 1. 泛化关系 对于面向对象编程语言,UML中所说的泛化关系(Generalization)就是指类的继承关系。 如果一个类是另一个类的子类,...如果一个类实现了一个接口,那么类接口的关系是实现关系(Realizatio...
  • 面向对象是符合人们对现实世界的思维模式,利用面向对象设计,特别是采用各种设计模式来解决问题时,会设计多个类,然后创建多个对象,一个设计良好的类,应该是兼顾信息行为并且高内聚。而不同的类之间,应该做到...
  • 泛化这五种关系耦合度依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强。 参考博文《设计模式中类的关系》,书上对这四种关系的...
  • 在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。 依赖(Dependency)关系是类与类之间的...
  • 聚合关系

    2011-03-04 15:03:00
    聚合关系 聚合关系用于对模型元素之间的组装关系进行建模。有许多组成关系的示例:图书馆 包括大量的书籍 ,公司部门 由雇员 组成,计算机 由许多设备 组成。如果对此进行建模,那么聚合关系体(部门 )...
  • UML中有哪些关系?解释类图中聚合和关联的相同点不同点。 在UML中,常见的关系有泛化、聚合、关联、依赖和实现。...从耦合度的角度看,聚合关系要强于关联关系依赖:是两个事物之间的语义关系...
  • 转自:http://www.yongfa365.com/Item/UML-Association-Dependency-Aggregation-Composition-Realization-Generalization.html  大话设计模式上的一个图,我用EA画出来的: ... 依赖关系   dependency
  • 1) 类(Class)封装了数据行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么...
  • 耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。目的:使得模块的“可重用性”、“移植性”大大增强通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低 模块粒度: ...
  • 前言在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。 一 描述依赖(Dependency)关系是类与类...
  • 文章目录1.依赖(Dependency)2.关联(Association)3.聚合(Aggregation)4.组合(复合,Composition)5.泛化(Ge...
  • 在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。 依赖(Dependency)关系是类与类之间的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,763
精华内容 9,105
关键字:

聚合关系和依赖关系的耦合度和