Skip to Content
Semester 2Programmentwicklung 2Modulare Programmierung

Programmierparadigmen

Prozedurale Programmierung

Bei der prozeduralen Programmierung wird der Code in Funktionen und Prozeduren aufgeteilt. Dies erlaubt es, Code wiederzuverwenden und die Struktur des Programms zu verbessern. Es ist nicht notwendig, bestimmte Programmteile zu kopieren und zu wiederholen.

Oft genutzte Funktionen werden in Bibliotheken zusammengefasst und können per Import eingebunden werden.

#include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; }

Diese Methode der Programmierung dient dazu, die Struktur des Programms zu verbessern und die Lesbarkeit zu erhöhen.

if((d1.jahr > d2.jahr) || (d1.jahr == d2.jahr && d1.monat > d2.monat) || (d1.jahr == d2.jahr && d1.monat == d2.monat && d1.tag > d2.tag)) { return 1; } return 0;

Probleme: Globale Variablen

Programme sind einfacher zu verstehen, wenn Sie kurz, in sich geschlossen und aus unabhängigen Teilen bestehen.

Bei globalen Variablen kann es zu folgenden Problemen kommen:

  • Voneinander abhängige Funktionen
  • Unklarer Informationsfluss
  • Änderungen an einer Funktion können Auswirkungen auf andere Funktionen haben
  • Keine Zugriffskontrolle

In C und C++ gibt es dafür unterschiedliche Lösungen:

  • C: Module, incomplete data types
  • C++: Klassen, Schutztypen (private, protected), Namespaces

Modulare Programmierung

Die modulare Programmierung ist eine Erweiterung der prozeduralen Programmierung. Einzelne Module können geplant, programmiert und getestet werden. Universelle Module müssen nur einmal geschrieben werden und können dann immer wieder verwendet werden.

Beispiel:

Eine Liste besitzt die folgenden Attribute: next, size, values, error

Die modularen Funktionen dieser Liste sind: append(), getValueAt(), erase(), getError(), toScreen()

struct List { int next; int size; int values[]; int error; }; void append(List *list, int value) { if (list->size >= MAX_SIZE) { list->error = 1; return; } list->values[list->size] = value; list->size++; } int getValueAt(List *list, int index) { if (index < 0 || index >= list->size) { list->error = 2; return 0; } return list->values[index]; } void erase(List *list, int index) { if (index < 0 || index >= list->size) { list->error = 3; return; } for (int i = index; i < list->size - 1; i++) { list->values[i] = list->values[i + 1]; } list->size--; } int getError(List *list) { return list->error; } void toScreen(List *list) { for (int i = 0; i < list->size; i++) { std::cout << list->values[i] << std::endl; } }
Last updated on