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

 << zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5
Java ist auch eine Insel

Java ist auch eine Insel
5., akt. und erw. Auflage
1454 S., mit CD, 49,90 Euro
Galileo Computing
ISBN 3-89842-747-1
gp Kapitel 3 Klassen und Objekte
  gp 3.1 Objektorientierte Programmierung
    gp 3.1.1 Warum überhaupt OOP?
    gp 3.1.2 Wiederverwertbarkeit
  gp 3.2 Klassen benutzen
    gp 3.2.1 Die Klasse Point
  gp 3.3 Die UML (Unified Modeling Language)
    gp 3.3.1 Hintergrund und Geschichte zur UML
    gp 3.3.2 Wichtige Diagrammtypen der UML
  gp 3.4 Anlegen und Nutzen eines Punktes
    gp 3.4.1 Definieren von Referenz-Variablen
    gp 3.4.2 Anlegen eines Exemplars einer Klasse mit dem new-Operator
    gp 3.4.3 Zugriff auf Variablen und Methoden mit dem ».«
    gp 3.4.4 Konstruktoren nutzen
  gp 3.5 Import und Pakete
  gp 3.6 Die API-Dokumentation
  gp 3.7 Mit Referenzen arbeiten
    gp 3.7.1 Die null-Referenz
    gp 3.7.2 Zuweisungen bei Referenzen
    gp 3.7.3 Funktionen mit nichtprimitiven Parametern
    gp 3.7.4 Gleichheit von Objekten und die Methode equals()
  gp 3.8 Arrays
    gp 3.8.1 Deklaration von Arrays
    gp 3.8.2 Arrays mit Inhalt
    gp 3.8.3 Die Länge eines Arrays über das Attribut length
    gp 3.8.4 Zugriff auf die Elemente über den Index
    gp 3.8.5 Array-Objekte erzeugen
    gp 3.8.6 Fehler bei Arrays
    gp 3.8.7 Arrays mit nicht-primitiven Elementen
    gp 3.8.8 Vorinitialisierte Arrays
    gp 3.8.9 Die erweiterte for-Schleife
    gp 3.8.10 Mehrdimensionale Arrays
    gp 3.8.11 Die Wahrheit über die Array-Initialisierung
    gp 3.8.12 Mehrere Rückgabewerte
    gp 3.8.13 Argument per Referenz übergeben
    gp 3.8.14 Arrays klonen
    gp 3.8.15 Feldinhalte kopieren
    gp 3.8.16 Die Klasse Arrays zum Vergleichen, Füllen und Suchen
    gp 3.8.17 Methode mit variabler Argumentanzahl (vararg)
  gp 3.9 Der Einstiegspunkt für das Laufzeitsystem main()
    gp 3.9.1 Kommandozeilen-Parameter ausgeben
    gp 3.9.2 Der Rückgabewert von main() und System.exit()
    gp 3.9.3 Parser der Kommandozeilenargumente Apache CLI
  gp 3.10 Eigene Pakete schnüren
    gp 3.10.1 Die package-Anweisung
    gp 3.10.2 Importieren von Klassen mit import
    gp 3.10.3 Paketnamen
    gp 3.10.4 Hierarchische Strukturen und das Default-Package
    gp 3.10.5 Klassen mit gleichen Namen in unterschiedlichen Paketen
    gp 3.10.6 Statisches Import
    gp 3.10.7 Eine Verzeichnisstruktur für eigene Projekte

Kapitel 3 Klassen und Objekte

Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes.


Galileo Computing

3.1 Objektorientierte Programmierundowntop

In einem Buch über die Java-Programmierung müssen mehrere Teile vereinigt werden: einmal die grundsätzliche Programmierung nach dem imperativen Prinzip für Funktionen und eine neue Grammatik für Java, dann die Objektorientierung und die Bibliotheken. Dieses Kapitel stellt das Paradigma der Objektorientierung in den Mittelpunkt und zeigt die Syntax, wie etwa in Java Vererbung realisiert wird.


Hinweis    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

Da Menschen die Welt in Objekten wahrnehmen, wird auch die Analyse von Systemen häufig schon objektorientiert modelliert. Doch mit prozeduralen Systemen, die lediglich Funktionen als Ausdrucksmittel haben, wird die Abbildung des objektorientierten Designs in eine Programmiersprache schwer, und es entsteht ein Bruch. Im Laufe der Zeit entwickeln sich Dokumentation und Implementierung auseinander, und die Software wird schwer zu warten und zu erweitern sein.

Die in der Software abgebildeten Objekte haben drei wichtige Eigenschaften:

gp  Jedes Objekt hat eine Identität.
gp  Jedes Objekt hat einen Zustand.
gp  Jedes Objekt zeigt ein Verhalten.

Diese drei Eigenschaften haben wichtige Konsequenzen. Zum einen, dass die Identität des Objekts zum Zeitpunkt des Lebens bis zum Tod bleibt und sich nicht ändern kann. Zweitens werden die Daten und der Programmcode zur Manipulation dieser Daten als zusammengehörig behandelt. In prozeduralen Systemen finden sich oft Szenarien wie das folgende: Es gibt einen großen Speicherbereich, auf den alle Funktionen irgendwie zugreifen können. Bei den Objekten ist das anders, da sie logisch ihre eigenen Daten verwalten und die Manipulation überwachen.

In der Objektorientierten Softwareentwicklung geht es also darum, objektorientiert zu modellieren und dann zu programmieren. Das Design nimmt dabei eine zentrale Stelle ein; große Systeme werden zerlegt und immer feiner beschrieben. Hier passt sehr gut die Aussage des französischen Schriftstellers François 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 Wiederverwertbarkeit  toptop

Bei jedem neuen Projekt wird auffallen, dass in früheren Projekten schon ähnliche Probleme gelöst werden mussten. Natürlich sollen jetzt nicht schon gelöste Probleme wieder neu implementiert werden, sondern sich wiederholende Teile sollen bestmöglich in unterschiedlichen Kontexten wieder verwendet werden können; das Ziel ist die bestmögliche Wiederverwendung von Komponenten.

Wiederverwertbarkeit von Programmteilen gibt es nicht erst in objektorientierten Programmiersprachen, aber objektorientierte Programmiersprachen erleichtern die Programmierung wiederverwendbarer Softwarekomponenten. So sind auch die vielen tausend Klassen der Bibliothek ein Beispiel dafür, dass sich Entwickler nicht immer wieder um die Umsetzung der gleichen Dinge wie Datenstrukturen und Pufferung von Datenströmen kümmern müssen.

Auch wenn Java eine objektorientierte Programmiersprache ist, muss das kein Garant für tolles Design und optimale Wiederverwertbarkeit sein. Eine objektorientierte Programmiersprache erleichtert objektorientiertes Programmieren, aber auch in einer einfachen Programmiersprache wie C lässt sich objektorientiert programmieren. In Java sind auch Programme möglich, die nur aus einer Klasse bestehen und dort 5000 Zeilen Programmcode mit statischen Methoden unterbringen. 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.«

Didaktisch wird dieses Kapitel zunächst einige Klassen der Standard-Bibliothek verwenden, zu Beginn die Punkte repräsentierende Klasse Point. In einem zweiten Schritt werden wir eigene Klassen programmieren. Anschließend kümmern wir uns um das Konzept der Modularität in Java, nämlich: wie Gruppen zusammenhängender Klassen gestaltet werden.




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

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

 << zurück




Copyright © Galileo Press GmbH 2005
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, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de