其他面向对象设计原则1: 开-闭原则OCP
   Open-Closed Principle (OCP)
5.1 设计变坏的前兆 Signs of Rotting Design

   僵硬性 Rigidity

     难以更改代码 code difficult to change

     从管理角度,拒绝任何的变化成为一种制度

      management reluctance(拒绝) to change anything becomes policy

     易碎性 Fragility

       即使是小小的改动也会导致级联性的后果的 even small changes can cause cascading effects

       代码在意想不到的地方终止 code breaks in unexpected places

     固定性 Immobility

       代码纠缠在一起根本不可能重用 code is so tangled(纠结) that it's impossible to reuse anything

     黏滞性 Viscosity

       宁愿重新编写也不愿意修改 much easier to hack(乱砍) than to preserve original design
5.2 设计变坏的原因 Causes of Rotting Design

   需求不停地变化 Changing Requirements

     这是不可避免的 is inevitable

     I. Jacobson, OOSE, 1992说,“所有的系统在其生命周期都在发生变化, 如果拟开发的系统生命期多

    于一个版本的话,就必须记住这一点”

    All systems change during their life-cycles. This must be borne in mind when

    developing systems expected to last longer than the first version"

   设计的问题:“依赖管理”失衡

     导致高耦合、低内聚
5.3 开闭原则 Open-Closed Principle (OCP)

   软件系统在其生命周期都在发生变化

     无论是好的设计还是坏的设计,都面临着这个问题 both better designs and poor designs have to

      face the changes

     但好的设计是稳定的 good designs are stable

   开-闭原则

     软件系统应当允许功能扩展(即开放性)Software entities should be open for extension,

     但是不允许修改原有的代码(即关闭性)but closed for modification (OCP)

   遵循开-闭原则的模块符合下列准则

     Open for Extension – 可以扩展行为以满足新的需求

     CLosed for Modification – 但不允许修改模块的源代码

      the source code of the module is not allowed to change
5.5 OCP的启发 Heuristics
   修改公有的数据,经常冒着“打开”模块的风险

    Changes to public data are always at risk to “open” the module

     它们常常会引起涟漪效应,导致许多地方连锁修改

      They may have a rippling effect requiring changes at many unexpected locations

     很难找全出错的地方并修改,一处修改会导致多处又出问题

      Errors can be difficult to completely find and fix. Fixes may cause errors elsewhere
  1)定义所有的对象 - 数据为私有的 Make all object-data private

  2)不要使用全局变量 No Global Variables!
5.7 小结

   OCP解决软件的僵硬性和易碎性 attacks software rigidity and fragility!

     When one change causes a cascade of changes

   OCP 宣言

     我们应当尝试设计永远不需要修改的模块

      we should attempt to design modules that never need to be changed

     系统行为的扩展只需要增加新的代码,不能修改已有的代码

      extend the behavior of the system by adding new code. We do not modify old code

     模块不允许修改已有的代码,而这种修改会影响客户端

       the module is closed to modification in ways that affect clients

7.10 其他面向对象设计原则1: 开-闭原则OCP的更多相关文章

  1. 设计原则:开-闭原则(Open-Closed Principle, OCP)

    开-闭原则就是软件实体应当对扩展开放,对修改关闭.(Software entities should be open for extension,but closed for modification ...

  2. 设计原则:开闭原则(OCP)

    1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...

  3. C# 实例解释面向对象编程中的开闭原则

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...

  4. Java设计模式(1:软件架构设计七大原则及开闭原则详解)

    前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,笔主特别开了这个博客来记录自己学习的 ...

  5. js 的七大原则--单一原则、开闭原则、替换原则(一)

    一.前言: js 的七大设计原则: 1.单一原则 2.开闭原则 3.里氏替换原则 4.依赖倒转原则 5.接口隔离原则 6.合成复用原则 7.迪米尔法则 二.单一原则 1.定义:单一原则就是一个对象或者 ...

  6. Java的开发—面向对象的7大原则之开闭原则(一)

    开闭原则(Open Close Principle) 一.定义: 软件中的(类.模块.函数等等)应该对于扩展是开放的,对于修改时关闭的.意味着一个实体允许在不改变它的源代码的前提变更它的行为 这里的软 ...

  7. 最简单直接地理解Java软件设计原则之开闭原则

    写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...

  8. 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...

  9. S.O.L.I.D: PHP 面向对象设计的五个基准原则

    S.O.L.I.D 是首个 5 个面向对象设计 (OOD) 准则的首字母缩写,这些准则是由 Robert C. Martin 提出的,他更为人所熟知的名字是 Uncle Bob. 这些准则使得开发出易 ...

随机推荐

  1. :after和:before 伪类

    1 使用伪类画三角形 .div{ margin-top: 100px; margin-left: 100px; } .div:after{ content: ''; display:inline-bl ...

  2. TZOJ:3660: 家庭关系

    描述 给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系. 输入 输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100), ...

  3. java框架之SpringBoot(16)-分布式及整合Dubbo

    前言 分布式应用 在分布式系统中,国内常用 Zookeeper + Dubbo 组合,而 SpringBoot 推荐使用 Spring 提供的分布式一站式解决方案 Spring + SpringBoo ...

  4. Tomcat不加项目名称访问设置

    一.Tomcat不加项目名称访问设置 一.方法一:修改配置文件server.xml 1.修改配置文件server.xml <Host appBase="webapps" au ...

  5. Linux下批量杀掉筛选进程

    在做项目的时候,由于情况要求,需要把服务器上符合某一条件的进程全部kill掉,但是又不能使用killAll直接杀掉某一进程名称包含的所有运行中的进程(即我们可能只需要杀掉某一类含有特定参数命令的进程) ...

  6. 使用Navicat定时备份mysql数据库和创建报表并邮件自动发送

    数据库备份在现代计算机高速发展的今日变得日益重要,程序员往往因为不重视而忽略备份数据,导致数据丢失,造成非常严重的后果.定时备份无疑是解决备份的最好的途径,本文主要使用Navicat来自动备份数据库和 ...

  7. docker 启动失败

    今天本来想抽空弄一下openshift,新装了个centos结果docker起不来. 报错内容: [root@master docker]# systemctl status docker.servi ...

  8. Dockfile基本语法

    FROM 功能为指定基础镜像,并且必须是第一条指令. 如果不以任何镜像为基础,那么可写为:FROM scratch. 接下来所写的指令将作为镜像的第一层开始. 格式: FROM <image&g ...

  9. 常用git命令总结 初始化git库操作 git 子模块

    查看 git status 查看状态 Gitk 界面各个版本查看 添加 Git add filename 添加指定文件 Git add . 操作未暂存的文件 Git add -A 操作所有文件 包括删 ...

  10. HTML5中 audio标签的样式修改

    由于html5的流行,现在移动端大多数的需求都可以使用audio来播放音频,但您可能只是需要很简单的播放/停止效果,但不同的浏览器上的audio样式却不尽人意,那么要怎么改变这个样式呢,其实它的原理比 ...