7.10 其他面向对象设计原则1: 开-闭原则OCP
其他面向对象设计原则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的更多相关文章
- 设计原则:开-闭原则(Open-Closed Principle, OCP)
开-闭原则就是软件实体应当对扩展开放,对修改关闭.(Software entities should be open for extension,but closed for modification ...
- 设计原则:开闭原则(OCP)
1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...
- C# 实例解释面向对象编程中的开闭原则
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...
- Java设计模式(1:软件架构设计七大原则及开闭原则详解)
前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,笔主特别开了这个博客来记录自己学习的 ...
- js 的七大原则--单一原则、开闭原则、替换原则(一)
一.前言: js 的七大设计原则: 1.单一原则 2.开闭原则 3.里氏替换原则 4.依赖倒转原则 5.接口隔离原则 6.合成复用原则 7.迪米尔法则 二.单一原则 1.定义:单一原则就是一个对象或者 ...
- Java的开发—面向对象的7大原则之开闭原则(一)
开闭原则(Open Close Principle) 一.定义: 软件中的(类.模块.函数等等)应该对于扩展是开放的,对于修改时关闭的.意味着一个实体允许在不改变它的源代码的前提变更它的行为 这里的软 ...
- 最简单直接地理解Java软件设计原则之开闭原则
写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...
- S.O.L.I.D: PHP 面向对象设计的五个基准原则
S.O.L.I.D 是首个 5 个面向对象设计 (OOD) 准则的首字母缩写,这些准则是由 Robert C. Martin 提出的,他更为人所熟知的名字是 Uncle Bob. 这些准则使得开发出易 ...
随机推荐
- :after和:before 伪类
1 使用伪类画三角形 .div{ margin-top: 100px; margin-left: 100px; } .div:after{ content: ''; display:inline-bl ...
- TZOJ:3660: 家庭关系
描述 给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系. 输入 输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100), ...
- java框架之SpringBoot(16)-分布式及整合Dubbo
前言 分布式应用 在分布式系统中,国内常用 Zookeeper + Dubbo 组合,而 SpringBoot 推荐使用 Spring 提供的分布式一站式解决方案 Spring + SpringBoo ...
- Tomcat不加项目名称访问设置
一.Tomcat不加项目名称访问设置 一.方法一:修改配置文件server.xml 1.修改配置文件server.xml <Host appBase="webapps" au ...
- Linux下批量杀掉筛选进程
在做项目的时候,由于情况要求,需要把服务器上符合某一条件的进程全部kill掉,但是又不能使用killAll直接杀掉某一进程名称包含的所有运行中的进程(即我们可能只需要杀掉某一类含有特定参数命令的进程) ...
- 使用Navicat定时备份mysql数据库和创建报表并邮件自动发送
数据库备份在现代计算机高速发展的今日变得日益重要,程序员往往因为不重视而忽略备份数据,导致数据丢失,造成非常严重的后果.定时备份无疑是解决备份的最好的途径,本文主要使用Navicat来自动备份数据库和 ...
- docker 启动失败
今天本来想抽空弄一下openshift,新装了个centos结果docker起不来. 报错内容: [root@master docker]# systemctl status docker.servi ...
- Dockfile基本语法
FROM 功能为指定基础镜像,并且必须是第一条指令. 如果不以任何镜像为基础,那么可写为:FROM scratch. 接下来所写的指令将作为镜像的第一层开始. 格式: FROM <image&g ...
- 常用git命令总结 初始化git库操作 git 子模块
查看 git status 查看状态 Gitk 界面各个版本查看 添加 Git add filename 添加指定文件 Git add . 操作未暂存的文件 Git add -A 操作所有文件 包括删 ...
- HTML5中 audio标签的样式修改
由于html5的流行,现在移动端大多数的需求都可以使用audio来播放音频,但您可能只是需要很简单的播放/停止效果,但不同的浏览器上的audio样式却不尽人意,那么要怎么改变这个样式呢,其实它的原理比 ...