色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    瀏覽量

    915

原文標題:周立功:敏捷軟件開發的基本原則——開閉原則(OCP)

文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    SOLID設計原則

    設計原則(SOLID)使用各個原則的首字母組成了一個單詞:SOLID。SRP:Single Responsibility Principle,單一職責原則OCP:Open Close
    發表于 11-08 07:44

    單片機程序中的六個設計原則分別是哪些

    片頭在上一篇文章中已經介紹了“單一職責原則”在單片機程序中的使用,并以“環形緩存”作為介紹切入點,因為“環形緩存”在應用中比較多,所以在介紹“開閉原則”時依然以它作為介紹切入點。六個設
    發表于 03-01 06:06

    《C/ C++/ Java 程序設計經典教程》

    《C/ C++/ Java 程序設計經典教程》(Deitel 著) ●集作者幾十年程序設計經驗精華,從軟件工程的原理強調結構化程序設計方法,追求
    發表于 04-08 02:10 ?398次下載

    JAVA程序設計教程

    JAVA程序設計教程
    發表于 04-10 14:46 ?0次下載
    JAVA<b class='flag-5'>程序設計</b><b class='flag-5'>之</b>教程

    PIC單片機學習知識程序設計(二)

    上文中我們講述了PIC單片機基礎學習程序設計(一),接下來將繼續為大家講解PIC單片機程序設計(二),供大家學習。
    發表于 06-27 11:50 ?5928次閱讀

    DSP基帶碼發生器程序設計與仿真

    DSP基帶碼發生器程序設計與仿真,很好的DSP自學資料,快來學習吧。
    發表于 04-15 17:42 ?4次下載

    DSP頻率計程序設計與仿真

    DSP頻率計程序設計與仿真,很好的DSP自學資料,快來學習吧。
    發表于 04-15 17:42 ?6次下載

    面向對象的程序設計總結與過程化程序設計有什么區別?

    面向對象程序設計(簡稱OOP)技術最近幾年在計算機領域得到了迅猛發展,它是程序設計方法的一場革命。與傳統的結構化程序設計(面向過程程序設計
    發表于 09-19 14:12 ?0次下載
    面向對象的<b class='flag-5'>程序設計</b>總結與過程化<b class='flag-5'>程序設計</b>有什么區別?

    Java程序設計Java安全技術網絡編程的詳細資料說明

    本文檔詳細介紹的是Java程序設計Java安全技術網絡編程的詳細資料說明主要內容包括了:1 安全基本知識 ,2 Java的安全模型 ,3 Java的密碼學結構
    發表于 02-26 14:15 ?6次下載
    Java<b class='flag-5'>程序設計</b><b class='flag-5'>之</b>Java安全<b class='flag-5'>技術</b>網絡編程的詳細資料說明

    單片機C語言程序設計實例雙向來回的流水燈

    本文檔的主要內容詳細介紹的是單片機C語言程序設計實例雙向來回的流水燈免費下載。
    發表于 02-01 16:45 ?14次下載
    單片機C語言<b class='flag-5'>程序設計</b>實例<b class='flag-5'>之</b>雙向來回的流水燈

    單片機C語言程序設計實例閃爍的LED

    本文檔的主要內容詳細介紹的是單片機C語言程序設計實例閃爍的LED程序和工程文件免費下載。
    發表于 02-01 16:45 ?5次下載

    《嵌入式軟件設計方法》--設計原則

    設計原則(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次下載

    高質量程序設計指南C++C語言

    高質量程序設計指南C++C語言
    發表于 01-07 11:46 ?0次下載

    c語言程序設計概述

    電子發燒友網站提供《開源硬件-開發者智慧c語言程序設計(帶書簽).pdf》資料免費下載
    發表于 11-20 10:25 ?1次下載
    c語言<b class='flag-5'>程序設計</b>概述
    主站蜘蛛池模板: 狂躁美女BBBBBB视频| 四虎永久在线精品国产| 亚洲一区在线观看无码欧美| 国产亚洲精品福利视频| 亚洲精品天堂无码中文字幕影院| 久久国产主播福利在线| 5580免费午夜福利院| 日韩丰满少妇无码内射| 国产免费高清mv视频在线观看| 又大又硬又爽免费视频 | 精品一区二区三区四区五区六区| 2019精品国产品在线不卡| 热99RE久久精品国产| 很很射影院| WWW污污污抽搐喷潮COM| 亚洲精品不卡在线| 女子初尝黑人巨嗷嗷叫| 国产午夜精品理论片| 97国产精品视频在线观看| 天天躁日日躁狠狠躁午夜剧场| 久久日韩精品无码一区| 丰满的寡妇hd高清在线观看| 中文字幕亚洲乱码熟女在线| 试看2分钟AA片| 美女图片131亚洲午夜| 国产乱码卡二卡三卡4W| 97视频在线播放| 亚洲乱码爆乳精品成人毛片| 欧洲-级毛片内射八十老太婆| 好看AV中文字幕在线观看| 扒开女人下面使劲桶动态图| 野花韩国高清完整版在线观看5 | 最近中文字幕高清中文| 无码任你躁久久久久久久| 嫩草国产精品99国产精品| 极品少妇高潮啪啪AV无码吴梦梦| 成人18视频在线观看| 2022国产精品不卡a| 亚洲精品第一页| 手机在线观看mv网址| 碰超成人在线公开免费视频|