耦合度和聚合度

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

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

聚合(Aggregation):

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

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

组合(Composition):

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

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

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

最后总结一下:

聚合:

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

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

时间: 2024-07-29 22:03:47

耦合度和聚合度的相关文章

关于耦合度的一点反思

在编程过程当中,我时常会感到自己的代码存在问题,却又说不上究竟是什么.最近在读<代码大全>,读到代码耦合度的部分,发现里面提到的一些问题,正是自己隐隐约约觉得自己的代码有缺陷的地方.我打算结合书中的内容,重新审视下自己的代码中的不足之处,并且记录下来. 高能预警:下面的文字中会包含可能引起读者不适的内容.对于有代码洁癖的读者,这种不适感会极为强烈,请不要继续阅读:未成年人请在家长的陪同下观看. The most insidious kind of coupling occurs when on

编程心法 之 内聚度和耦合度是什么

内聚度 Cohesion 耦合度 Coupling "Coupling" describes the relationships between modules, and "cohesion" describes the relationships within them. 耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量 内聚度(Cohesion),一个模块内部各成分彼此结合的紧密程度 参考 参考 想要看到更多玮哥的学习笔记.考试复习资料.面试准备

使用@selector模仿代理功能降低代码耦合度

说明 该模式的好处就是两个产生联系的对象间并没有具体的耦合代码,增删改查均很直观 源码 Model // // Model.h // SELMethod // // Created by YouXianMing on 15/5/22. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #define SafePerformSelector(Stuff) do

Yii2在Form中处理短信验证码的Validator,耦合度最低的短信验证码验证方式

短信验证码在目前大多数web应用中都会有,本文介绍一个基于Yii2 Validator方式的验证码验证方式. 在其他文章中看到的方式大多比较难做到一次封装,多次重用. 使用此方式的好处自然不用多说,Validator支持在Model和Form中使用,使用的时候只需要在rules中添加一条验证规则即可. 第一步: 准备数据表,用来存储短信验证码 CREATE TABLE `tbl_sms_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `to` varch

callee关键字使用可降低代码耦合度

<script type="text/javascript"> //callee关键字使用 /* 求n的阶层的函数 n! = n*(n-1)! 5! = 5*4*3*2*1 4! = 4*3*2*1 3! = 3*2*1 2! = 2*1 1! = 1 */ function jiecheng(n){ if(n==1){ return 1; } else { //return n*jc(n-1); return n*arguments.callee(n-1); } } co

dljd_011_jdbc再次封装工具类_把数据库的相关信息写到配置文件中,减低代码的耦合度

一.将连接数据库所需的相关信息写入到配置文件.通过读取配置文件来获取数据库的相关信息 package edu.aeon.aeonutils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import

在java中,OOA是什么?OOD是什么?OOP是什么?

OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析. OOA(面向对象的分析)模型由5个层次(主题层.对象类层.结构层.属性层和服务层)和5个活动(标识对象类.标识结构.定义主题.定义属性和定义服务)组成.在这种方法中定义了两种对象类之间的结构,

线性判别分析(Linear Discriminant Analysis, LDA)算法初识

LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的.性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳

LDA算法入门

http://blog.csdn.net/warmyellow/article/details/5454943 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的.性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维