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:
int main(void)
{
t_event event; /* Struktur, die Ereignis beschreibt */
init(); /* Initialisierungen */
do { /* Wiederhole */
get_event(event); /* Ereignis ermitteln */
handle_event(event); /* auf Ereignis reagieren */
}
while ( ! quit(event) ); /* bis Ende-Anforderung */
done(); /* Abschlußhandlungen */
return 0;
}
Dagegen ist bei prozeduraler Programmierung die folgende Struktur
charakteristisch:
int main(void)
{
aktion_1; /* lineare Folge von Ablaufstrukturen */
aktion_2; /* Bemerkung: Eine Ablaufstruktur kann */
... /* Bedingungen und Zyklen enthalten */
aktion_n;
return 0;
}
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