3、GRASP原则三: 低耦合 Low Coupling
   How to support low dependency, low change impact and increased reuse?

   如何保证设计方案支持低的依赖性、低的变化影响度、增加可重用性?
3.2 耦合的定义Coupling

   耦合: 一个元素与其它元素的联接、感知以及依赖程度的度量

    Measure of how strongly one element is: connected to、 has knowledge of、relies on another element    比较

     Cohesion,内聚: 模块内的操作之间联系紧密的程度

     Coupling,耦合: 两个子模块之间联系的强度

   高耦合带来的问题 Problems with High Coupling

     “牵一发动全身”Forced local changes because of changes in related class

     A依赖B,A与B之间有耦合,一旦B变化了,A就会受影响

   元素孤立是无法理解 Harder to understand in isolation

   元素很难重用 Harder to reuse — drags in more classes
3.3 GRASP rule3: Low Coupling

   Name: Low Coupling

   Problem:

     How to support low dependency, low change impact and increased reuse?

   Solution:

     Assign responsibility so coupling remains low.

       Use this principle to evaluate alternatives

       All other things being equal prefer the low coupling solution
   Note: Information Expert encourages Low Coupling

   Why most secret service (spy) is one-way contact? 为什么特 务工作都是单线联系?
3.4 Discuss: Low Coupling

   低耦合是所有设计决策时自然而然要考虑的原则

    Low Coupling is a principle to keep in mind during all design decisions; it is an underlying goal to     continually consider

   低耦合是一种评估原则,是设计师用来对设计方案进行评价的一种指标

    It is an evaluative principle that a designer applies while evaluating all design decisions

   X与Y存在耦合的情况,例如

     X has an attribute that refers to Y

     X calls on services of Y

     X has a method that references Y (parameter, local variable, or return value)

     X is a direct or indirect subclass of Y

     Y is an interface, and X implements that interface
   低耦合支持类的设计相对独立,减少了变化带来的相互影响

    Low Coupling supports the design of classes that are more independent, which reduces the impact of     change

   低耦合与其他的原则,如信息专家、高内聚必须综合考虑

   不能单独考虑低耦合

     “是药,三分毒”

   继承关系中,子类与父类的耦合非常紧密 A subclass is strongly coupled to its superclass.

     所以, 能用组合的地方不要用继承

   There is no absolute measure of when coupling is too high

     低耦合不具备可操作性!类似“只可意会,不可言传”
   极端情况,类之间没有耦合

     不希望这种情况出现

       because a central metaphor of object technology is a system of connected objects that         communicate via messages

       Too little coupling means we aren’t a “collaborating community of objects”

     这样会形成很差的设计

       产生少量的不内聚、臃肿、行为复杂的对象,承担了全部的工作,这些类 可能独立工作,成为

         一 个个简单的数据仓库

   类之间存在适度的耦合是正常的、必须的

     这样才能产生面向对象系统,其任务是由相互连接的对象通过协作来完成

      to create an object-oriented system in which tasks are fulfilled by a collaboration

      between connected objects
3.4 Discuss:Low Coupling— When Not To

   “背靠大树好乘凉”

     因为大树不会倒、不常变、稳定

   High coupling to stable elements and to pervasive elements is seldom a problem

   e.g. language libraries  For example, a Java J2EE application can safely couple itself to the J

    ava libraries (java.util, and so on)  because they are stable and widespread

7.3 GRASP原则三: 低耦合 Low Coupling的更多相关文章

  1. C# 低耦合 高内聚

    低耦合 loosely Coupling 松散的耦合关系=炮友 couple=夫妻 夫妻=法律约束.家庭.生活.财产.繁衍 炮友:吃喝玩乐,不会产生感情方面的依赖       内聚性 内聚性又称块内联 ...

  2. 面系那个对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法

    面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...

  3. 对C++中高内聚,低耦合原则的理解

    1.C语言是面向过程的语言,采用模块化的设计思想,每个功能划分为一个模块,是以函数为单位的. 2.C++是面向对象的语言,采用类设计的思想,因此C++中的模块是以类为基本单位的. 高内聚,低耦合能够使 ...

  4. 7.7 GRASP原则七: 纯虚构 Pure Fabrication

    GRASP原则七: 纯虚构 Pure Fabrication  如果依据信息专家原则获得的解决方案不合适,既不想违反低耦合.高内聚,也不想违 反其他的原则, 该如何把职责分配给对象?  左右为难… ...

  5. 7.5 GRASP原则五:高内聚 High Cohesion

    GRASP原则五:高内聚 High Cohesion  How to keep objects focused, understandable and manageable, and as a si ...

  6. 7.4 GRASP原则四:控制器 Controller

    4.GRASP原则四:控制器 Controller  What first object beyond the UI layer receives and co-ordinates (control ...

  7. 7.2 GRASP原则二:信息专家 Information Expert

    2.GRASP原则二:信息专家 Information Expert  What is a general principle of assigning responsibility to obje ...

  8. 运用GRASP原则来做uml交互类图-------pos机实例

    重要的几个GRASP原则:1.控制器模式   2.创建者模式 (原则)3.信息专家模式(原则) 4. 高内聚 低耦合   这里所说的模式并不是java中针对具体的事件的设计模式 主成功场景的几个操作: ...

  9. iOS:CYLTabBarController【低耦合集成TabBarController】

    导航 与其他自定义TabBarController的区别 集成后的效果 项目结构 使用CYLTabBarController 第一步:使用CocoaPods导入CYLTabBarController ...

随机推荐

  1. [yum] yum加速

    通常,以我对于个人生活和工作品质的要求,并没有这个需求. 因为我的宽带费很贵,独享.就算是centos主站,也很快.但是当你去了一些办公环境恶劣的地方上班的时候, 也难免动用一些小技巧.如下: 装这个 ...

  2. 【托业】toeic托业必背核心词汇_修正版

  3. (玩起来)DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比

    盆友们,边看文章边玩,请耐心等待PowerBI load出来~~~~ (7.8秒钟) DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比 难度: ★☆☆☆☆ ...

  4. linux安装lamp/lamp/lanmp

    wdcp安装lamp/lanp/lanmp 和宝塔(centOS)1. yum install -y wget  //yum安装wegt2. wget http://dl.wdlinux.cn/fil ...

  5. vue中使用scss

    之前项目里我一般是使用less的,朋友问到如何引入scss,于是我就简单的跑了一下,以下主要供自己学习,如有更好的方法可以一起交流讨论一下 第一步,安装依赖 cnpm install node-sas ...

  6. 《linux就该这么学》第八节课:第六章存储结构与磁盘划分

     笔记 (借鉴请修改) 6.3.文件系统与数据资料 目前linux最常见的文件系统: ext3:日志文件系统.宕机时可自动恢复数据资料,容量越大恢复时间越长,且不能保证百分百不丢失.   ext4:e ...

  7. Codeforces 799D Field expansion(随机算法)

    Field expansion [题目链接]Field expansion [题目类型]随机化算法 &题解: 参考自:http://www.cnblogs.com/Dragon-Light/p ...

  8. Linux实现VLAN

    交换机的端口有两种配置模式:Access和Trunk. Access口:端口属于VLAN,VLAN ID 1~4096.直接与计算机网卡相连,流入该口的数据包都被打上VLAN的标签. Trunk口:允 ...

  9. 统计随机数及临界值Web Service接口

    (2017-02-04 银河统计) 统计函数API概念   API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发 ...

  10. axios、ajax、fetch三者的区别

    1.ajax:是指一种创建交互式网页应用的网页开发技术,并且可以做到无需重新加载整个网页的情况下,能够更新部分网页,也叫作局部更新 优缺点: 1)局部更新 2)原生支持,不需要任何插件 3)原生支持, ...