Ein Problem der deklarativen Programmierung besteht darin, daß es mitunter einfacher ist, ein Problem zu lösen als es (formal) zu beschreiben.
Deklarative Programmierung ist an bestimmte Programmiersprachen gebunden. Elemente der prozeduralen und ereignisgesteuerten Programmierung lassen sich zumindest partiell in allen Programmiersprachen realisieren.
Ein Programm, das ereignisgesteuert (event driven) arbeitet, besitzt etwa folgenden Aufbau:
PROGRAM main.
USES ...; { Nutzung von Komponenten aus ... }
VAR event: TEvent { Struktur, die Ereignis beschreibt }
BEGIN
Init; { Initialisierungen }
REPEAT { Wiederhole }
GetEvent(event); { Ereignis ermitteln }
HandleEvent(event); { auf Ereignis reagieren }
UNTIL quit(event); { bis Ende-Anforderung }
Done; { Abschlußhandlungen }
END.
Dagegen ist bei prozeduraler Programmierung die folgende Struktur
charakteristisch:
PROGRAM main.
USES ...; { Nutzung von Komponenten aus ... }
BEGIN
aktion_1; { lineare Folge von Ablaufstrukturen }
aktion_2; { Bemerkung: Eine Ablaufstruktur kann }
... { Bedingungen und Zyklen enthalten }
aktion_n;
END.
Ereignisgesteuerte Programmierung dominiert heute bei der Entwicklung von
Programmen mit grafischer Benutzeroberfläche, z.B. für MS-Windows unter DOS
oder X Window mit OSF/Motif unter Unix. Der Benutzer kann über Tastatur und
Maus, deren Betätigung jeweils ein Ereignis auslöst, weitgehend den
Aufgabenlösungsprozeß beeinflussen. Ereignisgesteuerte Programmierung gewinnt erst seit einigen Jahren an Verbreitung. Sie wird häufig mit objektorientierten Vorgehensweisen verbunden. Im Vergleich zur prozeduralen Programmierung erwartet sie vom Entwickler eine andere Art der Modellierung.
Frameworks
Bei der "klassischen" prozeduralen und ereignisgesteuerten Programmierung
wird ein Hauptprogramm geschrieben, welches den Programmfluß kontrolliert
bzw. durch eine vom Programmierer geschriebene Prozedur kontrollieren
läßt.
Gegenwärtig werden unter dem Stichwort "Frameworks" Alternativen zu dieser
Strategie diskutiert und auch schon realisiert:
Es gibt einen vorgebenen Rahmen (frame), der in der Lage ist, den
Programmfluß zu kontrollieren. Der Rahmen ist jedoch leer bzw. nur
teilweise gefüllt, d.h. die Objekte, mit denen der Rahmen operieren kann,
sind durch den Programmierer hinzuzufügen. Durch Konfiguration ist es in
der Regel möglich, die Arbeitsweise des Rahmens anzupassen.
Die Konstruktion solcher Rahmen erfordert einen hohen Grad der Abstraktion. Sie
erfolgt immer in Bezug auf eine bestimmte Klasse von Aufgabenstellungen, z.B.
Realisierung einer grafischen Benutzerschnittstelle.
Rahmen werden typischerweise ereignisgesteuert arbeiten.
Eine solche Technologie hat Vor- und Nachteile:
Vorteile