- Haupt- und Zusatzmodule
- Modulare Programmierfunktionen
- Modularität
- Funktionsdefinition
- Umfang der Variablen
- Es ist prozedural
- Beispiele für modulare Programmierung
- Modularität im wirklichen Leben
- Funktionen in Java
- Vorteil
- Unabhängige Projektprogrammierung
- Effiziente Programmentwicklung
- Mehrfachnutzung von Modulen
- Einfaches Debuggen und Ändern
- Nachteile
- Übermäßig objektorientierte Struktur
- Module zu klein
- Ohne Grund zersetzen
- Anwendungen
- C Sprache
- Verweise
Die modulare Programmierung ist eine Technik für die Softwareentwicklung, bei der das Programm in viele kleine Blöcke oder autonome Komponenten unterteilt ist, die als Module bezeichnet werden und überschaubar, logisch und funktional sind.
Das Modul ist ein Anweisungsblock, der ein bestimmtes Problem löst. Jedes Modul enthält alles, was zur Erfüllung seiner eigenen Funktionalität erforderlich ist, und kann bearbeitet oder geändert werden, ohne den Rest des Projekts zu beeinträchtigen.
Beispiel für die Lösung eines Problems mit Modulen. Quelle: Kayau / CC BY (https://creativecommons.org/licenses/by/3.0)
Diese Art der Programmierung wird erreicht, indem eine permanente Modulschnittstelle beibehalten wird, die von den anderen Softwarekomponenten verwendet wird, um auf die Funktionen jedes Moduls zuzugreifen.
Module legen logische Grenzen zwischen Komponenten fest und verbessern so die Wartbarkeit. Sie werden über Schnittstellen eingebunden, die so konzipiert sind, dass die Abhängigkeit zwischen den verschiedenen Modulen minimiert wird.
Haupt- und Zusatzmodule
Ein Hauptmodul und mehrere Nebenmodule bilden die modulare Programmierung. Vom Hauptmodul aus werden die Funktionen der Hilfsmodule aufgerufen.
Diese Plug-Ins existieren als separate ausführbare Dateien, die beim Ausführen des Hauptmoduls geladen werden. Jedem Modul ist in der PROGRAM-Anweisung ein eindeutiger Name zugewiesen.
Die Arbeitsteams können verschiedene Module separat entwickeln, ohne alle Module des Systems kennen zu müssen. Jede der modularen Anwendungen ist mit einer Versionsnummer verknüpft, um Entwicklern Flexibilität bei der Wartung des Moduls zu bieten.
Modulare Programmierfunktionen
Modularität
Ein Computer benötigt keine explodierte Version des Codes, um ihn auszuführen. Es sind menschliche kognitive Einschränkungen, die Sie dazu zwingen, Code in kleineren Blöcken zu schreiben.
Ein Programm kann andere Funktionen enthalten und auch auf Funktionen verweisen, die sich in anderen Dateien befinden. Diese Funktionen oder Module sind Sätze von Anweisungen, mit denen eine Operation ausgeführt oder ein Wert berechnet wird.
Um die Einfachheit und Lesbarkeit in großen und komplexen Programmen zu gewährleisten, wird eine kurze Hauptfunktion in Verbindung mit anderen Funktionen anstelle einer langen Hauptfunktion verwendet.
Durch die Aufteilung eines Programms in Gruppen von Modulen wird jedes Modul leichter verständlich und entspricht somit den grundlegenden Richtlinien der strukturierten Programmierung.
Funktionsdefinition
Eine Funktion besteht aus einer Deklaration ihrer Definition, gefolgt von Befehlen und Anweisungen. Die allgemeine Form einer Funktion ist:
Funktionsname (Parameterdeklaration) {
Sätze;
Befehle;
Ausdruck zurückgeben;
}}
- Die Deklaration der Parameter repräsentiert die Informationen, die an die Funktion übergeben werden.
- Zusätzliche Variablen, die speziell von der Funktion verwendet werden, sind in den Sätzen definiert.
- Alle Funktionen müssen eine return-Anweisung enthalten.
Umfang der Variablen
Variablen, die innerhalb der Hauptfunktion oder in benutzerdefinierten Funktionen deklariert sind, werden als lokale Variablen bezeichnet. Diese haben einen Wert, wenn die Funktion ausgeführt wird, aber ihr Wert bleibt nicht erhalten, wenn die Funktion abgeschlossen ist.
Variablen, die außerhalb des Hauptprogramms oder benutzerdefinierter Funktionen deklariert werden, werden als globale Variablen bezeichnet. Diese Variablen können von jeder Funktion im Programm übernommen werden.
Es ist prozedural
Die modulare Programmierung ist sehr prozedural, da sie vollständig darauf ausgerichtet ist, Code für Funktionen zu schreiben, ohne die Daten zu berücksichtigen.
Beispiele für modulare Programmierung
Modularität im wirklichen Leben
Angenommen, ein Haus mit Strom und mehreren Steckdosen an den Wänden. Mit diesem System können Sie verschiedene elektrische Geräte anschließen, z. B. Mikrowelle, Waschmaschine, Trockner usw.
Diese Geräte sind so konzipiert, dass sie ihre spezifische Aufgabe erfüllen, wenn sie angeschlossen und eingeschaltet sind, unabhängig davon, wo sie sich befinden.
Die Module einer Anwendung müssen derselben Philosophie folgen. Dies bedeutet, dass sie nur ihre spezifische Aufgabe ausführen müssen, unabhängig davon, wo in der App sie sich befinden oder mit welcher App sie verbunden sind.
Ebenso wie ein elektrisches Gerät leicht aus der Steckdose gezogen werden kann, muss ein Modul so konstruiert sein, dass es leicht aus einer Anwendung entfernt werden kann.
Ebenso wie das Entfernen eines elektrischen Geräts die Funktionalität der anderen angeschlossenen Geräte nicht beeinträchtigt, sollte das Entfernen von Modulen aus einer Anwendung die Funktionalität der anderen Module dieser Anwendung nicht beeinträchtigen.
Funktionen in Java
In Java werden Module als eigenständige Funktionen geschrieben. Beispielsweise können Sie eine Funktion oder einen Codeblock haben, um den GPA eines Schülers basierend auf seinen Noten in allen Kursen zu berechnen, die er besucht hat.
Die Funktion muss die Liste der Noten als Eingabe erhalten und dann den berechneten Notendurchschnitt zurückgeben:
Diese Funktion heißt CalculateAverageNote. Es empfängt als Eingabe eine Liste von Notizen unter Verwendung eines Arrays vom Datentyp double und gibt den berechneten Durchschnitt zurück.
In der Funktion wird die lokale Variablensumme auf Null initialisiert und dann werden mithilfe einer for-Schleife alle Qualifikationen zur Summe addiert. Schließlich wird die erhaltene Summe durch die Anzahl der Noten geteilt, wobei der resultierende Wert zurückgegeben wird.
Wenn die Eingabematrix nach dem Hinzufügen die Noten 3.5, 3.0 und 4.0 hätte, hätte sie den Wert 10,5 summiert und würde dann durch 3 geteilt, da es drei Noten gibt. Die Funktion würde den Wert 3.5 zurückgeben.
Vorteil
Unabhängige Projektprogrammierung
Mehrere Programmierer können an demselben Projekt arbeiten, wenn es in Module unterteilt ist. Verschiedene Programmierer können unabhängig voneinander verschiedene Programmmodule entwerfen, was für ein großes und komplexes Programm erforderlich ist.
Effiziente Programmentwicklung
Programme können schneller entwickelt werden, da kleine, eigenständige Module leichter zu verstehen, zu entwerfen und zu testen sind als große Programme.
Der Programmierer kann die erforderliche Eingabe bereitstellen und überprüfen, ob das Modul korrekt ist, indem er seine Ausgabe überprüft.
Mehrfachnutzung von Modulen
Code, der für ein Programm geschrieben wurde, ist in anderen oft nützlich. Durch die modulare Programmierung können diese Abschnitte für die zukünftige Verwendung gespeichert werden. Da der Code verschiebbar ist, können die gespeicherten Module mit jedem anderen Programm verknüpft werden, das die Eingabe- und Ausgabeanforderungen erfüllt.
Bei der monolithischen Programmierung sind solche Codeabschnitte in das Programm eingebettet und können von anderen Programmen nicht verwendet werden.
Einfaches Debuggen und Ändern
Ein Modul ist kleiner als ein vollständiges Programm, daher ist es einfacher zu testen. Jedes Modul kann separat vom Rest des Programms geschrieben und getestet werden. Nachdem ein Modul getestet wurde, kann es in einem neuen Programm verwendet werden, ohne dass es erneut getestet werden muss.
Wenn ein Programm geändert werden muss, vereinfacht die modulare Programmierung den Job. Neue oder debuggte Module können mit einem vorhandenen Programm verknüpft werden, ohne den Rest des Programms zu ändern.
Nachteile
Übermäßig objektorientierte Struktur
Diese Programmierung verwendet Schnittstellen, was eine ziemlich effektive Idee ist. Um dies zu nutzen, verfügen einige Frameworks über einen vollständigen Satz austauschbarer Klassen. Um beispielsweise die Persistenz zu handhaben, kann es mehrere Klassen geben, die eine Persistenzschnittstelle implementieren.
Integrierte Entwicklungsumgebungen (IDEs) sind jedoch verwirrt. Sie könnten beispielsweise versuchen, die Quelle einer Methode zu finden, und die IDE weiß nicht, welche Methode Sie sehen möchten, und zeigt daher eine lange Liste von Dateien an, in denen eine Methode mit diesem Namen vorhanden ist.
Module zu klein
Es gibt viele Module, die nur eine sehr kleine Funktion enthalten. Jedes Modul benötigt zusätzlich zu seiner Überschrift im Code zusätzliche Analyse- und Verarbeitungszeit.
Die Verwendung vieler kleiner Module erhöht daher den Overhead des Kompilierungssystems und erhöht die Paketgröße.
Ohne Grund zersetzen
Einige Codes ändern sich fast nie. In diesen Fällen ist es möglicherweise nicht sinnvoll, es sauberer oder mit abstrakter Logik aussehen zu lassen, wenn es nur funktioniert.
Es gibt Codes, die nicht besonders hübsch aussehen, aber in den letzten Jahren nicht viel geändert haben. Es gibt keinen Grund, Code zu zerlegen, der sich nie geändert hat und bereits gut in Module funktioniert.
Anwendungen
Modulare Programmierung ist nur ein Konzept. Seine Praxis kann in jeder Programmiersprache angewendet werden, insbesondere in prozeduralen, die ein separat kompiliertes Programm haben.
Komponentenbibliotheken, die aus separat kompilierten Modulen erstellt wurden, können mithilfe eines Programmierwerkzeugs, das als Linker bezeichnet wird, zu einem Satz kombiniert werden.
Die Namen der Funktionen in den verschiedenen Modulen müssen eindeutig sein, um den Zugriff zu erleichtern, falls die vom Hauptmodul verwendeten Funktionen exportiert werden müssen.
Zu den Programmiersprachen, die das Konzept der modularen Programmierung unterstützen, gehören C, Ada, PL / I, Erlang, Pascal, Algol, COBOL, RPG, Haskell, Python, HyperTalk, IBM / 360 Assembler, MATLAB, Ruby, IBM RPG, SmallTalk, Morpho, Java (Pakete gelten als Module), Perl usw.
C Sprache
Die modulare Programmierung kann in der Sprache C angewendet werden, da dadurch große Schwierigkeiten behoben werden können, indem sie in mehrere Module unterteilt wird.
Jedes dieser Module löst ein bestimmtes Problem, während das Hauptprogramm, das aus solchen Verfahren besteht, das Problem als Ganzes löst.
Auf jede in C definierte Funktion kann standardmäßig global zugegriffen werden. Dies kann durch Einfügen einer Header-Datei erfolgen, in der die Implementierung der Funktion definiert ist.
Als Beispiel möchten wir einen Stack-Datentyp deklarieren und außerdem, dass die Implementierung und die Datenstruktur vor Benutzern verborgen sind.
Dies kann erreicht werden, indem zunächst eine öffentliche Datei mit dem Namen stack.h definiert wird, die die generischen Daten mit dem Stack-Datentyp und die vom Stack-Datentyp unterstützten Funktionen enthält.
stack.h:
extern stack_var1;
extern int stack_do_something (void);
Jetzt können Sie eine Datei namens stack.c erstellen, die die Implementierung des Stack-Datentyps enthält:
Verweise
- CIO Wiki (2019). Modulare Programmierung. Entnommen aus: cio-wiki.org.
- IT-Definitionen (2020). Modulare Programmierung. Entnommen aus: defit.org.
- New Mexico Tech (2020). Modulare Programmierung mit Funktionen. Entnommen aus: ee.nmt.edu.
- Christian Maioli (2020). 3 kreative Techniken zum Schreiben von modularem Code. Tech Beacon. Entnommen aus: techbeacon.com.
- Geeks for Geeks (2020). Modularer Ansatz in der Programmierung. Entnommen aus: geeksforgeeks.org.
- Studie (2020). Modulare Programmierung: Definition & Anwendung in Java. Entnommen aus: study.com.