fbpx
维基百科

模块化编程

模块化编程(英語:modular programming),是强调将计算机程序的功能分离成独立的、可相互改变的“模块”(module)的软件设计技术,它使得每个模块都包含着执行预期功能的一个唯一方面(aspect)所必需的所有东西。

简介 编辑

模块接口表达了这个模块所提供的和所要求的元素。这些在接口中定义的元素可以被其他模块检测到。模块实现包含了工作代码,它们对应于在接口中声明的元素。

模块化编程密切相关于结构化编程面向对象编程,它们有着相同目标,即通过分解成更小部份的方式,促进大型软件和系统的建构,并且都大致起源于1960年代。尽管这些术语在历史上的用法曾经是不相容的,在现代的术语运用中:

  • 模块化编程,指称将整个程序的代码分开成各部份的高层分解。
  • 结构化编程,是采用结构化控制流的低层代码使用。
  • 面向对象编程,是对象的“数据”使用,对象是某种数据结构

在面向对象编程中,使用接口作为一种架构上的模式(pattern)来构造模块叫做基于接口编程

历史 编辑

模块没有包括在最初的ALGOL 68(1968年)规定中,但是作为扩展被包括于早期的实现中,如ALGOL 68-R英语ALGOL 68-R(1970年)和ALGOL 68C英语ALGOL 68C(1970年),并在此后进行了形式化[1]。开始就设计为模块化编程的第一个语言是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标准,在模块支持上保持接近于Modula-2。Standard ML(1984年)是有着最完全的模块系统的语言之一[2],包括了在模块间映射的函子(参数化模块)。

在1980年代和1990年代,模块化编程被遮盖于并经常被混淆于面向对象编程,特别是由于C++Java的流行。例如,C语言家族中的C++(最初在1980年是具有类的C)和Objective-C(1983年)很早就已经支持了对象和类,只在30年后甚至更久之后才支持模块。Java(1995年)以包的形式支持模块,然而代码组织的主要单元是类。但是Python(1991年)从开始就突出的使用模块和对象二者,使用模块作为代码组织的主要单元,使用包作为大尺度的单元;而Perl 5(1994年)包括了对模块和对象二者的支持,具有能从CPAN(1993年)获得的大量的模块。

模块化编程现在已经普及了,自从1990年代以来,它能在几乎所有主要语言的开发中找到。模块的相对重要性因语言而异,并在基于类的面向对象语言中,仍与作为组织和封装的单元的类存在重叠和混淆,而它们都被良好的确立为独立的概念。

术语 编辑

术语汇集(assembly),比如用于.NET语言C#F#Visual Basic .NET,或者(package),比如用于DartGoJava,有时用来替代“模块”。在其他实现中,它们是不同的概念;在Python中,包是模块的搜集,而在Java 9中,介入并实现了新的模块概念(具有增强访问控制的包搜集)。

进一步的,术语“包”在软件中有其他用途(例如.NET NuGet包)。组件(component)是类似的概念,但是典型的用于高层;组件是整个系统的一部份,而模块是个别程序的一部份。术语“模块”的尺度在不同语言之间差异巨大;在Python中它是小尺度的,而每个文件是一个模块;在Java 9中它被规划为是大尺度的,这里的模块是包的搜集,而包是文件的搜集。

其他用于模块的术语包括“单元”(unit),它用于Pascal方言中。

语言支持 编辑

正式支持模块概念的语言包括:AdaAlgolBlitzMaxC#, ClojureCOBOLDDarteC英语eC (programming language)ErlangElixirElmF英语F (programming language)F#FortranGoHaskellIBM/360英语IBM/360汇编语言IBM i控制语言英语IBM i Control Language(CL)、IBM RPG英语IBM RPGJava[註 1]MATLABMLModulaModula-2Modula-3、Morpho、NEWP英语NEWPOberonOberon-2英语Oberon-2Objective-COCaml、一些派生的PascalComponent Pascal英语Component PascalObject PascalTurbo PascalUCSD Pascal)、 PerlPL/IPureBasicPythonRuby[4]RustJavaScript[5]Visual Basic .NETWebDNA

参见 编辑

注释 编辑

  1. ^ The term "package" is used for the analog of modules in the JLS;[3] — 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. ^ Lindsey, Charles H. (PDF). ALGOL Bulletin. Feb 1976, (39): 20–29 [2014-12-01]. (原始内容 (PDF)存档于2016-03-03). 
  2. ^ David MacQueen. Modules for Standard ML, LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming: 198–207. August 1984. 
  3. ^ 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.
  4. ^ 存档副本. [2020-04-21]. (原始内容于2015-01-05). 
  5. ^ ECMAScript® 2015 Language Specification, 15.2 Modules. [2020-04-21]. (原始内容于2019-05-05). 

外部链接 编辑

  • How To Decompose a System into Modules (页面存档备份,存于互联网档案馆

模块化编程, 英語, modular, programming, 是强调将计算机程序的功能分离成独立的, 可相互改变的, 模块, module, 的软件设计技术, 它使得每个模块都包含着执行预期功能的一个唯一方面, aspect, 所必需的所有东西, 目录, 简介, 历史, 术语, 语言支持, 参见, 注释, 参考文献, 外部链接简介, 编辑模块接口表达了这个模块所提供的和所要求的元素, 这些在接口中定义的元素可以被其他模块检测到, 模块实现包含了工作代码, 它们对应于在接口中声明的元素, 密切相关于结构化编程和面. 模块化编程 英語 modular programming 是强调将计算机程序的功能分离成独立的 可相互改变的 模块 module 的软件设计技术 它使得每个模块都包含着执行预期功能的一个唯一方面 aspect 所必需的所有东西 目录 1 简介 2 历史 3 术语 4 语言支持 5 参见 6 注释 7 参考文献 8 外部链接简介 编辑模块接口表达了这个模块所提供的和所要求的元素 这些在接口中定义的元素可以被其他模块检测到 模块实现包含了工作代码 它们对应于在接口中声明的元素 模块化编程密切相关于结构化编程和面向对象编程 它们有着相同目标 即通过分解成更小部份的方式 促进大型软件和系统的建构 并且都大致起源于1960年代 尽管这些术语在历史上的用法曾经是不相容的 在现代的术语运用中 模块化编程 指称将整个程序的代码分开成各部份的高层分解 结构化编程 是采用结构化控制流的低层代码使用 面向对象编程 是对象的 数据 使用 对象是某种数据结构 在面向对象编程中 使用接口作为一种架构上的模式 pattern 来构造模块叫做基于接口编程 历史 编辑模块没有包括在最初的ALGOL 68 1968年 规定中 但是作为扩展被包括于早期的实现中 如ALGOL 68 R 英语 ALGOL 68 R 1970年 和ALGOL 68C 英语 ALGOL 68C 1970年 并在此后进行了形式化 1 开始就设计为模块化编程的第一个语言是Niklaus Wirth的短寿的Modula 1975年 另一个早期模块化语言是Xerox PARC的Mesa 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标准 在模块支持上保持接近于Modula 2 Standard ML 1984年 是有着最完全的模块系统的语言之一 2 包括了在模块间映射的函子 参数化模块 在1980年代和1990年代 模块化编程被遮盖于并经常被混淆于面向对象编程 特别是由于C 和Java的流行 例如 C语言家族中的C 最初在1980年是具有类的C 和Objective C 1983年 很早就已经支持了对象和类 只在30年后甚至更久之后才支持模块 Java 1995年 以包的形式支持模块 然而代码组织的主要单元是类 但是Python 1991年 从开始就突出的使用模块和对象二者 使用模块作为代码组织的主要单元 使用包作为大尺度的单元 而Perl 5 1994年 包括了对模块和对象二者的支持 具有能从CPAN 1993年 获得的大量的模块 模块化编程现在已经普及了 自从1990年代以来 它能在几乎所有主要语言的开发中找到 模块的相对重要性因语言而异 并在基于类的面向对象语言中 仍与作为组织和封装的单元的类存在重叠和混淆 而它们都被良好的确立为独立的概念 术语 编辑术语汇集 assembly 比如用于 NET语言C F 或Visual Basic NET 或者包 package 比如用于Dart Go或Java 有时用来替代 模块 在其他实现中 它们是不同的概念 在Python中 包是模块的搜集 而在Java 9中 介入并实现了新的模块概念 具有增强访问控制的包搜集 进一步的 术语 包 在软件中有其他用途 例如 NET NuGet包 组件 component 是类似的概念 但是典型的用于高层 组件是整个系统的一部份 而模块是个别程序的一部份 术语 模块 的尺度在不同语言之间差异巨大 在Python中它是小尺度的 而每个文件是一个模块 在Java 9中它被规划为是大尺度的 这里的模块是包的搜集 而包是文件的搜集 其他用于模块的术语包括 单元 unit 它用于Pascal方言中 语言支持 编辑正式支持模块概念的语言包括 Ada Algol BlitzMax C Clojure COBOL D Dart eC 英语 eC programming language Erlang Elixir Elm F 英语 F programming language F Fortran Go Haskell IBM 360 英语 IBM 360 汇编语言 IBM i控制语言 英语 IBM i Control Language CL IBM RPG 英语 IBM RPG Java 註 1 MATLAB ML Modula Modula 2 Modula 3 Morpho NEWP 英语 NEWP Oberon Oberon 2 英语 Oberon 2 Objective C OCaml 一些派生的Pascal Component Pascal 英语 Component Pascal Object Pascal Turbo Pascal UCSD Pascal Perl PL I PureBasic Python Ruby 4 Rust JavaScript 5 Visual Basic NET WebDNA 参见 编辑架构描述语言 內聚性 計算機科學 基于组件的软件工程 康威定律 耦合性 計算機科學 函式库 模組化設計 插件 片段 结构化分析 结构化编程注释 编辑 The term package is used for the analog of modules in the JLS 3 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 参考文献 编辑 Lindsey Charles H Proposal for a Modules Facility in ALGOL 68 PDF ALGOL Bulletin Feb 1976 39 20 29 2014 12 01 原始内容 PDF 存档于2016 03 03 David MacQueen Modules for Standard ML LFP 84 Proceedings of the 1984 ACM Symposium on LISP and functional programming 198 207 August 1984 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 存档副本 2020 04 21 原始内容存档于2015 01 05 ECMAScript 2015 Language Specification 15 2 Modules 2020 04 21 原始内容存档于2019 05 05 外部链接 编辑How To Decompose a System into Modules 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 模块化编程 amp oldid 80300123, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。