《計算思維導論:程序設計思想與方法》——第4章:模塊化編程

在控制結構這個層次上考慮程序設計,必然因兩個方面的複雜性二導致編程困難:一是在廣度上有成千上萬的代碼,二是在深度上有多層嵌套的控制結構。

4.1 模塊化編程基本概念
4.1.1 模塊化設計概述
  1. 模塊是指提供特定功能的相對獨立的單元。模塊一般具有如下特徵:
  • 標準化:模塊是具有標準尺寸和標準接口的預製功能單元,這是組裝、互換等特徵的基礎。
  • 可組裝:多個模塊可以方便、靈活地組合、配置,以構造不同大小、不同形狀、不同功能地系統。
  • 可替換:通過用一個模塊去更換另一個模塊,可以改變系統的局部功能而不影響系統的其他部分。
  • 可維護:可以對模塊進行局部修改或設置,以滿足用戶的需求。另外可以在現有的系統中增加新模塊,以擴展系統功能。
4.1.2 模塊化編程
  1. 模塊化編程是一種軟件設計技術,它將軟件分解爲若干獨立的、可替換的、具有預定功能的模塊,每個模塊實現一個功能,各模塊通過接口(輸入輸出部分)組合在一起,形成最終程序。
  2. 模塊化編程具有以下優點:
  • 易設計:較大的複雜問題分解爲若干較小的簡單問題;
  • 易實現:模塊化設計適合團隊開發,因爲每個團隊成員不需要了解系統全貌,只需關注所分配地小任務。
  • 易測試:每個模塊不但可以獨立開發,也可以獨立測試,最後組裝時再進行聯合測試。
  • 易維護:如果需要修改系統或擴展功能,只需針對特定模塊進行修改或者添加新模塊。
  • 可重用:很多模塊的代碼都可以不加修改地用於其他程序的開發。
  1. 模塊化編程實際上時一條抽象設計原則的具體體現,即分離關注點(Separation of Concerns,縮寫SoC)原則。
4.1.3 編程語言對模塊化編程的支持
  1. 子程序是指程序中的一段代碼,它執行特定任務,並且與同一程序中的其他部分是相對獨立的。
  2. 子程序構造一般涉及以下一些內容:
  • 子程序的創建:定義子程序的名字和代碼(程序體)
  • 子程序的調用和返回:調用就是要求執行子程序,而子程序執行完畢應當將控制返回給調用者。
  • 參數:相當於子程序所需的輸入數據,一般需要預先聲明參數的類型和個數,並在調用時提供具體的參數值。
  • 返回值:相當於子程序的輸出數據,一般需要預先聲明返回值的類型。
  • 局部變量:子程序定義的變量在子程序外部是不可見的,亦即子程序構成了一個私有名字空間。這是子程序獨立性的一種表現。
  • 全局變量:子程序外部定義的變量如果被聲明爲全局變量,那麼所有子程序都可以共享使用、操作該變量。
4.2 Python語言中的函數
4.2.1 用函數減少重複代碼
4.2.2 用函數改善程序結構
4.2.3 用函數增強程序的通用性
4.2.4 小結:函數的定義與調用

在這裏插入圖片描述
函數掉用的語法:
在這裏插入圖片描述

  1. 當Python遇到一個函數調用時,將通過四個步驟來處理這個調用。
  • (1)調用者P在調用點暫停執行(術語稱爲P掛起);
  • (2)函數f的形式參數被賦予實際參數a的值;
  • (3)執行f的函數體;
  • (4)f執行完畢後,控制返回到P中調用點的下一條語句。
  1. 關鍵字參數
    函數調用時的參數傳遞通常採用上述“按位置匹配”的方式,但Python還提供另一種參數傳遞方式——關鍵字參數。關鍵字參數形如“<形參名>==<實參值>”。
  2. 如果一個函數有很多參數,但是調用時只想爲個別參數傳遞值,而其他參數採用缺省值,這時採用關鍵字參數就是必然的選擇。
4.2.5 變量的作用域
  • 局部變量:
    在一個函數中定義的變量稱爲局部變量(local variable),因爲它們的作用域侷限於該函數的函數體,在函數外部是沒有定義的。
    函數的形參也可以看作是函數的局部變量,即只能在函數體內訪問。
  • 全局變量
    函數體中包含一條聲明全局變量的語句:global x
    意爲函數中所使用的x是在函數外部定義的全局變量。
4.2.6 函數的返回值
  1. 函數輸出的計算結果爲函數的返回值(returned value)
4.3 自頂向下設計
  1. 自頂向下設計稱爲逐步求精(stepwise refinement),是將一個系統逐層分解爲子系統的設計過程。
  2. 自頂向下設計具有兩個特徵:第一,要求設計者一開始就對整個系統有清楚的理解,否則第一步的分解就無法進行;第二,任何子系統在足夠細化之前無法開始編碼實現,因而必須等到所有子系統都足夠細化,才能夠對系統編碼實現及測試。
4.3.1 頂層設計
4.3.2 第二層設計
4.3.3 第三層設計
4.3.4 第四層設計
4.3.5 自底向上實現域單元測試
  1. 自頂向下設計是創建層次化的模塊結構的過程。從結構圖的底層開始實現每個函數,然後上一層模塊自然得到實現。
  2. 在模塊化編程中,測試程序最適合採用單元測試技術,即先分別測試每一個模塊,然後再逐步測試較大的模塊,直至最後測試完整程序。
4.3.5 開發過程小結
  1. 自頂向下設計過程可以概括爲以下四個步驟:
  • (1)將問題分解爲若干個子問題;
  • (2)爲每個子問題設計一個函數接口
  • (3)將原問題的算法用各子問題對應的函數接口來表達;
  • (4)對每個子問題重複(1)~(3)的過程。
4.4 Python模塊
4.4.1 模塊的創建和使用
  1. 模塊作爲程序的結構單元,至少有三個作用:
  • (1)代碼重用
  • (2) 名字空間
  • (3)實現共享
  1. Python模塊很容易創建,只要使用任意的文本編輯器,鍵入一些Python語句並保存爲.py文件,就得到一個Python模塊。
  2. 爲了使用Python模塊中定義的對象,必須用import或from語句導入模塊。
4.4.2 Python程序架構

在這裏插入圖片描述

4.4.3 標準庫模塊
  1. 標準庫並不是Python語言本身的一部分,而是專業程序員預先編好並隨語言提供給用戶使用的。
  2. Python的標準安裝都會自動安裝標準庫。
  3. 在Python解釋器提示符下鍵入help(),可以進入聯機幫助環境。
4.4.4 模塊的有條件執行
  1. 有些Python模塊是可以直接執行的,稱爲程序或腳本。
  2. 如果是用import導入模塊,Python會將該模塊的一個特殊變量__name__的值設置爲模塊的名字。但是如果直接執行模塊,Python則將模塊的特殊變量__name__設置爲字符串’main’。因此可以通過特殊變量__name__的值來判斷模塊是被導入的還是直接執行的。
  3. 將程序文件的最後一行寫爲:
    if name==‘main’:
    main()
    就能確保當程序是直接執行時,main能啓動;被導入時忽略main。
4.5 練習

書籍下載地址:https://download.csdn.net/download/qq_37590544/10959608

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章