Ein Programmierparadigma ist das grundlegende Denkmodell, nach dem ein Programm aufgebaut wird. Verschiedene Sprachen können mehrere Paradigmen unterstützen.
| Paradigma | Kernidee | Vertreter | Wann sinnvoll? |
|---|---|---|---|
| Imperativ | Anweisung für Anweisung, Sprungbefehle | Assembler, Fortran | Hardware-nahe Programmierung, Treiber |
| Prozedural | Aufteilung in Unterprogramme, Daten getrennt von Logik | Pascal, Delphi, C | Skripte, klar strukturierte Programme ohne komplexe Daten |
| Objektorientiert | Alles ist ein Objekt mit Zustand und Verhalten | Java, C#, Python | Große Softwareprojekte, GUI-Anwendungen, Geschäftslogik |
| Funktional | Funktionen als Werte, keine Seiteneffekte | Lisp, Scala, Haskell | Datenverarbeitung, parallele Systeme, wo Zustand Probleme macht |
| Logisch | Fakten und Regeln, Ergebnis wird hergeleitet | Prolog | KI, natürliche Sprachverarbeitung, Constraint-Probleme |
Das älteste Paradigma: Das Programm ist eine Folge von Anweisungen, die der Computer der Reihe nach ausführt. Sprünge (goto) ermöglichen Verzweigungen. Führt ohne Disziplin zu unübersichtlichem “Spaghetti Code” — der Hauptgrund für die strukturierte Programmierung (siehe Phasenmodell).
Eine Weiterentwicklung des imperativen Paradigmas. Das Programm wird in Prozeduren (Unterprogramme) aufgeteilt, die vom Hauptprogramm aufgerufen werden. Daten und Logik sind getrennt. Das macht Programme übersichtlicher und wiederverwendbar.
Das Programm besteht aus Objekten, die Daten (Attribute) und Verhalten (Methoden) kapseln. Jedes Objekt ist eine Instanz einer Klasse und hat drei Eigenschaften:
Aufbau einer Klasse:
| Teil | Beschreibung |
|---|---|
| Attribut | Eigenschaft des Objekts, typisch private |
| Methode | Funktion, die auf dem Objekt operiert |
| Konstruktor | Spezielle Methode zum Erstellen einer Instanz |
Beispiel-Analogie aus dem Unterricht: Die Klasse Schueler hat Attribute wie name, alter, geschlecht und Methoden wie lernen(), schlafen(). Zwei Instanzen dieser Klasse (zwei Schüler) teilen dieselbe Struktur, haben aber unterschiedliche Attributwerte.
public class Schueler {
// Attribute (privat — Kapselung)
private String name;
private int alter;
// Konstruktor
public Schueler(String name, int alter) {
this.name = name;
this.alter = alter;
}
// Methoden
public void lernen() {
System.out.println(name + " lernt.");
}
public String getName() {
return name;
}
}
// Zwei Instanzen derselben Klasse
Schueler s1 = new Schueler("Anna", 16);
Schueler s2 = new Schueler("Max", 17);
s1.lernen(); // Anna lernt.
Das zentrale Prinzip ist Kapselung (Encapsulation): Attribute sind nach außen verborgen (private), der Zugriff erfolgt nur über Methoden.
Vererbung ermöglicht es einer Klasse, Eigenschaften und Methoden einer anderen Klasse zu übernehmen und zu erweitern — ohne den Code zu duplizieren.
Weiterführend: Vererbung (Wikipedia) · Polymorphismus (Wikipedia)
Im funktionalen Paradigma sind Funktionen gleichwertige Werte — sie können als Argumente übergeben, zurückgegeben und gespeichert werden (First-Class Functions). Das Paradigma basiert auf dem Konzept mathematischer Funktionen: Der Rückgabewert hängt ausschließlich von den übergebenen Argumenten ab, nicht von einem externen Zustand.
Vertreter: Lisp, Scala, Haskell
Logische Programme bestehen aus Fakten und Regeln. Anstatt einen Lösungsweg zu beschreiben, wird das Problem als logische Aussage formuliert — das System leitet die Antwort selbst her. Prolog ist die bekannteste logische Sprache und findet Anwendung in KI und natürlicher Sprachverarbeitung.