模塊化編程

本页使用了标题或全文手工转换,现处于繁体转换模式
出自求聞百科

模塊化(modular)編程,是強調將計算機程序的功能分離成獨立的、可相互改變的「模塊」(module)的軟件設計技術,它使得每個模塊都包含着執行預期功能的一個唯一方面(aspect)所必需的所有東西。

簡介

模塊接口表達了這個模塊所提供的和所要求的元素。這些在接口中定義的元素可以被其他模塊檢測到。模塊實現包含了工作代碼,它們對應於在接口中聲明的元素。

模塊化編程密切相關於結構化編程面向對象編程,它們有着相同目標,即通過分解成更小部份的方式,促進大型軟件和系統的建構,並且都大致起源於1960年代。儘管這些術語在歷史上的用法曾經是不相容的,在現代的術語運用中:

  • 模塊化編程,指稱將整個程序的代碼分開成各部份的高層分解。
  • 結構化編程,是採用結構化控制流的低層代碼使用。
  • 面向對象編程,是對象的「數據」使用,對象是某種數據結構

在面向對象編程中,使用接口作為一種架構上的模式(pattern)來構造模塊叫做基於接口編程

語言支持

正式支持模塊概念的語言包括:AdaAlgolBlitzMaxC#, ClojureCOBOLDDarteCErlangElixirElmFF#FortranGoHaskellIBM/360匯編語言IBM i控制語言(CL)、IBM RPGJava[注 1]MATLABMLModulaModula-2Modula-3、Morpho、NEWPOberonOberon-2Objective-COCaml、一些派生的PascalComponent PascalObject PascalTurbo PascalUCSD Pascal)、 PerlPL/IPureBasicPythonRuby[2]RustJavaScript[3]Visual Basic .NETWebDNA

歷史

模塊沒有包括在最初的ALGOL 68(1968年)規定中,但是作為擴展被包括於早期的實現中,如ALGOL 68-R(1970年)和ALGOL 68C(1970年),並在此後進行了形式化[4]。開始就設計為模塊化編程的第一個語言是Niklaus Wirth的短壽的Modula(1975年)。另一個早期模塊化語言是Xerox PARCMesa(1976年),Wirth提出了Modula和Mesa的繼任者Modula-2(1978年),它影響了以後的語言,特別是通過它的後繼者Modula-3(1988年)。

模塊化編程從1980年代開始廣泛傳播:最初的Pascal語言(1970年)不包括模口,但是後來的版本,特別是UCSD Pascal(1978年)和Turbo Pascal(1983年)以「單元」的形式包括了它們,受Pascal影響的Ada(1980年)也是如此。擴展Pascal ISO 10206:1990標準在模塊支持上保持接近於Modula2。Standard ML(1984年)是有着最完全的模塊系統的語言之一[5],包括了在模塊間映射的函子(參數化模塊)。

在1980年代和1990年代,模塊化編程被遮蓋於並經常被混淆於面向對象編程,特別是由於C++Java的流行。例如,C語言家族中的C++(最初在1980年是具有類的C)和Objective-C(1983年)很早就已經支持了對象和類,只在30年後甚至更久之後才支持模塊。Java(1995年)以包的形式支持模塊,然而代碼組織的主要單元是類。但是Python(1991年)從開始就突出的使用模塊和對象二者,使用模塊作為代碼組織的主要單元,使用包作為大規模的單元;而Perl 5(1994年)包括了對模塊和對象二者的支持,具有能從CPAN(1993年)獲得的大量的模塊。

模塊化編程現在已經普及了,自從1990年代能在幾乎所有主要語言的開發中找到。模塊的相對重要性因語言而異,並在基於類的面向對象語言中,仍與作為組織和封裝的單元的類存在重疊和混淆,而它們都被良好的確立為獨立的概念。

參見

注釋

  1. The term "package" is used for the analog of modules in the JLS;[1]— see Java package. "Modules", a kind of collection of packages, are planned for Java 9 as part of Project Jigsaw; these were earlier called "superpackages" and planned for Java 7.

參考文獻

  1. James Gosling, Bill Joy, Guy Steele, Gilad Bracha, The Java Language Specification, Third Edition, ISBN 0-321-24678-0, 2005. In the Introduction, it is stated "Chapter 7 describes the structure of a program, which is organized into packages similar to the modules of Modula." The word "module" has no special meaning in Java.
  2. Class: Module (Ruby 2.0.0)
  3. ECMAScript® 2015 Language Specification, 15.2 Modules
  4. Lindsey, Charles H. Proposal for a Modules Facility in ALGOL 68 (PDF). ALGOL Bulletin. Feb 1976, (39): 20–29 [2014-12-01]. 
  5. David MacQueen. Modules for Standard ML, LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming: 198–207. August 1984. 

外部連結