18.2 Die Klasse Punkt: Konstruktoren, Attribute und Methoden
   
Klasse und Objekte Wenn wir von einem Punkt P in einer Ebene sprechen, sprechen wir von einer Klasse. Wenn wir vom P1(2|3) sprechen, meinen wir eine Instanz von P also ein Objekt.

Wir modellieren die Klasse in Java:  Objekte dieser Klasse sollen erzeugt, die Punkte verschoben und am Ursprung gespiegelt werden können. Standardmäßig wird beim Erzeugen der Punkt (0|0) erzeugt. Man soll aber auch jeden beliebigen Punkt P(x0|y0)der Zahlenebene erzeugen können.
 

Implementierung der Klasse2)

Download:
Punkt.java

class Punkt {
  int x,y;

  Punkt() {
    x=0;
    y=0;
  }
  Punkt(int xNeu, int yNeu) {
    x = xNeu;
    y = yNeu;
  }
  void verschiebe(int dx, int dy) {
    x += dx;
    y += dy;
  }
  void spiegleAmUrsprung() {
    x = -x;
    y = -y;
  }
}
Attribute x und y, gemeint sind damit die x- und y-Koordinate eines Punktes, sind die Attribute der Klasse, deren Werte in den einzelnen Objekten diesre Klasse individuell gesetzt werden.
 
Konstruktoren Sog. Konstruktoren werden dazu benutzt, Objekte aus der Klasse zu erzeugen. Sie erkennt man daran, dass sie wie Methoden aufgebaut sind, aber keinen Rückgabewert, nicht einmal void, besitzen. Weiter haben die Konstruktoren den gleichen Namen wie ihre Klasse.
Wenn man selbst eine Klasse schreibt, und keinen Konstruktor implementiert, so besitzt sie automatisch den sog. Standardkonstruktor. In unserem Fall hießt er:
Punkt(){};

Da zwischen den geschweiften Klammern kein weiterer Text steht, kann man mit ihm zwar Objekte anlegen, diese haben aber noch keine Eigenschaften.1) Im Falle unseres Punktes macht das wenig Sinn. Wenn wir wollen, dass die Koordinaten des Punktes, der mit dem Standardkonstruktor erzeugt wird, immer 0 sind, der Standardkonstruktor also immer den Punkt P(0|0) erzeugt, so überschreiben wir den implizit vorhanden Konstruktor durch:

Punkt() {
   x = 0;
   y = 0;
}

Große Flexibilität erreichen wir dadurch, dass Java erlaubt für eine Klasse mehrere Konstruktoren zu implementieren. Es kann Sinn machen, z.B. auch einen Punkte zu erzeugen, deren Koordinaten vor dem Erzeugen berechnet wurden. In diesem Fall wäre folgender Konstruktor sinnvoll:

Punkt(int xNeu, int yNeu) {
  x = xNeu;
  y = yNeu;
}

Natürlich heißen beide Konstruktoren gleich. Damit ein Compiler zwei gleichlautende Konstruktoren unterscheiden kann, müssen sie sich in der Signatur unterscheiden. Die Parameterliste müssen also unterschiedlich viele Parameter haben oder, wenn die Anzahl der Parameter bei beiden gleich ist, müssen sie sich mindestens im Typ einer Variablen in der Poarameterliste unterscheiden. Was wir hier über gleichlautende Konstruktoren gesagt haben, gilt übrigens auch für alle Methoden.

 

Methoden Über die Implementierung der Methoden in der Klasse Punkt brauchen wir nicht mehr viel Worte verlieren. Wie das geht, haben wir schon in der Klasse Mathematik gesehen. Allerdings liefern die Methoden keinen Wert an den Aufrufer zurück, weshalb sie als Rückgabewert void erhalten.
 
UML-Notation Ein wichtiges Werkzeug für Informatiker, die ein Projekt modellieren ist UML (Unified Modeling Language). Mit ihr werden Klassen und ihre Beziehung untereinander grafisch dargestellt. Die Darstellung hält sich dabei an vorgegebene Standards und ist unabhängig davon, ob das modellierte Projekt schließlich in Java oder einer anderen Sprache implementiert wird.

Unsere Klasse Punkt hat in UML die folgende Gestalt:

In UML werden Klassen in Rechtecken dargestellt, die horizontal in drei Abteilung aufgeteilt sind. In der ersten Abteilung steht der Name der Klasse. In der zweiten die Attribute und in der dritten die Konstruktoren und Methoden der Klasse.

 

Fußnoten  

1)

Tatsächlich hat die mit dem 'leeren' Standardkonstruktor erzeugte Klasse schon Eingenschaften. Denn jede Klasse erbt von der Klasse Object und damit von ihr z.B. die  Methoden clone() oder toString(). Wir werden im Laufe des Kurses mehr davon erfahren. [zurück]
 

2)

So wie wir jetzt die Klasse  Punkt implementiert haben entspricht sie noch nicht den Kriterien einer 'anständigen' objektorientierten Modellieren. Nachdem wir in dem Kapitel 18.4 Information Hiding etwas über Kapselung erfahren haben, werden wir in '18.5 Implementierung der Klasse Punkt' kennen lernen, die den Kriterien des modernen Programmierens entspricht. [zurück]
 
zu 18.3 Arbeiten mit Objekten der Klasse Punkt
zur Startseite www.pohlig.de (C) MPohlig 2004