3.4 Objektorientierte Programmierung
Denke nicht in Algorithmen, sondern in Objekten!
Steigende Komplexität, schlechte Planung, mangelnde Spezifikation, unzureichende Projekteinschätzung, ungenügende Kalkulation, missverstandene Aufgabenstellung und daraus resultierende Terminüberschreitung, Sprengung des Budgets, Nichterfüllung der Anforderungen und schlechte Performance bis hin zur Unbrauchbarkeit der Software – nur einige leider immer wieder auftretende Schwierigkeiten bei der Erstellung von Programmen, die in den Siebzigerjahren den Begriff Softwarekrise geprägt haben.
Siehe Teil III, »Objektorientierung«
Um diese Krise in den Griff zu bekommen, sind große Anstrengungen unternommen und zahlreiche Lösungsansätze entwickelt worden, von denen die objektorientierte Programmierung (OOP) die populärste ist. Nicht zuletzt aus diesem Grund ist ihr in diesem Buch sehr viel Raum gewidmet! Aber auch die Objektorientierung ist kein Garant für die termingerechte und erfolgreiche Durchführung eines Projektes.
3.4.1 Programmiermodelle
ActionScipt basiert wie zahlreiche andere Sprachen, darunter z.B. JavaScript, Java und C++, auf dem objektorientierten Modell. Die Programmiersprachen eines Modells ähneln sich in der Regel sehr, Sprachen unterschiedlicher Modelle hingegen verhalten sich auch sehr unterschiedlich. Aus diesem Grund fällt der Wechsel zwischen Programmiersprachen in der Regel nicht allzu schwer, wenn man einmal die Konzepte des zugrunde liegenden Modells verinnerlicht hat – seien Sie also nicht allzu frustriert, wenn ein Programmierer bereits nach kurzer Zeit ActionScript beherrscht. Dies hat nichts mit seinen Flash-Fähigkeiten zu tun …
Aber egal, für welches Modell Sie sich letztendlich entscheiden. Grundsätzlich gilt: Alle Programmiersprachen sind gleich mächtig, da der Computer letztendlich jede Anweisung eines Programms in eine binäre Maschinensprache übersetzt, also in Nullen und Einsen. Dabei kann eine einzige Anweisung in einer höheren Programmiersprache für Tausende von Befehlen in Maschinensprache stehen.
Tabelle 3.1
Höhere Programmiersprachen
|
Beispiel
|
Jahr
|
Imperative Programmierung
|
Basic
|
1964
|
|
Pascal
|
1970
|
|
C
|
1972
|
Funktionale Programmierung
|
Lisp
|
1969
|
Logische Programmierung
|
Prolog
|
1972
|
Objektorientierte Programmierung (OOP)
|
Smalltalk
|
1972
|
|
C++
|
1986
|
|
Java
|
1990
|
Die höheren Sprachen – zu denen auch ActionScript zählt – bieten darüber hinaus den Vorteil, dass sie deutlich einfacher zu erlernen und zu beherrschen sind als niedrige Sprachen wie die Maschinensprache oder Assembler. Es ist ein geringeres Abstraktionsvermögen seitens des Entwicklers notwendig, da sich diese Art der Softwareentwicklung stärker an der Lösung der eigentlichen Aufgabe als an der Maschine orientiert.
3.4.2 Metaphern und Konzepte
siehe Kapitel 13
Die Objektorientierung bietet als zusätzliche Pluspunkte mit den Objekten eine aus der realen Welt bekannte Metapher, die es ermöglicht, die echte Welt in den Computer zu übertragen (Abstraktion). Diese Metapher erlaubt es darüber hinaus, Programme einfach in modulare und gekapselte Einheiten zu unterteilen, die sich durch Wiederverwendbarkeit auszeichnen (Blackbox-Prinzip).
Die Objektorientierung geht aber noch einen Schritt weiter und verwendet die Prinzipien der Evolution, indem sie es ermöglicht, ganze Klassen von Objekten zu erstellen sowie Fähigkeiten und Eigenschaften zu vererben. Auf diese Art und Weise versuchen Programmierer, die Probleme der Softwarekrise in den Griff zu bekommen. Für den weiter oben erwähnten Pfannkuchen bedeutet das, dass die Datenstruktur als Klasse abgelegt wird und über die Eigenschaften hinaus noch Fähigkeiten erhält.
Auf diese Art und Weise funktioniert die Klasse aller Pfannkuchen – egal wie viele Vorkommen des Pfannkuchens gebraucht werden – beinahe in allen Umgebungen, ohne weitere Kenntnisse ihrer inneren Struktur:
// Definiere Klasse mit ActionScript 1 (Prototyp)
function Pfannkuchen (zutaten) {
// Erzeuge den Pfannkuchen
}
// Definiere Fähigkeiten
Pfannkuchen.prototyp.verspeise = function () {
// Verspeise den Pfannkuchen
}
// Erzeuge Vorkommen der Klasse
meinPfannkuchen = new Pfannkuchen(zutaten);
meinPfannkuchen.verspeise();
neuerPfannkuchen = new Pfannkuchen(zutaten);
Übrigens: In einer eigenständigen ActionScript 2-Datei namens Pfannkuchen.as sähe dieses Beispiel ungefähr so aus:
// Definiere Klasse mit ActionScript 2 (class)
class Pfannkuchen {
function Pfannkuchen (zutaten) {
// Erzeuge den Pfannkuchen
}
// Definiere Fähigkeiten
function verspeise () {
// Verspeise den Pfannkuchen
}
}
Der weitere Programmcode direkt in Flash ist mit dem von ActionScript 1 weitestgehend identisch:
// Erzeuge Vorkommen der Klasse
meinPfannkuchen = new Pfannkuchen(zutaten);
meinPfannkuchen.verspeise();
neuerPfannkuchen = new Pfannkuchen(zutaten);
Flash für Programmierer
Aus der Sicht eines »klassischen« Programmierers von Hochsprachen wie Java und C++ mutet Flash mit all seinen Design-Werkzeugen und der Zeitleiste nicht wie eine ernsthafte Entwicklungsumgebung an. Und in der Tat gehört die Entwicklungsumgebung Flash eher zu der Klasse der Autorensysteme, deren ursprüngliches Ziel die Anwendungsentwicklung weitestgehend ohne Programmierung ist. Obwohl Flash ein Autorensystem inklusive vieler Zeichenwerkzeuge geblieben ist, sind zahlreiche Hilfsmittel hinzugekommen, die zusätzlich die Programmierung anspruchsvoller und umfangreicher Anwendungen ermöglichen und Flash so in die Riege der »richtigen« Entwicklungsumgebungen katapultieren und somit für die »klassischen« Programmierer interessant machen.
Zusätzlich bereichern die Konzepte von Flash richtig eingesetzt die Programmierung. Die bei regieorientierten Autorensystemen (Filmmetapher) verwendete Zeitleiste ist ein gutes Beispiel. Die Zeitleiste mit ihren Bildern kann als eine Liste mit aneinander gereihten Zuständen gesehen werden. Eine Animation ist somit nichts anderes als die kontinuierliche Darstellung von hintereinander liegenden Zuständen. Dank der Programmiersprache ist ein willkürlicher Wechsel zwischen den Zuständen jederzeit möglich, wodurch die Bilder in der Zeitleiste eine gute Alternative zu Variablen und Eigenschaften sind, um komplexe – in erster Linie grafische – Datenstrukturen zu beinhalten.
Einführung in Flash
Eine ausführliche Einführung in die Grundlagen und die Funktionsweise von Flash finden Sie in unserem Buch »Flash MX 2004 – Grundlagen und Praxislösungen« (ISBN 3-89842-468-5).
3.4.3 Leistungsfähigkeit
Ist Objektorientierung leistungsfähiger als andere Herangehensweisen? Diese Frage lässt sich mit einem klaren Nein beantworten. Zwar wird der Entwicklungsprozess durch OOP verbessert, aber es kann auf diese Art und Weise nichts programmiert werden, was nicht durch andere Programmiermodelle lösbar wäre. Alle Programmiersprachen leisten das Gleiche, und das wiederum ist eine der wichtigsten Erkenntnisse der Informatik. Jede Programmiersprache wird letztendlich in Maschinensprache übersetzt und hat somit die gleichen Möglichkeiten (mehr zu diesem Thema finden Sie in der Informatik unter den Begriffen »Turingmaschine« und »Churchs These«).
OOP zählt oft zu den effizientesten Programmiermöglichkeiten. Aber nicht in allen Fällen: Wenn es sich um künstliche Intelligenz handelt, sind z.B. logische Programmiersprachen wie Prolog sehr beliebt (bei Prolog handelt es sich um eine Programmiersprache, die auf der Angabe von logischen Regeln aufbaut).
Übrigens sind aus der Sicht der Informatik die Programmiermöglichkeiten von Flash bereits seit Flash 2 identisch. Sie haben natürlich Recht, dass Flash MX 2004 viel mehr kann als Flash 2. Aber trotzdem lösen alle Versionen zumindest theoretisch die gleiche Menge mathematischer Probleme. Eine aktuelle Version von Flash benötigt in vielen Fällen aber nur einen Bruchteil der früher notwendigen Entwicklungszeit.
|