Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5 (Tiger-Release)
Buch: Java ist auch eine Insel
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 mit new
    gp 3.2.4 Zugriff auf Variablen und Methoden mit dem ».«
    gp 3.2.5 Konstruktoren
  gp 3.3 Import und Pakete
  gp 3.4 Die API-Dokumentation
  gp 3.5 Mit Referenzen arbeiten
    gp 3.5.1 Die null-Referenz
    gp 3.5.2 Zuweisungen bei Referenzen
    gp 3.5.3 Funktionen mit nichtprimitiven Parametern
    gp 3.5.4 Gleichheit von Objekten und die Methode equals()
  gp 3.6 Arrays
    gp 3.6.1 Deklaration von Arrays
    gp 3.6.2 Arrays mit Inhalt
    gp 3.6.3 Die Länge eines Arrays über das Attribut length
    gp 3.6.4 Zugriff auf die Elemente
    gp 3.6.5 Array-Objekte erzeugen
    gp 3.6.6 Fehler bei Arrays
    gp 3.6.7 Arrays mit nicht-primitiven Elementen
    gp 3.6.8 Initialisierte Array-Objekte
    gp 3.6.9 Die erweiterte for-Schleife
    gp 3.6.10 Mehrdimensionale Arrays
    gp 3.6.11 Die Wahrheit über die Array-Initialisierung
    gp 3.6.12 Mehrere Rückgabewerte
    gp 3.6.13 Argument per Referenz übergeben
    gp 3.6.14 Arrays klonen
    gp 3.6.15 Feldinhalte kopieren
    gp 3.6.16 Die Klasse Arrays zum Vergleichen, Füllen, Suchen
    gp 3.6.17 Methode mit variabler Argumentanzahl (vararg)
  gp 3.7 Der Einstiegspunkt für das Laufzeitsystem main()
    gp 3.7.1 Kommandozeilen-Parameter ausgeben
    gp 3.7.2 Der Rückgabewert von main() und System.exit()
    gp 3.7.3 Parser der Kommandozeilenargumente Apache CLI
  gp 3.8 Eigene Pakete schnüren
    gp 3.8.1 Die package-Anweisung
    gp 3.8.2 Importieren von Klassen mit import
    gp 3.8.3 Paketnamen
    gp 3.8.4 Hierarchische Strukturen und das Default-Package
    gp 3.8.5 Klassen mit gleiche Namen in unterschiedlichen Paketen
    gp 3.8.6 Statische Imports
    gp 3.8.7 Eine Verzeichnisstruktur für eigene Projekte

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 Programmierundowntop

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.«


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.


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 Wiederverwertbarkeit  toptop

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 © 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