Inhaltsverzeichnis API Einführung Java Entwicklungs-Kit Erste Programme Java-Grundwissen Erste Objekte Ein/Ausgabe in Java Oft benutzte Java-Werkzeuge Graphische Oberfläche Applets Threads Netzwerk Das TopDraw-Projet

Erste Objekte

  1. Erste Objekte
    1. Was ist ein Objekt?
    2. Objekt? Klasse?
    3. Unsere erste Klasse: Fahrzeug
      1. Daten und Methoden
      2. Konstruktoren
      3. Überladen
    4. Benutzung von Fahrzeug
      1. Wie wird ein Objekt instanziiert?
      2. Wie wird ein Objekt benutzt?
    5. Vererbung
        1. Warum wurde personenGeeignet nicht vererbt?
        2. Warum wurde die 2 Konstruktoren von Fahrzeug nicht an Auto vererbt?
        3. Was bedeutet super(n,v); im Konstruktor von Auto
        4. Die Klasse Auto definiert erneut die Methode toString(), die es schon in Fahrzeug gab?
        5. Übung: wie wird die Klasse Auto benutzt? Was wird folgendes Programm ausgeben?
    6. Relationen zwischen Objekten
    7. Zusammenfassung
    8. Übungen
      1. PersonenWagen
      2. Autobahn

Was ist ein Objekt?

Es ist ein Konstrukt aus der Informatik welches die Eigenheit besitzt zwei Sachen zu gruppieren:

Einkapselug

Die objektorientierte Philosophie sieht vor, daß ein Objekt eine undurchsichtige Schachtel ist, so daß die Innereien von aussen nicht sichtbar sind. Um die Daten die irgendwo im Inneren versteckt sind, zu verändern werden die (öffentlichen) Methoden desselben Objektes benutzt.

Objekt? Klasse?

Unsere erste Klasse: Fahrzeug

Datei Fahrzeug.java

Daten und Methoden

Konstruktoren

Bevor ein Objekt benutzt werden kann, muß es erst einmal erzeugt werden, dazu werden spezielle Methoden benutzt, die Konstruktoren genannt werden. Diese Konstruktoren müssen folgenden Kriterien entsprechen:

Überladen

In dem Beispiel haben wir zwei Methoden, die den gleichen Namen tragen (die Konstruktoren). Die erste braucht keine Argumente, die zweite eine Zeichenkette und eine natürliche Zahl als Argumente. Dies ist möglich dank dem Konzept des Überladens.

Wie in vielen Objektorientierten Sprachen ist es in Java möglich mehrere gleichnamige Methoden zu haben, vorausgesetzt sie unterscheiden sich in der Liste der Argumente. Der Kompiler wird den Unterschied anhand der Parameter-Liste machen.

Benutzung von Fahrzeug

Die Fahrzeug-Klasse ist vollständig, aber es ist weder ein Applet (ist nicht von Applet abgeleitet) noch ein eigenständiges Programm (keine main-Methode). Es wird also eine weitere Klasse gebraucht um diese Fahrzeuge zu erzeugen.

Wie wird ein Objekt instanziiert?

  1. Es deklarieren. Beispiel: Fahrzeug Schubkarre
  2. Einen Konstruktor aufrufen. Beispiel: Schubkarre = new Fahrzeug("Schubkarre",1);
Beide Aktionen keinen auf eine Zeile geschrieben werden. Beispiel: Fahrzeug fahrzeug = new Fahrzeug();

Wie wird ein Objekt benutzt?

Erst wenn ein Objekt ins Leben gerufen (instanziiert) wurde, kann es benutzt werden, indem dessen öffentliche Methoden aufgerufen werden, so ähnlich wie Felder in C-Strukturen adressiert werden. Nach dem Schema, Objektname, Methodenname, durch Punkt ('.') getrennt.
Syntax
Objektname.öffentlicheMethodeName(Parameter); oder Objektname.öffentlicheVariable
Beispiel
  1. Fahrrad.toString();
  2. Fahrrad.istPersonenGeeignet();

Vererbung

Angenommen wir wollen jetzt ein Objekt von Typ Auto, welches die Eigenschaften von Fahrzeug besitzt, und noch andere dazu. Es wäre sinnvoll die in Fahrzeug gesteckte Arbeit wiederzuverwenden. Dazu dient die Vererbung, wichtige Eigenschaft von objektorientierten Sprachen.

Vererbung ist eine Relation zwischen Klassen. In dem Moment in dem eine Klasse von einer anderen erbt, übernimmt sie von dieser alle als protected oder public definierten Daten und Methoden.

Diese Relation wird durch das Schlüsselwort extends gekennzeichnet.

Damit wird die Struktur der Klasse Auto:

Die kursiv geschriebenen Zeilen bezeichnen die Teile welche von der Mutter-Klasse, in diesem Fall Fahrzeug, übernommen wurden. Zu beachten, daß die Methode verbessern das Feld Geschwindigkeit benutzt, als ob es in der Klasse Auto deklariert worden wäre.

Warum wurde personenGeeignet nicht vererbt?

Andererseits ist es nicht möglich auf das Feld personenGeeignet von der Mutterklasse zuzugreifen, da dieses dort als privat deklariert worden war. Dieses Schlagwort bewirkt daß damit geschützte Entitäten weder von außen noch von abgeleiteten Klassen aus zugegriffen werden können.

Zugriffe die von woanders als der eigentlichen Klasse gemacht werden (also z.B. ein Zugriff auf personenGeeignet von Auto aus) werden schon vom Kompiler abgefangen, und geben eine Fehlermeldung. Nur was als public oder protected deklariert wurde, wird vererbt.

Warum wurde die 2 Konstruktoren von Fahrzeug nicht an Auto vererbt?

In Java werden die Konstruktoren nicht vererbt. Erklärungen dazu später...

Was bedeutet super(n,v); im Konstruktor von Auto

super ist ein Schlüsselwort das für die Mutterklasse steht, die oben gennante Sequenz wird den Konstruktor mit 2 Argumenten der Klasse Fahrzeug aufrufen. Diese Anweisung kann nur als erste Zeile in einem Konstruktor erscheinen, falls anderer Code an der Stelle steht, wird ein implizites super() angenommen.

Das bedeutet, daß alle Konstruktoren von der höchsten Mutter-Klasse aus successif durchlaufen werden.

Die Klasse Auto definiert erneut die Methode toString(), die es schon in Fahrzeug gab?

Dies ist eine der Möglichkeiten der Vererbung. Eine Klasse die von einer anderen erbt, kann die Methoden der super-Klasse (Mutterklasse) neu definieren. Es stellt eine Methode dar, um die Funktionalität der Mutterklasse anzupassen. Im Gegensatz zum Überladen, erlaubt die Neudefinition es, genau die gleiche Parameterliste zu besitzen wie die Methode aus der Mutterklasse. Diese kann allerdings immer noch angesprochen werden (über super, z.B. String meldung = super.toString();).

Übung: wie wird die Klasse Auto benutzt? Was wird folgendes Programm ausgeben?

Relationen zwischen Objekten

Im Rahmen der Überlegungen über die Struktur eines Objektorientierten Programms, besteht der erste Schritt darin, die zu benutzenden Objekte zu isolieren. Der zweite darin die verschiedenen Relationen zwischen diesen Objekten aufzuzeichnen. Es gibt foglende Grundrelationen:
A ist ein B
Dies ist eine Vererbungsrelation, in der A von B abegeleitet wurde. Man kann auch sagen A ist eine Spezialisierung von B. Ein typisches Beispiel: ein Auto ist ein Fahrzeug, oder ein Fahrzeug ist ein Objekt.

Dies schließt nicht aus, daß es significative Unterschiede zwischen A und B gibt, es können ja in A alle Methoden von B komplett anders implementiert werden, zusätzlich zu Daten und Methoden die der Klasse A angefügt werden können.

A benutzt ein, besteht aus B
Hier besteht keine Vererbungsrelation, allerdings braucht die eine Klasse die andere um zu bestehen. Z.B. braucht Auto eine Klasse Motor. Konkret in der Klasse A wurden ein oder mehrere Objekte des Typs B als Daten angemeldet. Dadurch können alle Methoden von A Objekte vom Typ B benutzen.
A hat nichts gemeinsam mit B
Genau, man muß nicht immer versuchen irgendeine Relation mit einer anderen Klasse zu suchen.

Zusammenfassung

  1. Was ist ein Objekt?
  2. Was ist der Unterschied zwischen einer Klasse und einem Objekt?
  3. Wozu dienen die Schlüsselworte private, protected und public?
  4. Kann eine Methode private, Daten public deklariert werden?
  5. Was ist vererbung?
  6. Was ist die Rolle des Konstruktors
  7. Was ist der Unterschied zwischen Redefinition und Überladen?

Übungen

PersonenWagen