0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

程序设计技术之开闭原则(OCP)

AGk5_ZLG_zhiyua 来源:未知 作者:佚名 2017-09-14 14:49 次阅读

周立功教授数年之心血之作《程序设计与数据结构》以及《面向AMetal框架与接口编程(上)》,书本内容公开后,在电子行业掀起一片学习热潮。经周立功教授授权,本公众号特对《程序设计与数据结构》一书内容进行连载,愿共勉之。

第二章为程序设计技术,本文为2.4.3 开闭原则(OCP)

>>> 2.4.3 开闭原则(OCP)

开闭原则(Open-Closed Princple,OCP)就是敏捷软件开发的基本原则之一,一个模块应该“对扩展开放,而对修改关闭。”比如,一个USB端口可以扩展,但不需要做任何修改就可以接受一个新的设备,因此,对于USB应用设备来说,一台有USB端口的计算机是扩展开放而对修改关闭的。当设计遵循OCP原则时,它可以通过增加新的代码来进行扩展,而不是修改已有的代码。比如,即使某个模块的内部实现改变了,但对外的接口也不能变,其目的是隔离变化。OCP通常要求我们对软件进行抽象,因为只有具有共性的抽象的接口,才会有具体的实现的可能性。接口放在哪里呢?应该放在用户端,而不是实现的一方。

假设只允许将0~9之内的value值push到栈中,即min=0,max=9。根据OCP原则,需要编写一个调用push()功能的函数pushWithRangeCheck()。将其共性——范围值的合法性判断包含在函数体内,而可变的value值、min和max通过形参应对。其函数原型为:

如果value值非法,则返回false;如果value值合法,则调用push()。此时,如果栈不满,则返回true,否则返回false,详见程序清单 2.36。

程序清单 2.36 范围值校验器范例程序(1)

由此可见,如果正确地应用OCP,那么以后再进行同样的改动时,则只需要添加新的代码,而不必改动已经正常运行的代码。如果仅需1-2种校验器,则上述方法非常简单明了。当需要组合多种校验器一起使用时,则上述方法传递的参数太多,而且每次push时,都要传递允许的范围参数。如果将min和max分离出来成为一个Range类型结构体,即可避免以上问题:

根据OCP开闭原则,需要再编写一个扩展push功能的pushWithRangeCheck(),范围值校验器范例程序详见程序清单 2.37。

程序清单 2.37范围值校验器范例程序(2)

如果再添加一个奇偶校验器,则需要判断push到栈中的数据是否为偶数,创建与之相应的OddEven类型结构体如下:

根据OCP开闭原则,还需要再编写一个扩展push功能的pushWithOddEvenCheck()。即:

为了避免用户直接操作成员,则需要定义相应的校验接口函数。即:

由于范围值校验函数和偶数校验函数都有一个指向当前对象的指针,因此可以将特殊的Range *pRange和OddEven *pOddEven泛化为void *pData。即:

无论是范围值校验还是偶数校验,其共性是对输入参数进行校验,因此可以共用一个函数指针。其函数原型如下:

为了便于阅读,如程序清单 2.38所示展示了通用校验器的接口。

程序清单 2.38 通用校验器的接口(validator.h)

尽管无法预知将要支持什么校验器,但调用者知道,因此可以将范围值校验器和奇偶校验器功能分离出来成为单独的函数,编写一个通用的pushWithValidate()函数,通过函数指针调用相应的校验函数,且不用在意具体校验器内部的实现,使用validator.h接口的通用校验器范例程序详见程序清单 2.39。

程序清单 2.39通用校验器范例程序

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开闭原则
    +关注

    关注

    0

    文章

    1

    浏览量

    890

原文标题:周立功:敏捷软件开发的基本原则——开闭原则(OCP)

文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python设计模式六大原则

    ,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。1、开闭原则(Open Close Principle)开闭原则就是说对扩展开
    发表于 05-07 18:10

    SOLID设计原则

    设计原则(SOLID)使用各个原则的首字母组成了一个单词:SOLID。SRP:Single Responsibility Principle,单一职责原则OCP:Open Close
    发表于 11-08 07:44

    单片机程序中的六个设计原则分别是哪些

    片头在上一篇文章中已经介绍了“单一职责原则”在单片机程序中的使用,并以“环形缓存”作为介绍切入点,因为“环形缓存”在应用中比较多,所以在介绍“开闭原则”时依然以它作为介绍切入点。六个设
    发表于 03-01 06:06

    C#程序设计与案例教程

    C#程序设计与案例教程全书共分九章,按C#知识的系统性,由浅入深安排内容,全面介绍了C# 语言基础,面向对象程序设计,GUI程序设计,图形、图像与多媒体,数据库程序设计
    发表于 10-22 11:05 158次下载
    C#<b class='flag-5'>程序设计</b>与案例教程

    java程序设计技巧1001例

    java程序设计技巧1001例通过1001个技巧介绍了面向对象程序设计的各个方面并详细分析了Java程序设计及应用。本书着重介绍2维和3维图形程序设计;如何构造集文本、图形、声音和
    发表于 12-08 11:28 169次下载
    java<b class='flag-5'>程序设计</b>技巧1001例

    DSP程序设计

    DSP程序设计:(1)DSP C语言程序设计(2)C语言与汇编语言混合编程(3)DSP程序烧写13.1 DSP C语言程序设计DSP支持使用ANCI C进行
    发表于 10-27 14:11 67次下载

    单片机应用程序设计技术

    本内容提供了单片机应用程序设计技术的修订版,欢迎大家下载参阅
    发表于 04-22 19:38 1139次下载
    单片机应用<b class='flag-5'>程序设计</b><b class='flag-5'>技术</b>

    C程序设计(王丽娟)

    C程序设计PPT教程 详细介绍C程序设计,有需要的朋友下来看看
    发表于 12-23 11:01 0次下载

    第2章 程序设计基础

    全国C语言考试公共基础知识点——程序设计基础,该资料包含了有关程序设计基础的全部知识点。
    发表于 03-28 15:20 0次下载

    简单的C程序设计教程之顺序程序设计的资料概述

    本文档的主要内容详细介绍的是简单的C程序设计教程之顺序程序设计的资料概述。
    发表于 11-16 16:17 4次下载
    简单的C<b class='flag-5'>程序设计</b>教程之顺序<b class='flag-5'>程序设计</b>的资料概述

    JAVA程序设计教程之JSP程序设计实验

    本文档的主要内容详细介绍的是JAVA程序设计教程之JSP程序设计实验。
    发表于 11-05 15:34 6次下载
    JAVA<b class='flag-5'>程序设计</b>教程之JSP<b class='flag-5'>程序设计</b>实验

    嵌入式技术应用系列—Lua程序设计{第4版)

    嵌入式技术应用系列—Lua程序设计{第二版)
    发表于 10-11 09:14 0次下载

    《嵌入式软件设计方法》--设计原则

    设计原则(SOLID)使用各个原则的首字母组成了一个单词:SOLID。SRP:Single Responsibility Principle,单一职责原则OCP:Open Close
    发表于 11-03 15:36 12次下载
    《嵌入式软件设计方法》--设计<b class='flag-5'>原则</b>

    C语言程序设计第四讲结构化程序设计之选择

    C语言程序设计第四讲结构化程序设计之选择
    发表于 12-22 10:34 0次下载

    单片机应用程序设计技术(教材)

    单片机应用程序设计技术_周航慈,是介绍单片机原理与程序开发设计技术的图书。
    发表于 04-20 15:17 11次下载