模塊化編程粵拼mou4 faai3 faa3 pin1 cing4 [e 1])係一種編程範式,講緊整軟件嗰陣,要將一個程式分做若干個喺功能上互相獨立嘅部份,每個呢啲部分算係一嚿模塊[e 2]。最理想嘅情況係,一嚿模塊就算冇咗其他模塊都可以順利噉運作,做到佢專門負責處理嗰一個功能,唔會輕機[1]

喺實際應用上,軟件工程師製作嘅軟件閒閒哋會有幾千行原始碼,大型啲嘅 project 可能仲會有成上百萬行碼咁多。喺呢個時候,如果軟件工程師唔識得做模塊化,就會令到隻軟件難以打理——想像隻軟件嘅唔同部份高度互相依賴,是但改咗其中一部份,其他部份就即刻軭晒,又或者係其他部份即刻要大執。

模塊化編程嘅諗頭係源自 1960 至 1970 年代嘅[註 1]。而呢個概念喺廿一世紀初廣受採用。一般認為,模塊化編程能夠提升一隻軟件嘅可維護度可讀度,令到冇份製作隻軟件嘅工程師更加容易攞隻軟件去改良、執錯或者調較。

應用技巧

編輯

整體嚟講,模塊化編程可以想像成係盡力將啲程式寫到有以下呢啲特性[2][3]

  • 每一嚿模塊淨係負責做一種功能咁大把,而編程員幫啲模塊改名嘅時候,最好就係個個名都清楚反映功能。
  • 每一嚿模塊都有一列清楚界定咗嘅 input 參數,而除咗呢列 input 之外嚿模塊會接收任何嘅數據
  • 每一嚿模塊都有一列清楚界定咗嘅 output 參數,而除咗呢列 output 之外嚿模塊會出任何嘅數據。
  • 叫一嚿模塊計任何 output 或者做任何其他嘢,嚿模塊只睇收到嘅 input 決定點做嘢,唔准自己去第道攞料。

喺概念上,模塊化編程做嘅係將個程式要解嘅問題dap6散做若干個可以分開噉嚟解嘅細問題,每個細問題由一個模塊嚟處理。每個模塊夠簡單,對人腦嚟講容易思考。事實係做軟件工程嘅人開親 project,第一步好多時就係要諗吓手上嘅問題可以點樣揼散[4],而且佢哋仲往往會每個模塊都有 teamtim1 人專門負責處理,唔同 team 嘅編程員會各自噉做自己嘢,到咗最後先至會將啲模塊結合埋一齊,出到想要嗰件成品。

Python 嘅 import module ——「引入模塊」——功能

例如 Python 呢隻程式語言就充滿咗各種嘅「模塊」,想像以下噉嘅簡單原始碼sin 係指正弦[5]

from math import sin   # 由 math 呢個模塊嗰道,引入 sin

print(sin(3)) # 叫部電腦計 sin(3),並且畀個答案出嚟。

好似 math 就係一個好常用嘅 Python 模塊,包含咗好多重要(但唔係簡單加減乘除)嘅數學運算。假設 math 嘅設計完美無誤,編程員可以叫部機直接攞佢哋個 Python 模塊嚟計數,唔使理個模塊運作原理係點(抽象化[e 3])都可以整到有用嘅程式[註 2]。模塊嘅做法令到做軟件工程嘅人可以集中諗自己整緊嗰件嘢嘅運作,幫軟件工程師有效噉應對高複雜度嘅軟件[註 3]

語言支援

編輯
睇埋:函式庫

喺廿一世紀初,主流程式語言都有功能支援模塊化編程。例如 Python 就可以畀用家用一句陳述式import ——嚟自英文引入或者匯入噉解)攞一啲「模塊」嚟用,呢啲模塊可以係個 folderfou1 daa2*4 入便其他 Python 腳本嘅類別或者子程式等。句嘢結合咗兩個功能:去搵用家想要嗰嚿模塊返嚟,然後畀個名佢,等用家可以喺個程式入面召喚嚿模塊[6]

以下呢啲程式語言,都有方法支援模塊化編程:

優同缺點

編輯

模塊化編程被指有好多優點,包括咗[7]:p 10 [8]

  • 可以將每嚿模塊交畀唔同 team 嘅人處理,達致分工
  • 令到啲程式比較易睇。可以睇吓易讀度[e 4]嘅概念。
  • 個程式出問題嗰陣,編程小組可以輕易搵到係邊道有問題。可以睇睇可維護度[e 5]嘅概念。
  • 每嚿模塊能夠獨立運作,第時可以攞去喺第啲 project 嗰道翻用。可以睇睇可翻用度[e 6]嘅概念。

不過,模塊化編程亦都有人批評,例如有人指出模塊化編程[9]

  • 有陣時會引致成本上升。
  • 「將啲模塊結合埋一齊」呢個過程,可以好撈絞。

等等。

類似概念

編輯

睇埋

編輯

參考

編輯

註解:

  1. 講緊當時開始有人用 modular programming模塊化編程)呢個英文詞彙。打前嘅電腦已經有或多或少用到類似模塊化嘅做法。
  2. Python 嗰啲「模塊」雖然係叫做 module,但同編程範式正式上講嘅模塊概念有啲分別。Python 模塊可以當係模塊概念嘅一種實現形式。
  3. 事實係,「唔好嘗試理解晒所有嘢嘅運作原理,專心諗點樣整想要嘅成品出嚟」噉嘅思路,工程師成日用。

篇文提咗嘅專業詞彙嘅唔同語文版本:

  1. modular programming / modularization
  2. module
  3. abstraction
  4. readability
  5. maintainability
  6. reusability
  7. object-oriented programming,OOP

篇文引用咗以下呢啲文獻同埋網頁

  1. K. L. Busbee & D. Braunschweig. Modular Programming. Rebus community.
  2. Wong,Y. and Sharp, J.,A Specification and Design Methodology Based on Data Flow Principles, in: Sharp, J. ed., Dataflow computing: Theory and Practice, Ablex Publishing, Norwood, 1992, 37-79.
  3. Davis, D., Burry, J., & Burry, M. (2011, July). Untangling parametric schemata: enhancing collaboration through modular programming. In Proceedings of the 14th international conference on Computer Aided Architectural Design, University of Liege, Liege.
  4. The Power of Divide and Conquer: How to Solve Complex Problems Efficiently. Medium.
  5. Lecture 7: Modular Programming: Modules and Signatures. Cornell University Computer Science,佢哋噉樣講:"When a program is small enough, we can keep all of the details of the program in our heads at once. Real application programs are 100 to 10000 times larger than any program you have likely written or worked on; they are simply too large and complex to hold all their details in our heads."
  6. 5. The import system. Python 3.12.4 documentation,佢呢道噉講:"The import statement combines two operations; it searches for the named module, then it binds the results of that search to a name in the local scope."
  7. (英文) 模塊化編程 - 需要同做法MITPDF 快勞講解模塊化編程。
  8. Doerschuk, P., Juarez, V., Liu, J., Vincent, D., Doss, K., & Mann, J. (2013, October). Introducing programming concepts through video game creation. In 2013 IEEE Frontiers in Education Conference (FIE) (pp. 523-529). IEEE.
  9. Unlocking the Advantages and Disadvantages of Modular Architecture in Software Development. Medium.
  10. Kramer, J. (2007). Is abstraction the key to computing?. Communications of the ACM, 50(4), 36-42.