亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

函數指針與軟件設計

2019-11-17 05:25:59
字體:
來源:轉載
供稿:網友
記得剛開始工作時,一位高手告訴我,說,longjmp和setjmp玩得不熟,就不要自稱為C語言高手。當時我半信半疑,為了讓自己向高手方向邁進,還是花了一點時間去學習longjmp和setjmp的用法。后來明白那不單是跳來跳去那樣簡單,而是一種高級的異常處理機制,在某些情況下確實很有用。為了顯示自己的技巧,也在自己的程序中用過幾次。漸漸發現這樣的技巧帶來的好處是有代價的,破壞了程序的結構化設計,程序變得很難讀,尤其對新手來說。終于明白這種技巧不過是一種調味料,在少數情況使用幾次,可以簡化對問題的處理。假如把調味拿來當飯吃,一定會本末倒置,寫出的程序會呈現營養不良之狀。事實上,longjmp和setjmp玩得熟不熟與是不是C語言高手,不是因果關系。但是,假如可以套用那位高手的話,我倒想說假如函數指針玩得不熟,就不要自稱為C語言高手。為什么這么說呢,函數指針有那么復雜嗎?當然不是,任何一個稍有編程常識的人,不管他懂不懂C語言,在10分鐘內,我想他一定可以明白C語言中的函數指針是怎么回事。原因在于,難的不是函數指針的概念和語法本身,而是在什么時候,什么地方該使用它。函數指針不僅是語法上的問題,更重要的是它是一個設計范疇。真正的高手當然不單應該懂得語法層面上的技巧,更應該懂得設計上的方法。不懂設計,能算高手嗎?懷疑我在夸大其辭嗎?那我們先看看函數指針與哪些設計方法有關:分層設計有關。分層設計早就不是什么新的概念,分層的好處是眾所周知的,比較明顯好處就是簡化復雜度、隔離變化。采用分層設計,每層都只需關心自己的東西,這減小了系統的復雜度,層與層之間的交互僅限于一個很窄的接口,只要接口不變,某一層的變化不會影響其它層,這隔離了變化。分層的一般原則是,上層可以直接調用下層的函數,下層則不能直接調用上層的函數。這句話說來簡單,在現實中,下層經常要反過來調用上層的函數。比如你在拷貝文件時,在界面層調用一個拷貝文件函數。界面層是上層,拷貝文件函數是下層,上層調用下層,理所當然。但是假如你想在拷貝文件時還要更新進度條,問題就來了。一方面,只有拷貝文件函數才知道拷貝的進度,但它不能去更新界面的進度條。另外一方面,界面知道如何去更新進度條,但它又不知道拷貝的進度。怎么辦?常見的做法,就是界面設置一個回調函數給拷貝文件函數,拷貝文件函數在適當的時候調用這個回調函數來通知界面更新狀態。抽象有關。抽象是面向對象中最重要的概念之一,也是面向對象威力強大之處。面向對象只是一種思想,大家都知道,用C語言一樣可以實現面向對象的編程。這可不是為了趕時髦,而是一種實用的方法。假如你對此表示懷疑,可以去看看GTK+、linux kernel等開源代碼。接口是最高級的抽象。在linux kernel里面,接口的概念無處不在,像虛擬文件系統(VFS),它定義一個文件系統的接口,只要按照這種接口的規范,你可以自己開發一個文件系統掛上去。設備驅動程序更是如此,不同的設備驅動程序有自己一套不同的接口規范。在自己開發設備開發驅動程序時,只要遵循相應的接口規范就行了。接口在C語言中如何表示?很簡單,就是一組函數指針。接口與實現分開有關。針對接口編程,而不是針對實現編程,此為《設計模式》的第一條設計準則。分開接口與實現的目標是要隔離變化。軟件是變化的,假如不能把變化的東西隔離開來,導致牽一發而動全身,代價是巨大的。這是大家所不愿看到的。C語言既然可以實現面向對象的編程,自然可以利用設計模式來分離接口與實現。像橋接模式、策略模式、狀態模式、代理模式等等,在C語言中,無一不需要利用函數指針來實現。松耦合原則有關。面向過程與面向對象相比,之所以顯得蒼白無力,原因之一就是它不像面向對象一樣,可以直觀的把現實模型映射到計算機中。面向過程講的是層層控制,而面向對象更強調的對象間的分工合作?,F實世界中的對象處于層次關系的較少,處于對等關系的居多。也就是說,對象間的交互往往是雙向的。這會加強對象間的耦合性。
耦合本身沒有錯,實際上耦合是必不可少的,沒有耦合就沒有協作,對象之間無法形成一個整體,什么事也做不了。要害在于耦合要恰當,在實現預定功能的前提下,耦合要盡可能的松散。這樣,系統的一部分變化對其它部分的影響會很少。函數指針是解耦對象關系的最佳利器。Signal(如boost的signal和glib中的signal)機制是一個典型的例子,一個對象自身的狀態可能是在變化的(或者會觸發一些事件),而其它對象關心它的變化。一旦該對象有變化發生,其它對象要執行相應的操作。假如該對象直接去調用其它對象的函數,功能是完成了,但對象之間的耦合太緊了。如何把這種耦合降到最低呢,signal機制是很好的辦法。它的原理大致如下:其它關注該對象變化的對象主動注冊一個回調函數到該對象中。一旦該對象有變化發生,就調用這些回調函數通知其它對象。功能同樣實現了,但它們之間的耦合度降低了。在C語言中,要解決以上這些問題,不采用函數指針,將是非常困難的。在編程中,假如你從沒有想到用函數指針,很難想像你是一個C語言高手。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久热精品视频在线观看一区| 欧美一级片免费在线| 51ⅴ精品国产91久久久久久| 97婷婷大伊香蕉精品视频| 国内揄拍国内精品少妇国语| 国产精品福利久久久| 亚洲www在线观看| 久久久久久久久久久91| 日韩成人在线视频网站| 亚洲免费电影在线观看| 国产精品欧美在线| 日韩视频在线一区| 国产欧美 在线欧美| 日韩av电影中文字幕| 欧美大片网站在线观看| 国产欧美日韩中文字幕| 亚洲国产精品久久久久秋霞不卡| 国产午夜精品理论片a级探花| 97婷婷大伊香蕉精品视频| 国产精品久久久久久久app| 日韩在线视频国产| 成人精品网站在线观看| 日韩精品在线视频美女| 亚洲欧美综合区自拍另类| 亚洲第一福利在线观看| 国内精品久久久久影院优| 国产精品一区二区3区| 久久综合免费视频| 456国产精品| 国产欧美欧洲在线观看| 国产成人在线亚洲欧美| 成人a在线观看| 亚洲精品一区二区网址| 亚洲国产精品va在线看黑人动漫| 久久精品91久久久久久再现| 美女少妇精品视频| 国产日韩欧美黄色| 欧美精品一区三区| 久久久精品在线| 最新亚洲国产精品| 国产欧美欧洲在线观看| 亚洲肉体裸体xxxx137| 精品久久久久久久久中文字幕| 精品视频9999| 久久精品国产视频| 高清日韩电视剧大全免费播放在线观看| 国产91精品久久久久久| 亚洲aa在线观看| 日韩a**站在线观看| 国产精品第1页| 97在线日本国产| 精品久久久久国产| 亚洲一区二区福利| 日韩大片免费观看视频播放| 久久精品亚洲94久久精品| 欧美精品久久一区二区| 国产精品自产拍在线观看中文| 亚洲精品美女在线观看| 日韩在线观看免费| 日韩性生活视频| 亚洲欧美变态国产另类| 欧美最猛性xxxx| 亚洲第一精品自拍| 久久久久久久久91| 日韩亚洲精品电影| 亚洲人成电影网| 亚洲高清久久久久久| 国产精品福利久久久| 国产日韩换脸av一区在线观看| 成人国产在线视频| 亚洲在线第一页| 欧美性猛交xxxx乱大交极品| 日本一区二区三区在线播放| 亚洲精品视频网上网址在线观看| 国产日韩精品在线播放| 国产精品三级久久久久久电影| 91欧美日韩一区| 国产精品第一视频| 中文字幕一区二区精品| 日韩欧美第一页| 日韩性xxxx爱| 91九色综合久久| 亚洲人成欧美中文字幕| 神马久久桃色视频| 成人精品久久av网站| 欧美亚洲另类激情另类| 一区二区三区日韩在线| 欧美麻豆久久久久久中文| 国产成人黄色av| 国产偷国产偷亚洲清高网站| 欧美激情视频三区| 国产成人综合亚洲| 国产福利视频一区| 日韩欧美aⅴ综合网站发布| 久久久久久久国产| 中文字幕亚洲综合久久| 日韩高清有码在线| 国产精品免费视频久久久| 精品久久久国产| 久久久亚洲影院| 久久久极品av| 欧美激情精品久久久久久久变态| 一区二区三区四区在线观看视频| 亚洲欧美国产一区二区三区| 日韩一区视频在线| 亚洲国产日韩一区| 亚洲风情亚aⅴ在线发布| 日韩精品欧美激情| 久久久国产精品视频| 欧美成人在线免费视频| 欧美日韩国产一区在线| 国外视频精品毛片| 日韩精品在线视频观看| 国产成人精品久久亚洲高清不卡| 亚洲老板91色精品久久| 主播福利视频一区| 亚洲福利影片在线| 欧美激情精品久久久久久| 一区二区三区视频免费| 91成人性视频| 国产精品日韩在线一区| 欧美成人性生活| 日韩国产中文字幕| 在线观看日韩专区| 高清欧美性猛交| 国产亚洲一区精品| 国产美女久久精品香蕉69| 久久亚洲欧美日韩精品专区| 中文字幕日韩欧美精品在线观看| 久久久91精品国产| 欧美日本亚洲视频| 久久精品中文字幕电影| 国产精品国产亚洲伊人久久| 91在线免费视频| 国产精品自在线| 一区二区在线视频播放| 久久6免费高清热精品| 成人黄色av网| 91高潮在线观看| 国产成人avxxxxx在线看| 欧美日韩亚洲精品内裤| 奇米一区二区三区四区久久| 欧美美女18p| 成人黄色大片在线免费观看| 国产精品免费看久久久香蕉| 午夜欧美大片免费观看| 成人精品视频在线| 91色中文字幕| 亚洲国产精品va在看黑人| 亚洲欧洲美洲在线综合| 在线播放国产一区中文字幕剧情欧美| 日韩欧美大尺度| 欧美精品电影免费在线观看| 国产亚洲精品激情久久| 欧美午夜激情小视频| 欧美电影免费观看大全| 91久久精品国产| 亚洲片av在线| 国产日韩综合一区二区性色av| 亚洲一区二区三区777| 亚洲欧美一区二区三区四区| 欧美精品videossex88| 亚洲国产成人精品久久久国产成人一区| 91久久精品美女|