Modulare Programmierung
Modulare Programmierung ist ein Software-Design Technik, die unterstreicht, die Funktionalität von a zu trennen Programm in unabhängig, austauschbar Module, so dass jeder alles enthält, was erforderlich ist, um nur einen Aspekt der gewünschten Funktionalität auszuführen.
Ein Modul Schnittstelle drückt die vom Modul bereitgestellten und erforderlichen Elemente aus. Die in der Schnittstelle definierten Elemente sind durch andere Module nachweisbar. Das Implementierung Enthält den Arbeitscode, der den in der Schnittstelle deklarierten Elementen entspricht. Die modulare Programmierung ist eng mit dem verwandt mit Strukturierte Programmierung und Objekt orientierte Programmierungalle haben das gleiche Ziel, die Konstruktion großer Softwareprogramme und -systeme zu erleichtern Zersetzung in kleinere Stücke und alle stammen um die 1960er Jahre. Während die historische Verwendung dieser Begriffe inkonsistent war, bezieht sich "modulare Programmierung" nun auf die zersetzende Zerlegung des Code eines gesamten Programms in Stücke: strukturierte Programmierung auf die Verwendung von strukturiertem Code auf niedriger Ebene Steuerfluss, und objektorientierte Programmierung an die Daten Gebrauch von Objekte, eine Art von Datenstruktur.
In objektorientierter Programmierung wird die Verwendung von Schnittstellen als architektonisches Muster zum Konstruktionsmodulen bezeichnet Schnittstellenbasierte Programmierung.
Geschichte
Modulare Programmierung in Form von Subsystemen (insbesondere für E/O) und Software -Bibliotheken stammt aus frühen Softwaresystemen, wo sie verwendet wurden Code -Wiederverwendung. Modulare Programmierung an sich mit einem Ziel der Modularität, die in den späten 1960er und 1970er Jahren als größeres Analogon des Konzepts von entwickelt wurde Strukturierte Programmierung (1960er Jahre). Der Begriff "modularer Programmieren" stammt aus dem nationalen Symposium für modulare Programmier Larry Constantine; Andere Schlüsselkonzepte waren Informationen verstecken sich (1972) und Trennung von Bedenken (Soc, 1974).
Module wurden nicht in die ursprüngliche Spezifikation für enthalten Algol 68 (1968), wurden jedoch als Erweiterungen in frühen Implementierungen aufgenommen, Algol 68-R (1970) und Algol 68c (1970) und später formalisiert.[1] Eine der ersten Sprachen, die von Anfang an für modulare Programme entworfen wurden, war kurzlebig Modula (1975), von Niklaus Wirth. Eine weitere frühe modulare Sprache war Mesa (1970er Jahre), von Xerox Parcund Wirth stützte sich sowohl auf Mesa als auch auf das ursprüngliche Modula in seinem Nachfolger. Modula-2 (1978), die spätere Sprachen beeinflusste, insbesondere durch seinen Nachfolger, Modula-3 (1980er Jahre). Modulas Verwendung von Punkt-qualifizierte Namen, wie M.A.
sich auf das Objekt beziehen a
vom Modul M
, fällt mit der Notation zusammen, auf ein Feld eines Datensatzes zuzugreifen (und ähnlich für Attribute oder Methoden von Objekten), und ist jetzt in C#, Dart, Go, Java, Ocaml und Python, unter anderem weit verbreitet. Die modulare Programmierung wurde aus den 1980er Jahren weit verbreitet: das Original Pascal Language (1970) enthielt keine Module, sondern spätere Versionen, insbesondere Versionen UCSD Pascal (1978) und Turbo Pascal (1983) haben sie in Form von "Einheiten" eingeschlossen, ebenso wie der von Pascal beeinflusste Ada (1980). Der erweiterte Pascal ISO 10206: 1990 Standard hielt sich in seiner modularen Unterstützung näher an Modula2. Standard ml (1984)[2] hat eines der vollständigsten Modulsysteme, einschließlich Funkern (Parametrisierte Module), um zwischen Modulen zuzuordnen.
In den 1980er und 1990er Jahren wurde die modulare Programmierung von überschattet und oft miteinander verbunden Objekt orientierte Programmierunginsbesondere aufgrund der Popularität von C ++ und Java. Zum Beispiel hatte die C -Familie der Sprachen Unterstützung für Objekte und Klassen in C ++ (ursprünglich C mit Klassen, 1980) und Objective-C (1983), die nur mindestens 30 Jahre Module unterstützen. Java (1995) unterstützt Module in Form von Paketen, obwohl die Haupteinheit der Codeorganisation eine Klasse ist. Python (1991) verwendete jedoch von Anfang an sowohl Module als auch Objekte, wobei Module als Haupteinheit der Codeorganisation und "Pakete" als größere Einheit verwendet wurden. und Perl 5 (1994) beinhaltet die Unterstützung sowohl für Module als auch für Objekte, wobei eine Vielzahl von Modulen aus erhältlich ist CPAN (1993). Ocaml (1996) folgten ML, indem sie Module und Functors unterstützten.
Die modulare Programmierung ist jetzt weit verbreitet und in praktisch allen seit den 1990er Jahren entwickelten Hauptsprachen gefunden. Die relative Bedeutung von Modulen variiert zwischen den Sprachen, und in klassenbasierten objektorientierten Sprachen überlappen sich und Verwirrung mit Klassen als Organisationseinheit und Kapselung, aber diese sind beide als unterschiedliche Konzepte gut etabliert.
Terminologie
Der Begriff Montage (wie in .Net Sprachen wie C#, F# oder Visual Basic .net) oder Paket (wie in Pfeil, gehen oder Java) wird manchmal anstelle von verwendet Modul. In anderen Implementierungen sind dies unterschiedliche Konzepte. in Python Ein Paket ist eine Sammlung von Modulen, während in Java 9 die Einführung der Neues Modulkonzept (Eine Sammlung von Paketen mit verbesserter Zugriffskontrolle) wurde implementiert.
Darüber hinaus hat der Begriff "Paket" andere Verwendungen in der Software (zum Beispiel .NET NUGET -Pakete). EIN Komponente ist ein ähnliches Konzept, bezieht sich jedoch typischerweise auf ein höheres Niveau; Eine Komponente ist ein Stück eines Ganzen System, während ein Modul ein Stück eines individuellen Programms ist. Die Skala des Begriffs "Modul" variiert erheblich zwischen den Sprachen. In Python ist es sehr klein und jede Datei ist ein Modul, während in Java 9 Es ist geplant, groß anhand zu sein, wo ein Modul eine Sammlung von Paketen ist, die wiederum Sammlungen von Dateien sind.
Andere Begriffe für Module umfassen Einheit, benutzt in Pascal Dialekte.
Sprachunterstützung
Sprachen, die das Modulkonzept offiziell unterstützen Ada, Algol, Blitzmax, C ++, C#, Clojure, Cobol, Common_lisp, D, Pfeil, EC, Erlang, Elixier, Ulme, F, F#, Forran, gehen, Haskell, IBM/360 Assembler, Kontrollsprache (Cl),, IBM RPG, Java,[a] Matlab, Ml, Modula, Modula-2, Modula-3, Morpho, Newp, Oberon, Oberon-2, Ziel c, Ocaml, mehrere Derivate von Pascal (Komponente Pascal, Objekt Pascal, Turbo Pascal, UCSD Pascal), Perl, Php, Pl/i, PureBasic, Python, R, Rubin,[4] Rost, JavaScript,[5] Visual Basic .net und WebDNA.
Auffällige Beispiele für Sprachen, denen Module fehlen, sind C und war gewesen C ++ und Pascal in ihrer ursprünglichen Form, C und C ++ Ermöglichen jedoch, dass separate Zusammenstellungs- und deklarative Schnittstellen verwendet werden Header -Dateien. Module wurden zu Objective-C in hinzugefügt in iOS 7 (2013); zu c ++ mit C ++ 20,[6] und Pascal wurde von abgelöst von Modula und Oberon, einschließlich Modulen von Anfang an und verschiedene Derivate, die Module enthielten. JavaScript hat seitdem native Module gehabt ECMaskript 2015.
Die modulare Programmierung kann auch durchgeführt werden, wenn der Programmiersprache explizite syntaktische Merkmale fehlt, um benannte Module zu unterstützen, beispielsweise in C. Dies geschieht mithilfe vorhandener Sprachfunktionen zusammen mit, zum Beispiel zusammen mit. Konventionen codieren, Programmierende Redewendungen und die physikalische Codestruktur. Ibm i verwendet auch Module beim Programmieren in der Integrierte Sprachumgebung (ILE).
Schlüsselaspekte
Mit modularer Programmierung, Bedenken werden getrennt So dass Module logisch diskrete Funktionen ausführen und durch genau definierte Schnittstellen interagieren. Oft bilden Module a Regie acyclische Graphen (DAG); In diesem Fall wird eine zyklische Abhängigkeit zwischen Modulen als angesehen, dass dies ein einzelnes Modul sein sollte. In dem Fall, in dem Module eine DAG bilden, können sie als Hierarchie angeordnet werden, in der die niedrigsten Module abhängig von anderen Modulen unabhängig sind und Module auf höherer Ebene von niedrigeren Ebenen abhängen. Ein bestimmtes Programm oder eine bestimmte Bibliothek ist ein Modul auf höchstem Niveau einer eigenen Hierarchie, kann jedoch wiederum als Modul auf niedrigerer Ebene eines Programms, einer Bibliothek oder eines Systems auf höherer Ebene angesehen werden.
Wenn Sie ein modulares System erstellen, werden anstatt eine monolithische Anwendung (wobei die kleinste Komponente das Ganze ist) mehrere kleinere Module separat geschrieben werden. Normalerweise sind diese auch zusammengestellt getrennt über separate Kompilierung und dann durch a verknüpft Linker. EIN Just-in-Time-Compiler kann einen Teil dieser Konstruktion "im Fliege" durchführen Laufzeit.
Diese unabhängigen Funktionen werden üblicherweise entweder als Programmkontrollfunktionen oder als bestimmte Aufgabenfunktionen eingestuft. Programmkontrollfunktionen sind so konzipiert, dass sie für ein Programm funktionieren. Spezifische Aufgabenfunktionen sind genau vorbereitet, um für verschiedene Programme anwendbar zu sein.
Dies macht modular gestaltete Systeme, wenn sie korrekt gebaut, weitaus wiederverwendbarer als ein traditionelles monolithisches Design, da alle (oder viele) dieser Module in anderen Projekten wiederverwendet werden können (ohne Veränderung). Dies erleichtert auch das "Aufbrechen" von Projekten in mehrere kleinere Projekte. Theoretisch wird ein modularisiertes Softwareprojekt von großen Teams leichter zusammengestellt, da keine Teammitglieder das gesamte System erstellen oder sogar über das gesamte System wissen müssen. Sie können sich nur auf die zugewiesene kleinere Aufgabe konzentrieren.
Siehe auch
- Architektur Beschreibung Sprache
- Zusammenhalt (Informatik)
- Komponentenbasierte Software-Engineering
- Conways Gesetz
- Kopplung (Informatik)
- David Parnas
- Informationen verstecken sich (Verkapselung)
- Bibliothek (Computer)
- Liste der Systemqualitätsattribute
- Modulares Design
- Plug-in (Computing)
- Snippet (Programmierung)
- Strukturierte Analyse
- Strukturierte Programmierung
Anmerkungen
- ^ Der Begriff "Paket" wird für das Analogon von Modulen im JLS verwendet.[3] - sehen Java -Paket. "Module"Eine Art Sammlung von Paketen ist geplant Java 9 im Rahmen Projektsäge; Diese wurden früher als "Superpackages" bezeichnet und für Java 7 geplant.
Verweise
- ^ Lindsey, Charles H. (Februar 1976). "Vorschlag für eine Modulanlage in Algol 68" (PDF). Algol Bulletin (39): 20–29. Archiviert von das Original (PDF) Am 2016-03-03. Abgerufen 2014-12-01.
- ^ David MacQueen (August 1984). "Module für Standard -ML, LFP '84 Proceedings des ACM -Symposiums von 1984 über LISP- und Funktionsprogrammierung": 198–207.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Die Java -Sprachspezifikation, dritte Ausgabe, ISBN0-321-24678-0, 2005. In der Einleitung wird angegeben: "Kapitel 7 beschreibt die Struktur eines Programms, das in Pakete organisiert ist, die den Modulen von Modula ähneln." Das Wort "Modul" hat in Java keine besondere Bedeutung.
- ^ "Klasse: Modul (Ruby 2.0.0)".
- ^ ECMAScript® 2015 Sprachspezifikation, 15.2 Module
- ^ "N4720: Arbeitsentwurf, Erweiterungen zu C ++ für Module" (PDF).
Externe Links