九州ju111net手机登录-手机版官网
九州ju111net手机登录titit. 深入理解 内聚( Cohesion)原理and  attilax大总结

九州ju111net手机登录titit. 深入理解 内聚( Cohesion)原理and  attilax大总结

作者:宗教    来源:未知    发布时间:2019-12-20 18:23    浏览量:

atitit. 深入理解 内聚( Cohesion)原理and  attilax大总结

 

 

 

Atitit 深入理解耦合Coupling的原理与attilax总结

Atitit 深入理解抽象类与接口 attilax总结

 

 

 

 

 

 

 

耦合是指两个或两个以上的电路元件或电网络等的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现象。

 

1.1. 内聚的概念 1

耦合作为名词在通信工程、软件工程、机械工程等工程中都有相关名词术语。

1.1. 主要区别接口侧重于动作抽象。。抽象类是属性名词抽象。。1

1.1.1. 高内聚模式关于这个问题给出的答案是:分配职责,使其可保持较高的内聚性。 1

 

1.2. 抽象层次类》》抽象类》》接口1

1.2. 所谓内聚(内聚有多种类型,包括偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚、信息内聚等,这里主要指的是功能内聚 2

 

1.3. 既然有了接口为什么还要定义抽象类,??1

1.2.1. 如果元素具有高度相关的职责,而且没有过多工作,那么该元素具有高内聚性。 2

1. 1 主要分类 

1.4. 其次,抽象中间有不同的抽象层次,抽象类的的极限就是接口2

1.3. 内聚按紧密程度从低到高排列次序为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、信息内聚、功能内聚2

2. ▪ 多场耦合 

1.5. 他们两者之间对抽象概念的支持有很大的相似,有时候甚至可以互换 2

1.4. 内聚强度类型 2

3. ▪ 能量耦合 

1.6. 抽象类与接口的历史2

1.4.1. 偶然内聚 3

4. ▪ 数据耦合 

2. 抽象类2

1.4.2. 逻辑内聚 3

5. ▪ 标记耦合 

3. 二、接口2

1.4.3. 时间内聚 3

1. ▪ 控制耦合 

3.1. 抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。3

1.4.4. 通信内聚 3

2. ▪ 外部耦合 

3.2. 2设计层次3

1.4.5. 顺序内聚 3

3. ▪ 公共耦合 

3.3. 抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。4

1.4.6. 过程内聚 3

4. ▪ 内容耦合 

3.4. 抽象类往往都是通过重构而来的!但是接口就不同, 们要做的就是事前定义好飞的行为接口。 5

1.4.7. 信息内聚 3

5. ▪ 非直接耦合 

 

1.4.8. 功能内聚 4

6. ▪ 另类情况 

1.1. 主要区别接口侧重于动作抽象。。抽象类是属性名词抽象。。

 

 

1.2. 抽象层次类》》抽象类》》接口

 

 

 

1.3. 既然有了*接口为什么还要定义抽象类*,??

俩者给你不同。。接口侧重于动作抽象。。抽象类是属性名词抽象。。

 

比如鸟类,一个bird  基类。。是个抽象类。。

 

鸡,则是bird的子类。。

 

 

那如何定义fly()飞这个方法呢??很明显不能定义到抽象类里面去,因位不是所有的鸟都会飞。所以只能定义到接口里面去。。

 

1.1. 内聚的概念

编辑 

内聚的概念是Constantine、Yourdon、Stevens等人提出的。按他们的观点,把内聚按紧密程度从低到高排列次序为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、信息内聚、功能内聚。但是紧密程度的增长是非线性的。偶然内聚和逻辑内聚的模块联系松散,后面几种内聚相差不多,功能内聚一个功能、独立性强、内部结构紧密,是最理想的内聚。

 

 

 

耦合是系统设计中最重要的概念之一,也是设计中真正的基本原则之一。所谓耦合,指的是对某元素与其他元素之间的连接、感知和依赖程度的度量。在一个OO系统中,所有的耦合形式可分为5类:

1.4. 其次,抽象中间有不同的抽象层次,抽象类的的极限就是接口

 

1.1.1. 高内聚模式关于这个问题给出的答案是:分配职责,使其可保持较高的内聚性。

 

l  零耦合(nil coupling):两个类丝毫不依赖于对方。

1.5. 他们两者之间对抽象概念的支持有很大的相似,有时候甚至可以互换

1.2. 所谓内聚(内聚有多种类型,包括偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚、信息内聚等,这里主要指的是功能内聚

同耦合一样,内聚也是系统设计中最重要的概念之一,也是设计中真正的基本原则之一。所谓内聚(内聚有多种类型,包括偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚、信息内聚等,这里主要指的是功能内聚),是对元素(包括类、子系统等)职责的相关性和集中度的度量。

l  导出耦合(export coupling):一个类依赖于另一个类的公有接口。

1.6. 抽象类与接口的历史

 

1.2.1. 如果元素具有高度相关的职责,而且没有过多工作,那么该元素具有高内聚性。

 

内聚的类的方法数量较少,在功能性上有非常强的关联,而且不需要做太多的工作。如果任务的规模比较大的话,应该将任务所涉及到的各项职责按照关联的强度分配到各个类中,然后让各个类的对象进行相互协作,共同完成这项任务。高内聚的类优势明显,它易于理解、维护和复用。高度相关的功能性与少量操作相结合,也可以简化维护和改进的工作。细粒度的、高度相关的功能性也可以提高复用的潜力。

 

 

在少数情况下,较低的内聚也是被接受的。比如,为了方便专门的数据库逻辑人员统一管理SQL语句,系统中往往可以将与SQL语句相关的操作都放在一个独立的全能类中;另外,出于性能的考虑,在RPC中使用一个粗粒度的RPC服务器类,既可以减少服务器上对象的数目,可以减少网络请求和连接的数目,从而提高系统的性能。这些,都需要从系统的全局出发,结合多种设计的原则进行权衡考虑。

l  授权耦合(overt coupling):一个类经允许,使用另一个类的实现细节。

2. 抽象类

       我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。

1.3. 内聚按紧密程度从低到高排列次序为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、信息内聚、功能内聚

 

 

l  自行耦合(covert coupling):一个类未经允许,使用另一个类的实现细节。

3. 二、接口

      接口是一种比抽象类更加抽象的“类”。这里给“类”加引号是我找不到更好的词来表示,但是我们要明确一点就是,接口本身就不是类,从我们不能实例化一个接口就可以看出。如new Runnable();肯定是错误的,我们只能new它的实现类。

 

 

 

1.4. 内聚强度类型

编辑 

内聚按强度从低到高有以下几种类型:

l  暗中耦合(surreptitious coupling):一个类通过某种方式知道了另一个类的实现细节。

3.1. 抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。

抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

 

1.4.1. 偶然内聚

如果一个模块的各成分之间毫无关系,则称为偶然内聚,也就是说模块完成一组任务,这些任务之间的关系松散,实际上没有什么联系。

 

3.2. 2设计层次

      上面只是从语法层次和编程角度来区分它们之间的关系,这些都是低层次的,要真正使用好抽象类和接口,我们就必须要从较高层次来区分了。只有从设计理念的角度才能看出它们的本质所在。一般来说他们存在如下三个不同点:

      1、 抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

      2、 跨域不同。抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处

 

、 设计层次不同。对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。比如我们只有一个猫类在这里,如果你这是就抽象成一个动物类,是不是设计有点儿过度?我们起码要有两个动物类,猫、狗在这里,我们在抽象他们的共同点形成动物抽象类吧!所以说抽象类往往都是通过重构而来的!但是接口就不同,比如说飞,我们根本就不知道会有什么东西来实现这个飞接口,怎么实现也不得而知,我们要做的就是事前定义好飞的行为接口。所以说抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。

 

 

1.4.2. 逻辑内聚

几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。

 

3.3. 抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。

对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。

 

 

1.4.3. 时间内聚

如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。

零耦合当然是耦合度最低的。两个丝毫互不依赖的类,意味着在维护和扩展系统时,可以随意地去掉或者修改其中的一个类而丝毫不会影响到另一个类。但是,只使用零耦合却无法创建出一个有意义的OO系统,因为所有的类都是独立、不相关的,相互之间没有消息的传递,这样最多只能创建出一个类库。导出耦合具有相当低的耦合度,因为在导出耦合中,一个类只依赖另一个类的公有接口。在一个设计良好的系统中,消息的传递只会通过类的公有接口进行,因而导出耦合可以很好地支持系统的可维护性与可扩展性。除此之外,授权耦合、自行耦合、以及暗中耦合都是耦合程度比较高的耦合形式。

3.4. 抽象类往往都是通过重构而来的!但是接口就不同, 们要做的就是事前定义好飞的行为接口。

 

java提高篇(四)-----抽象类与接口 - chenssy的博客 - 博客频道 - CSDN.NET.htm

 

 

 

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 

埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊   

常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

 

 

头衔:uke总部o2o负责人,全球网格化项目创始人,

uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

,Uke部落首席大酋长,

uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

奶牛科技cto ,uke 首席cto

uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人 

 Uke软件标准化协会理事长理事长 uke终身教育学校副校长

Uke 数据库与存储标准化协会副会长 uke出版社编辑总编

Uke医院方面的创始人

 

转载请注明来源:attilax的专栏   

--Atiend

 

 

1.4.4. 通信内聚

如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。

有这样一条OO设计的经验原则:类与类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么就只使用另一个类提供的公有接口。授权耦合、自行耦合、暗中耦合基本上不应该在系统中被使用到。

1.4.5. 顺序内聚

如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。

。高耦合本身也并不是问题之所在,问题是与某些方面不稳定的元素之间的高耦合,这种高耦合会严重影响系统将来的维护性和扩展性。而比如所有的Java系统都能安全地将自己去Java库(java.lang,java.util等)进行耦合,因为Java库是稳定的,与Java库的耦合不会给系统的灵活性、维护性、扩展性带来什么问题。

1.4.6. 过程内聚

构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。

模块完成多个需要按一定的步骤一次完成的功能。(过程相关---控制耦合)。例如:在用程序流程图设计模块时,若将程序流程图中的一部分划出各自组成模块,便形成过程内聚。

 

1.4.7. 信息内聚

模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该模块执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。

 

1.4.8. 功能内聚

模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。

 

 

内聚_百度百科.htm

 

 

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 

埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊   

常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

 

 

头衔:uke总部o2o负责人,全球网格化项目创始人,

uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

,Uke部落首席大酋长,

uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

奶牛科技cto ,uke 首席cto

uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人 

 Uke软件标准化协会理事长理事长 uke终身教育学校副校长

Uke 数据库与存储标准化协会副会长 uke出版社编辑总编

Uke医院方面的创始人

 

转载请注明来源:attilax的专栏   

--Atiend

 

 

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

有软硬件之间的耦合,还有软件各模块之间的耦合。

耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。

耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:

(1) 内容耦合。当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另一个模块时,这样的耦合被称为内容耦合。内容耦合是最高程度的耦合,应该避免使用之。

(2) 公共耦合。两个或两个以上的模块共同引用一个全局数据项,这种耦合被称为公共耦合。在具有大量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是十分困难的。

(3) 外部耦合 。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。

(4) 控制耦合 。一个模块通过接口向另一个模块传递一个控制信号,接受信号的模块根据信号值而进行适当的动作,这种耦合被称为控制耦合。

(5) 标记耦合 。若一个模块A通过接口向两个模块B和C传递一个公共参数,那么称模块B和C之间存在一个标记耦合。

(6) 数据耦合。模块之间通过参数来传递数据,那么被称为数据耦合。数据耦合是最低的一种耦合形式,系统中一般都存在这种类型的耦合,因为为了完成一些有意义的功能,往往需要将某些模块的输出数据作为另一些模块的输入数据。

(7) 非直接耦合 。两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。

总结:耦合是影响软件复杂程度和设计质量的一个重要因素,在设计上我们应采用以下原则:如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,尽量避免使用内容耦合。

 

 

1.1. 耦合强度,依赖于以下几个因素:[2]  

(1)一个模块对另一个模块的调用;

(2)一个模块向另一个模块传递的数据量;

(3)一个模块施加到另一个模块的控制的多少;

(4)模块之间接口的复杂程度。

 

GRASP设计模式及OO设计原则浅谈-钟声的博客-搜狐博客!!!.htm

 

耦合_百度百科.htm

GRASP模式 - 刘伟技术博客 - 博客频道 - CSDN.NET.htm

 

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 

埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊   

常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

 

 

头衔:uke总部o2o负责人,全球网格化项目创始人,

uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

,Uke部落首席大酋长,

uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

奶牛科技cto ,uke 首席cto

uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人 

 Uke软件标准化协会理事长理事长 uke终身教育学校副校长

Uke 数据库与存储标准化协会副会长 uke出版社编辑总编

Uke医院方面的创始人

 

转载请注明来源:attilax的专栏   

--Atiend

 

 

 

下一篇:没有了
友情链接: 网站地图
Copyright © 2015-2019 http://www.592dazhaxie.com. 九州ju111net手机登录有限公司 版权所有