![]() |
|
|
Startseite Grundlagen
|
JAVA - Eine objektorientierte Programmiersprache Java ist eine objektorientierte Programmiersprache - das bedeutet, dass beim Programmieren Objekte verwendet werden, die den Ablauf des Programmes bestimmen. In diesem Abschnitt möchte ich den Begriff Objektorientierung allgemein erklären und die Bedeutung und Auswirkungen auf das Programmieren erfassen. Seit ca. fünf Jahren gibt es effiziente Werkzeuge zum Entwerfen von komplexen Programmen. Dabei werden die Objekte und ihr Zusammenhang innerhalb eines Systems grafisch dargestellt, nicht aber die Programmierung. Leider haben diese Werkzeuge unterschiedliche Darstellungen verwendet. Seit ca. zwei Jahren scheint es gelungen zu sein, die Darstellung weltweit zu vereinheitlichen und in Form der UML (Unified Modelling Language) herauszubringen. Seitdem hat die Modellierung eines Problemes nicht nur die Programmierabteilungen erfasst, sondern ist in völlig andere Bereiche eingedrungen (auch Anwender und Geschäftsleitung reden jetzt bei Problemen mit). Mit Hilfe der UML ist es gelungen, dass sich alle beteiligten Stellen einer einheitlichen Sprache bedienen (vom Management bis zur Buchhaltung) und Probleme bei der Umsetzung in ein Programm verstehen können. Genau deshalb glaube ich, das UML als Verständigungsmittel zwischen Gruppen, Abteilungen und Management in Zukunft immer öfters eingesetzt wird (weiss ich aus eigener Erfahrung!). Ich selbst kenne einige Firmen in der UML als Voraussetzung für einen Job absolut notwendig ist, unabhängig von der Position. Ich habe deshalb versucht bei der Objektorientierung die Grundlagen von UML soweit es Objekte betrifft mitzunehmen.
|
|
| Ein Auto mit einem bestimmten Kennzeichen, das zusammengefallene Haus an der Ecke, der Computer am Arbeitsplatz, die Eiche im Park, die Homepage eines Freundes, die Person, die mir immer den letzten Parkplatz wegschnappt, usw. |
|
Das Auto besitzt ein Kennzeichen, eine Farbe, eine Geschwindigkeit, eine Länge, usw. Das Haus hat Mauern, Fenster, Türen, eine Grundfarbe, ein Dach, usw. Der Computer besitzt eine Taktfrequenz, Speicherplatz, ein CD-Laufwerk, usw. Die Eiche hat einen Stamm, Blätter, Zweige, Äste, usw. Die Homepage besitzt eine Adresse, Inhalt (hoffentlich), Links, Grafiken, usw. Die Person besitzt einen Namen, Haar- und Augenfarbe, Grösse, Geschlecht, usw. |
|
Das Auto kann sich bewegen, blinken, bschleunigen, bremsen, usw. Das Haus kann Fenster und Türen öffen/schliessen und auch zusammenfallen. Der Computer kann rechnen, lesen, speichern, abstürzen, usw. Die Eiche kann wachsen, grünen, Früchte tragen, usw. Die Homepage kann auf andere Seiten weiterleiten, Grafik animieren, Musik abspielen, usw. Und was die Person alles kann, muss ich nicht extra erwähnen. |
| Zwei Autos vom gleichen Typ unterscheiden sich durch die Farben rot und blau und natürlich durch die Nummer des Kennzeichens. |
|
Wenn wir den Typ eines Objektes beschreiben, so definieren wir die Eigenschaften (ohne Ausprägung) und die Methoden. Auf diese Weise erhalten wir eine Definition, die für jedes Objekt dieses Typs gilt.
Versuchen wir ein Auto ganz einfach zu definieren:|
Eigenschaften: - Farbe - Geschwindigkeit Methoden: - beschleunigen - bremsen |
![]() UML-Darstellung |
|
| Ein Lastwagen verhält sich in der realen Welt anders als ein Sportwagen. Während beim Sportwagen die Beschleunigung als Eigenschaft sehr wichtig ist, spielt sie beim Lastwagen keine Rolle. Umgekehrt ist das max. erlaubte Gewicht beim Sportwagen belanglos, aber beim Lastwagen sehr wichtig. Beim Autobus ist jede dieser Eigenschaften wichtig. |
Sowohl der Sportwagen, als auch der Lastwagen bzw. der Autobus besitzen gleiche Eigenschaften, wie Länge, Breite, Höhe,
Anzahl der Räder, Anzahl der Sitzplätze, usw. Diese Gemeinsamkeiten definieren wir in einer Klasse Auto:
class Auto Eigenschaften: - Länge - Breite - Höhe - Radanzahl - Sitzplatzanzahl Methoden: - beschleunigen - bremsen |
![]() UML-Darstellung |
| Der Lastwagen besitzt eine zusätzliche Eigenschaft max. Gewicht, der Sportwagen die Eigenschaft Beschleunigung und der städtische Autobus die Eigenschaft Anzahl der Stehplätze. Dazu benötigen die Klassen noch jeweils eigene Methoden um das spezielle Verhalten zu steuern. |
class Sportwagen erbt von Auto Eigenschaften: - Beschleunigung Methoden: keine |
Lastwagen erbt von Auto Eigenschaften: - max. Zuladung Methoden: - zuladen - entladen |
Autobus erbt von Auto Eigenschaften: - Stehplatzanzahl Methoden: - einsteigen - aussteigen |
Wenn wir den Ausdruck erbt von verwenden, dann übernehmen wir alle Eigenschaften und Methoden einer Klasse
in unsere neue Klasse. Die Klasse Sportwagen kann die Methoden beschleunigen und bremsen der übergeordneten
Klasse Auto genauso verwenden, wie der Lastwagen oder der Autobus. Für uns bedeutet das beim Programmieren, dass
wir diese Methoden nicht neu machen müssen, sondern uns darauf verlassen können dass sie funktionieren. Der
Vererbungsmechanismus in der Programmiersprache sorgt dafür, dass wir die Methode bremsen der Klasse Sportwagen
ausführen können, obwohl sie in der Klasse Auto definiert ist.
In der nebenstehende Abbildung wird gezeigt, wie Vererbung in einem UML-Diagramm dargestellt wird. Die Pfeile zeigen in
die Richtung zur übergeordneten Klasse und bedeuten erbt von.
Beim Programmieren nennen wir die übergeordnete Klasse (von der vererbt wird) Basisklasse oder Superclass, die
neue, vererbte Klasse nennen wir Derivat oder Subclass. Das Derivat kann Methoden und Eigenschaften der Basisklasse
verwenden, als seien es seine eigenen.
Ist bereits eine Sammlung von Klassen vorhanden, so können wir sie verwenden, um eigene Klassen davon abzuleiten und Programme
zu erstellen. In dem Java JDK sind bereits sehr viele Klassen, für alle möglichen Objekte, vorhanden. Benötigen wir
für ein Objekt eine neue Klasse, so suchen wir uns die Klasse, die die Anforderungen am besten erfüllt, aus dem JDK
heraus und verwenden sie als Basisklasse. Die neue Klasse erweitern wir um die noch fehlenden Eigenschaften und Methoden.
Mit dem Vererbungsmechanismus sind wir in der Lage Klassen wiederzuverwenden, ohne sie neu zu definieren. Dabei spielt es
keine Rolle von wem die Klassen definiert wurde.
Manche objektorientierten Programmiersprachen sind in der Lage eine Vererbung von mehreren Basisklassen zu einer neuen
Klasse herbeizuführen. Dabei werden alle Eigenschaften und alle Methoden sämtlicher Basisklassen auf die abgeleitete
Klasse vererbt. Diese Funktionalität hat die Programmierer dieser Welt in zwei Lager gespalten. Die eine Seite behauptet, zum
objektorientierten Programmieren gehört die Mehrfachvererbung unbedingt dazu, die andere Seite kontert damit, dass die
Mehrfachvererbung ein Programm nur unübersichtlich und unverständlich macht. Tatsache ist, dass es immer noch keinen
einzigen Fall der Mehrfachvererbung gibt, der sich nicht durch normale Vererbung ersetzen lassen würde.
In der Programmiersprache Java ist eine Mehrfachvererbung nicht erlaubt. Diese Möglichkeit wird aber durch das mehrfache
implementieren von Interfaces (Schnittstellen) erreicht. Dazu gibt es später mehr Information.
|
class Raketenauto erbt von Sportwagen Eigenschaften: keine Methoden: - beschleunigen |
|
Nehmen wir die Methode beschleunigen unserer Klasse Auto. Die Methode verwendet eine weitere Methode
Treibstoff erhöhen und führt davor noch einige Prüfungen aus, wie z.B. Treibstoff vorhanden,
Drehzahl ok und Motor nicht zu heiss. Für diese Prüfungen benötigen wir noch einige
Eigenschaften, die wir ebenfalls definieren. Diese Eigenschaften verbergen wir von der Aussenwelt. Wir wollen
schliesslich nicht, das jemand der keine Ahnung hat, daran manipuliert. Die Methode beschleunigen hingegen stellen
wir öffentlich zur Verfügung und jeder der ein Objekt Auto beschleunigen will, kann sie verwenden.
class Auto
Eigenschaften:
- (geschützt) Treibstoffmenge
- (geschützt) Drehzahl
- (geschützt) Motortemperatur
Methoden:
- (geschützt) Treibstoff erhöhen
- (öffentlich) beschleunigen
wenn
- Drehzahl kleiner 5000 U/min? und
- Motortemperatur kleiner 90 Grad? und
- Treibstoffmenge ausreichend?
dann
- Treibstoff erhöhen
- (öffentlich) bremsen
|
UML verwendet Symbole um Eigenschaften und Methoden als geschützt oder öffentlich
zu markieren (in unserem Fall einen Schlüssel). Leider sind die Symbole nicht einheitlich.
![]() UML-Darstellung |
|
| Unser Beispielauto entsteht in den Moment an dem es die Fabrik verlässt, hat dann hoffentlich ein langes Leben und wird beim Verschrotten endgültig zerstört. |
|
auto1 = new Auto auto1.Farbe = "schwarz" auto2 = new Auto auto2.Farbe = "blau" auto3 = new Auto auto3.Farbe = "rot" | In diesem Beispiel erzeugen wir aus der Klasse Auto die drei Objekte auto1, auto2 und auto3. Den drei Objekten weisen wir in der Eigenschaft Farbe verschiedene Farben zu. Wann immer wir wollen, können wir der Eigenschaft Farbe andere Werte zuweisen. Die Objekte auto1, auto2 und auto3 nennt man auch Instanzen (Instance) der Klasse Auto. |
|
// Klasse Auto definieren
public class Auto {
// Eigenschaften:
static public int Gesamtanzahl;
// Methoden:
public Auto() { Gesamtzahl++; }
}
// Klasse Auto verwenden
public void main() {
auto1 = new Auto();
auto2 = new Auto();
auto3 = new Auto();
}
| In diesem Beispiel verwenden wir zum erstenmal Javasyntax. Es liess sich leider nicht anders erklären. Zuerst definieren wir in der Klasse Auto die Constructor-Methode Auto(). In dieser Methode erhöhen wir die statische Variable Gesamtanzahl um eins. Das bedeutet, dass jedesmal wenn der Constructor aufgerufen wird, die Klassenvariable Gesamtzahl um eins erhöht wird. In unserem Programm (hier nur teilweise dargestellt) erzeugen wir mit dem Befehl new drei Instanzen der Klasse Auto. Beim Erzeugen der Instanz wird der Constructor immer automatisch aufgerufen und die Klassenvariable erhöht. Da die Klassenvariable für alle Instanzen nur einmal vorhanden ist, besitzt sie zum Schluss den Wert drei. Wir wissen also, wieviele Instanzen erzeugt wurde. |
weiter:![]() zurück: ![]() |
Wie arbeitet man mit Klassen, Methoden usw. Grundlagen
|
|
© 1999-2001 Johann Plank
|