Hallo,
Die Unterscheidung in verschiedene Programmierparadigmen fällt in das Gebiet der Softwaretechnik (zumindest bei uns).
Du könntest also vermutlich ein paar Anhaltspunkte in Softwaretechnikbüchern finden (z.B. "Heide Balzert: Lehrbuch zur Objektmodellierung" zur Objektorientierten Programmierung (auch wenn es dort viel um UML und Beschreibung geht)).
Ansonsten lassen sich die Programmierparadigmen am besten an "Axiomen" oder Richtlinien festmachen. Manche sind auch besonders mit verschiedene Sprachen verknüpft.
Du könntest vermutlich gut ein paar Beispiele bringen, wie einige Aufgaben (z.B. Berechnung der Fakultät oder Summe einer Liste oder finden des größten Elements etc.) mit verschiedenen Paradigmen gelöst werden.
Und erklären, warum in manchen Situationen manche Paradigmen Vorteile oder Nachteile haben.
Imperativ:
- Programm als Folge von Befehlen
- Prozedurorientiert
- Schleifen, Kontrollstrukturen
- Lokale Variablen
- Befehl als Zustandsänderung der Maschine
- Z.B: C, Assembly, Java (zum Teil)
OOP:
- Objekte als Einheiten
- Zustand der Maschine durch Zustand der Objekte definiert
- Methoden als Zustandsänderung
- Datenkapselung
- Objekt als Instanz einer Klasse
- Klassen als Prototypen von Objekten
- Polymorphie (Vielgestaltigkeit -> Klassentemplates, Vererbung, Generische Typen, Statische Polymorphie)
- Entwurfsmuster
- Kommunikation über Events und Methoden
- Beispiele: Java, C#, C++, Visual Basic
Funktional:
- Funktionen als mathematische Funktionen interpretieren
- Keine Seiteneffekte
- Rekursion
- Keine lokalen Variablen
- Zustandslosigkeit der Funktionen
- Rückgabewert ergibt sich aus Semantik der Funktion unter den Parameter
- Beispiele: CAML, Java (manchmal), Lisp, Haskell
usw...
Natürlich sind die Paradigmen nur die Ecksteine, man bewegt sich gewöhnlich irgendwo in der Mitte (z.B: gibt es auch in der Objektorientierten Programmierung oft imperative Blöcke in den Klassen und viele Klassen haben statische Hilfsfunktionen (die man eher bei der Funktionalen Programmierung einordnet)).
Man kann in vielen Sprachen auch zwischen den Paradigmen wechseln. Man kann z.B. in C oder Java oder C++ sowohl imperativ als auch funktional (und in den letzteren beiden auch objektorientiert) programmieren.
Daneben gibt es auch noch andere Paradigmen. Prädikatives (logisches) Programmieren hast du schon erwähnt. Dann gibt es noch das relationale Programmieren, das normalerweise in Zusammenhang mit relationalen Datenbanken (SQL) steht.
Wir haben das Thema ausgiebig in der Uni in Softwaretechnik (und in OOP) behandelt. Wenn du interesse hast, kann ich mal schauen, ob ich das Script dazu noch finde.
mfg, metax.