Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 3 Klassen und Objekte
gp 3.1 Objektorientierte Programmierung
gp 3.1.1 Warum überhaupt OOP?
gp 3.1.2 Modularität und Wiederverwertbarkeit
gp 3.2 Klassen benutzen
gp 3.2.1 Die Klasse Point
gp 3.2.2 Etwas über die UML
gp 3.2.3 Anlegen eines Exemplars einer Klasse
gp 3.2.4 Zugriff auf Variablen und Methoden mit dem ».«
gp 3.2.5 Konstruktoren
gp 3.2.6 Die null-Referenz
gp 3.3 Die API-Dokumentation
gp 3.4 Mit Referenzen arbeiten
gp 3.4.1 Zuweisungen bei Referenzen
gp 3.4.2 Funktionen mit nichtprimitiven Parametern
gp 3.4.3 Gleichheit von Objekten und die Methode equals()
gp 3.5 Arrays
gp 3.5.1 Deklaration von Arrays
gp 3.5.2 Arrays mit Inhalt
gp 3.5.3 Die Länge eines Arrays über das Attribut length
gp 3.5.4 Zugriff auf die Elemente
gp 3.5.5 Array-Objekte erzeugen
gp 3.5.6 Fehler bei Arrays
gp 3.5.7 Arrays mit nichtprimitiven Elementen
gp 3.5.8 Arrays und Objekte
gp 3.5.9 Initialisierte Array-Objekte
gp 3.5.10 Mehrdimensionale Arrays
gp 3.5.11 Die Wahrheit über die Array-Initialisierung
gp 3.5.12 Arrays kopieren und füllen
gp 3.5.13 Mehrere Rückgabeparameter
gp 3.5.14 Parameter per Referenz übergeben
gp 3.5.15 Die Klasse Arrays
gp 3.5.16 Der Einstiegspunkt für das Laufzeitsystem main()
gp 3.5.17 Die Anzahl der Parameter
gp 3.5.18 Der Rückgabewert von main() und System.exit()
gp 3.5.19 Parser der Kommandozeilenargumente Apache CLI

Kapitel 3 Klassen und Objekte

Nichts auf der Welt ist so gerecht verteilt wie der Verstand.
Jeder glaubt, er hätte genug davon.


Galileo Computing

3.1 Objektorientierte Programmierungdowntop

Da Java eine objektorientierte Programmiersprache ist, müssen die Konzepte dieses Paradigmas bekannt sein. Erstaunlicherweise sind dies nicht viele, denn objektorientiertes Programmieren (OOP) basiert nur auf einigen wenigen Ideen. Werden diese beachtet, wird OOP nicht zum Verhängnis und der Vorteil gegenüber modularem Programmieren kann ausgeschöpft werden. Bjarne Stroustrup (Schöpfer von C++, von seinen Freunden auch Stumpy genannt) sagte treffend über den Vergleich von C und C++: »C makes it easy to shoot yourself in the foot, C++ makes it harder, but when you do, it blows away your whole leg.«1 2


Hinweis Herkunft der OO-Sprachen: Java ist natürlich nicht die erste OO-Sprache, auch nicht C++. Klassischerweise gelten Smalltalk und insbesondere Simula-67 als Säulen aller OO-Sprachen. Die eingeführten Konzepte sind bis heute aktuell, darunter die vier allgemein anerkannten Prinzipien der OOP: Abstraktion, Kapselung, Vererbung und Polymorphie.2


Galileo Computing

3.1.1 Warum überhaupt OOP?downtop

In der frühen Softwareentwicklung haben sich zwei Modelle herausgebildet, um Programme zu entwerfen: Top-down- und Bottom-up-Analyse. Beide beschreiben jeweils eine Möglichkeit, Software durch schrittweises Verfeinern zu entwerfen. Bei der Top-down-Analyse steht das Gesamtprogramm im Mittelpunkt, und es wird nach den Funktionen gefragt, um diese an der oberen Stelle benötigte Funktionalität implementieren zu können. Ein Beispiel: Es soll ein Fahrplanauskunftsprogramm geschrieben werden. An oberster Stelle verwenden wir drei Funktionen: eine Funktion, die das Programm initialisiert, eine, die die Bildschirmmaske aufbaut, und eine, die die Benutzereingaben entgegennimmt. Anschließend modellieren wir diese drei Funktionen mittels weiterer Funktionen, in der Funktion »Initialisieren« beispielsweise durch »Speicher beschaffen«, »Informationsdatei laden«, »Informationen in Datenstrukturen umsortieren«. Jede dieser Funktionen wird weiter verfeinert, bis die gewünschte Funktionalität erreicht ist. Der Top-down-Ansatz eignet sich somit nur für Systeme, deren untere Stufen nacheinander entwickelt werden. Denn ohne den unteren Teil ist das gesamte Programm nicht lauffähig. Sofort wird hierdurch folgendes Problem sichtbar: Es muss von vornherein klar sein, welche Funktionen die Software hat, und alle Funktionen müssen bekannt sein. Eine Modularisierung in Teilaufgaben ist schwer möglich, und daran krankt diese Analysetechnik. Schauen wir uns deshalb den Bottom-up-Entwurf an. Dieser Entwurf geht genau in entgegengesetzter Richtung vor. Wir entwickeln erst die Komponenten der unteren Stufe und vereinigen sie dann zu einem Modul höherer Abstraktion. Problem: Diese Technik eignet sich zur Entwicklung nur dann, wenn die unteren Stufen tatsächlich eigenständig lauffähig sind.

Beide Methoden sind nicht wirklich befriedigend, und so wurden Mischformen geschaffen. Mit diesen die Softwareprodukte zu gliedern, zeigte ebenfalls nur durchschnittliche Ergebnisse. Objektorientierte Programmierung wird als Schlüssel für die zukünftige Softwareentwicklung angesehen und erweitert die Leistungsfähigkeit der beiden Analysetechniken Bottom-up und Top-down.

Wird gefragt, welche Faktoren zum Umdenken weg von der prozeduralen und hin zur objektorientierten Programmierung geführt haben, so lassen sich im Wesentlichen drei Eigenschaften anführen:

gp In einem Programm stehen die Daten im Vordergrund.
gp Funktionen sind kurzlebiger als Daten.
gp Jede Software ist unzähligen Änderungen unterworfen.

Die objektorientierte Programmierung versucht nun, diese drei Faktoren zu beachten. Stehen die Daten im Vordergrund, so müssen wir weniger in Funktionen denken, sondern in Objekten, die die Daten beschreiben. Damit Änderungen gut möglich sind, kapseln wir die Funktionen so weit von den Daten, dass sie allgemein angewendet werden können.

Wir sehen schon an dieser kurzen Beschreibung, dass ein Objekt immer im Mittelpunkt steht. Alles dreht sich um das Objekt, und dies bezeichnen wir als objektorientiert. Wichtig ist das Design von oben. So ist es auch bei Objektsystemen viel wichtiger, das Design zu beachten, als die Funktionen zu implementieren. Objektorientierte Softwareentwicklung hält sich ganz an die Aussage des französischen Schriftstellers Francois Duc de La Rochefoucauld (1613-1680): »Wer sich zu viel mit dem Kleinen abgibt, wird unfähig für Großes«.


Galileo Computing

3.1.2 Modularität und Wiederverwertbarkeittoptop

Die objektorientierte Programmierung stellt zwei Konzepte in den Mittelpunkt des Softwareentwurfs: Wiederverwendbarkeit (das Problem ist jedem bekannt: Programmieren wiederholt sich an allen Stellen, und das Neuschreiben kann nicht vermieden werden) und Modularität. Bei der Wiederverwendung geht es darum, die Bausteine objektorientierter Systeme, die Klassen, zu nutzen. Daher wollen wir nun erst einmal bereits vorhandene Klassen verwenden. Im zweiten Schritt werden wir dann eigene Klassen programmieren. Anschließend kümmern wir uns um das Konzept der Modularität, nämlich wie Gruppen kooperierender Klassen gestaltet werden.






1 ... oder wie es Bertrand Meyer sagt: »Do not replace legacy software by lega-c++ software«.

2 Keine Sorge, alle vier Grundsäulen werden in den nächsten Kapiteln ausführlich beschrieben!





Copyright (c) Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de