人們常把程序稱為計算機(jī)的靈魂。1976年瑞士計算機(jī)科學(xué)家Niklaus Wirth在他的驚世之作中提出了一個著名的公式:
程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu)
從今天的觀點(diǎn)來看,它只能是對過程化程序的一個抽象定義,對面向?qū)ο蟮某绦蚨詣t不盡然。不過對我們學(xué)習(xí)C語言這樣的面向過程的程序設(shè)計語言而言,是完全適用的。同時,C語言也能實(shí)現(xiàn)封裝、繼承、多態(tài)等面向?qū)ο箫L(fēng)格的編程。從個人經(jīng)驗(yàn)來看,當(dāng)我理解用C語言編寫面向?qū)ο蟮娘L(fēng)格的編程案例后,面向?qū)ο缶幊讨凶屓嗣曰蟮哪切┏跏蓟?、this、方法(函數(shù))多層次調(diào)用等概念恍然大悟,再也不感到恐懼和迷惑了。本文主要討論面向過程編程常用的模塊兒化程序設(shè)計思想。
圖1 實(shí)現(xiàn)虛擬機(jī)原理
1、我們在計算機(jī)“大樓”的第幾層
計算機(jī)這個大樓的基礎(chǔ)是量子力學(xué)及半導(dǎo)體物理,自從圖靈提出了理論模型,布爾創(chuàng)立了布爾代數(shù),香農(nóng)的碩士論文證明布爾代數(shù)可以用繼電器的開關(guān)電路實(shí)現(xiàn)之后,隨著晶體管的發(fā)明,計算機(jī)的電路才有可能微型化。計算硬件電路完成以后,還需要軟件的支持,對程序語言的需求就凸顯出來,最早的機(jī)器語言及匯編語言,后來慢慢出現(xiàn)的C, C++這樣的高級語言等非常適合系統(tǒng)級編程,也是近距離觀看和理解編程思想有效手段之一。
圖2 計算機(jī)“大樓”的層次
在圖2中各層具體含義為:1F量子力學(xué)、2F晶體管、3F邏輯電路、4F計算機(jī)體系結(jié)構(gòu)、5F匯編語言、6F高級語言、7F應(yīng)用程序。從這點(diǎn)可以看出,作為高級語言的C/C++在第六層(6F)。其中第三層(3F邏輯電路,即布爾代數(shù)可以用繼電器的開關(guān)電路實(shí)現(xiàn))是我們連接軟件世界和電路(電子或電氣)世界必經(jīng)之路。工業(yè)和自控領(lǐng)域,繼電器是理解二次側(cè)回路和低壓電路的必備概念,在后續(xù)文章中進(jìn)一步討論。
2、模塊兒化程序設(shè)計
模塊化程序設(shè)計就是進(jìn)行大型程序設(shè)計的一種有效措施。其基本思想是將一個大的程序按功能進(jìn)行分割成一些模塊,使每一個模塊都成為功能單一、結(jié)構(gòu)清晰、接口簡單、容易理解的小程序。C語言是一種提供如下一些支持模塊化軟件開發(fā)的功能:
(1)函數(shù)式的程序結(jié)構(gòu):程序整體由一個或多個函數(shù)組成。每個函數(shù)都具有各自獨(dú)立的功能和明顯的界面。
(2)允許通過使用不同存儲類別的變量,控制模塊內(nèi)部及外部的信息交換。
(3)具有編譯預(yù)處理功能,為程序的調(diào)試、移植提供了方便,也支持了模塊化程序設(shè)計。
無論涉及的問題是復(fù)雜還是簡單,規(guī)模是大還是小,用C語言設(shè)計程序,任務(wù)只有一種,就是編寫函數(shù),至少也要編寫一個main()函數(shù)。對新手來說,無論面向過程還是面向?qū)ο蟮木幊?,最終的難點(diǎn)在于函數(shù)編寫(一般在面向?qū)ο缶幊讨薪凶龇椒ǎ?。因此?strong>編寫程序關(guān)鍵點(diǎn)在于將復(fù)雜問題分解成多個函數(shù)或?qū)ο蠛?,逐步編寫其中的運(yùn)算操作語句和流程控制語句。
執(zhí)行C程序就是執(zhí)行相應(yīng)的main()函數(shù)。即從它的main()函數(shù)的第一個前花括號開始,依次執(zhí)行后面的語句,直到最后的后花括號為止。其它函數(shù)只有在執(zhí)行main()函數(shù)的過程中被調(diào)用時才執(zhí)行。如圖3所示:
圖3 將功能改為函數(shù)的過程
3、重新理解編程中的函數(shù)
高級語言中“函數(shù)”的概念和數(shù)學(xué)中“函數(shù)”的概念不完全相同。在英語中“函數(shù)”與“功能”是同一個單詞即function。高級語言中的“函數(shù)”實(shí)際上是“功能”的意思。當(dāng)需要完成某一個功能時,就用一個函數(shù)(可以是標(biāo)準(zhǔn)庫函數(shù)或自己設(shè)計的函數(shù))去實(shí)現(xiàn)它。在進(jìn)行程序設(shè)計時,我們先集中考慮main()函數(shù)中的算法(相當(dāng)于做事情前后順序和處理步驟)。當(dāng)main()中需要使用某一功能時,我們就先寫上一個調(diào)用具有該功能的函數(shù)的表達(dá)式(或后綴為括號的具體函數(shù)名稱)。這時的函數(shù)相當(dāng)于一個黑盒子,如圖4所示。
圖4 函數(shù)代表著具有輸入輸出接口系統(tǒng)或黑盒子
我們只須知道它具有什么功能或作用,如何與程序通信(輸入什么,返回什么),別的東西我們先不去處理它。圖4好比“信號與系統(tǒng)”課程中的“系統(tǒng)”的抽象,但函數(shù)代表的系統(tǒng)輸入和輸出不是信號而是數(shù)據(jù)(當(dāng)然信號也能用數(shù)據(jù)標(biāo)識)。
如同設(shè)計一部機(jī)器一樣,當(dāng)需要在某處使用一個部件時,我們就先把它畫上,并標(biāo)明它的功能以及安裝方法,至于如何制造先不用考慮,因?yàn)橐苍S它可以直接購買來。設(shè)計完main()的算法并檢驗(yàn)無誤后,我們開始考慮它所調(diào)用的函數(shù)。在這些被調(diào)用的函數(shù)中,若在庫函數(shù)中可以找到(像制造機(jī)器時,庫房中已有的零部件),那就直接使用,否則再動手設(shè)計這些函數(shù)。這樣設(shè)計的程序從邏輯關(guān)系上就形成圖5所示的層次結(jié)構(gòu)。
圖5 C語言程序的層次結(jié)構(gòu)
這個層次結(jié)構(gòu)的形成是自頂向下的。這種方法稱為自頂向下、逐步細(xì)化的程序設(shè)計方法。這種方法允許人在進(jìn)行程序設(shè)計時, 每個階段都能集中精力解決只屬于當(dāng)前模塊的算法,暫不考慮與之無關(guān)的細(xì)節(jié), 從而能保證每個階段所考慮的問題都是易于解決的,設(shè)計出來的程序成功率高,而且程序?qū)哟畏置鳌⒔Y(jié)構(gòu)清晰。
4、結(jié)束語
函數(shù)不僅代表功能,也可以代表人或其他任何對象的抽象。一個部門的組織架構(gòu)也用一個C語言多層次函數(shù)來描述。一個職責(zé)和任務(wù)沒有劃分清楚組織架構(gòu)就像一個設(shè)計不合格的程序結(jié)構(gòu)。許多大型軟件系統(tǒng)包含了相當(dāng)豐富的功能,意味著需要編寫相當(dāng)數(shù)量的函數(shù)來實(shí)現(xiàn)可供從事某種領(lǐng)域工作的人員使用。比如說,數(shù)據(jù)中心基礎(chǔ)設(shè)施大致上可分為電源、電氣、暖通、弱電、消防(氣消)、裝修、自控、柴油發(fā)電機(jī)組等。為了建設(shè)方方便,我們也可以將部分功能放到機(jī)房工程模塊里。因此,怎么的劃分各功能模塊及其接口是某種程度上決定著軟件系統(tǒng)性能、可擴(kuò)展性和靈活性。
-
計算機(jī)
+關(guān)注
關(guān)注
19文章
7721瀏覽量
92254 -
布爾代數(shù)
+關(guān)注
關(guān)注
0文章
11瀏覽量
7983 -
半導(dǎo)體物理
+關(guān)注
關(guān)注
0文章
5瀏覽量
6716
發(fā)布評論請先 登錄
模塊化程序
VerilogHDL模塊化程序設(shè)計
嵌入式模塊化程序設(shè)計的相關(guān)資料分享
C語言模塊化程序設(shè)計理解
C語言模塊化程序設(shè)計需理解哪些呢
嵌入式系統(tǒng)的微模塊化程序設(shè)計有何作用
C語言指針用作函數(shù)參數(shù)模塊化程序設(shè)計以及增量測試方法的程序

嵌入式軟件開發(fā)之模塊化程序設(shè)計(三)

c++程序設(shè)計_基于proteus的51單片機(jī)開發(fā)實(shí)例30-模塊化程序設(shè)計

模塊化程序設(shè)計案例DCIM-3

評論