程式的分解過程

2022-01-13 10:14:39 字數 1164 閱讀 5619

一、主函式

乙個程式解決乙個問題。

那麼就可以用乙個主函式解決這個問題。

二、子程式

這個函式會變得很長,讀起來很辛苦,咋辦?分解成若干子程式,讓主函式呼叫他們。那麼怎麼劃分?基於什麼原則?

子程式的劃分,基於邏輯層次;閱讀是基於一定層次的,比如事件的概要和事件的細節的差別;文章的目錄和文章的內容的區別;要想快速的了解一件事,只需要知道概要便可以。主函式就是記錄概要的地方,而子程式是具體的內容;假如子程式還是太複雜,那麼還能細分成子子程式,由子程式在它的層面上去提取概要資訊。

是否可以無限的細分下去?直到子程式變得足夠簡單?最好不要!子程式是乙個片段,相當於把乙個完整的流程給片面化,那麼這個子程式本身就是難以理解的。細分太多,要了解完整的流程就變得異常困難。因此,層次最好不要超過三層。

另外一點,程式不是以其長短來決定是否應該劃分成子程式的,而是以是否存在邏輯層次的界線來劃分子程式;如果從認識上、理解上都是乙個層面的內容,那麼就算再長也沒有必要分成若干小節的子程式。

三、函式

比子程式更好的辦法是用子函式去細分主函式。子程式之所以難以理解,在於它自身並不是獨立的,而是主流程的乙個片段,而函式是獨立的,只依賴於引數(這是和子程式的區別)。不管在什麼層面上,用相同的引數呼叫函式都是得到相同的結果,它是獨立的,上下文無關的。但是這種獨立性也是需要代價的,函式比子程式要難寫,要具備更加整體的思維,對輸入輸出有更準確的把握。函式也無法完全的代替子程式,因為函式是基於引數抽象的,而子過程是主流程的概要,兩種思維模型有差異,很難一一對應起來。

四、抽象資料型別

當子函式變得過多,就會發現,函式不過是圍繞引數做工作的工具。這些引數就是一組資料,一組狀態,而且這些狀態對應著若干個函式,是一對多的關係,因此這些對應的若干個函式就相當於圍繞這個狀態組合的工具,出現明顯的主從關係。通過抽象資料型別,把相關的引數合併為乙個型別,然後關聯操作他們的函式,得到乙個穩固的抽象體。這進一步優化了程式的結構。

五、物件

抽象資料型別的進化就是物件,物件對狀態做進一步的封裝,讓外界無法直接運算元據,從而加強其獨立性。

六、物件導向

完善的利用物件的理論,就是物件導向。物件導向確定了三件事:1、建立物件的標準;2、操作物件的介面;3、物件間互動通訊的方式。物件導向最本質的特徵,是分離了介面和實體。基於物件導向方式的程式,可以不修改使用者**的情況下,增加不同的實現個體,從而正式劃分了服務物件和使用者物件的區別。

Gcc編譯過程分解

我們都知道,hello world 程式是程式設計師的啟蒙語句,它的編譯過程一氣呵成,但是它的具體編譯過程是什麼呢?在編譯果程中做了什麼?在linux下,當我們使用gcc來編譯 hello world 程式時,只需使用最簡單的命令 假設源 檔名為hello.c gcc hello.c a.out 事...

程式分解以及Makefile 編寫

開始時程式 ngnsvr9 none home xionghailong c cat orig.cpp include using namespace std struct node node addnode node p list,int value void printlist const no...

程式執行過程

要理解乙個程式的執行過程,首先要理解什麼是編譯器。我們用c語言寫的程式,計算機只能識別機器語言 二進位制指令 計算機並不能理解。因此,必須 將c語言轉換為機器語言。編譯器就是用來實現這一功能的。編譯器將源 檔案按照一定的對應規則映射程計算機能夠識別的二進位制指令 關於原始檔 目標檔案和可執行檔案 原...