86
Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen Oberfläche repräsentieren soll. Erzeugen Sie auch ein

public class MainKlassen5{ public static void main(String[] args)

Embed Size (px)

DESCRIPTION

Aufgabe: Erstellen Sie die Klasse Punkt , (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen Oberfläche repräsentieren soll. Erzeugen Sie auch ein paar konkrete Punkte. - PowerPoint PPT Presentation

Citation preview

Page 1: public class MainKlassen5{   public static void              main(String[] args)

Aufgabe:Erstellen Sie die Klasse Punkt,

(mit den entsprechenden Attributen und Methoden), die

einen Punkt (Pixel) in einer grafischen zweidimensionalen Oberfläche repräsentieren soll.

Erzeugen Sie auch ein paar konkrete Punkte.

Page 2: public class MainKlassen5{   public static void              main(String[] args)

Um anzudeuten, dass es sich um Pixel handelt, wird im Folgenden den x- und y-Koordianten eines

Punktes der Datentyp integer gegeben. Man könnte aber

genauso den Datentyp double verwenden.

Page 3: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}// Klasse Punkt kommt gleich...

Page 4: public class MainKlassen5{   public static void              main(String[] args)

class Punkt{ private int x; private int y;

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

public Punkt(int px, int py){ setPunkt(px,py); }

public void setPunkt(int px, int py){ x=px; y=py; }

Name der Klasse

privater Bereich: Auf die Member des privaten

Bereichs kann außerhalb der Klasse nicht direkt, sondern nur indirekt

über Methoden des public Bereichs dieser Klasse zugegriffen werden.

öffentlicher Bereich: Auf die Member dieses Bereichs

kann man jederzeit zugreifen.

Page 5: public class MainKlassen5{   public static void              main(String[] args)

public void setX(int px){ x=px; } public void setY(int py){ y=py; }

public int getX(){ return(x); }

public int getY(){ return(y); }}

Page 6: public class MainKlassen5{   public static void              main(String[] args)

Wir gehen die Anweisungen von main Schritt für Schritt

durch ...

Page 7: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

Page 8: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

Page 9: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

Nebenbei: Was passiert, wenn der Standardkonstruktor nicht existiert?

Der Compiler legt keinen an, da schon ein Konstruktor (mit 2 Parametern existiert) --> Fehlermeldung

Page 10: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

Page 11: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

Page 12: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

Fehlermeldung:x ist private(ein privater Bereich)

Page 13: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

Page 14: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

7 9 ? ?

Page 15: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

7 9 ? ?

Page 16: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

7 9 ? ?

7 9 7 ?

Page 17: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

7 9 ? ?

7 9 7 ?

Page 18: public class MainKlassen5{   public static void              main(String[] args)

public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p;

p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); }}

p.x p.y kx ky

0 0 ? ?

3 5 ? ?

7 9 ? ?

7 9 7 ?

7 9 7 9

Page 19: public class MainKlassen5{   public static void              main(String[] args)

Nochmals zu den Zugriffsrechten (erklärt an Ausschnitten des letzten

Programms).

Page 20: public class MainKlassen5{   public static void              main(String[] args)

Abkürzungen:

ZvA: Zugriff von außerhalb einer Klasse

ZvI: Zugriff von innerhalb eines Klasse

Page 21: public class MainKlassen5{   public static void              main(String[] args)

Zugriff innerhalb einer Klasse bedeutet den Zugriff auf ein Member von innerhalb einer Methode der Klasse.

Beispiel:

public void setPunkt(int px, int py){ x = px; y = py;}

Zugriff auf die Member x und y

Page 22: public class MainKlassen5{   public static void              main(String[] args)

Zugriff außerhalb einer Klasse bedeutet den Zugriff (von einer anderen Klasse) auf ein Member einer anderen Klasse mit Hilfe des Punkts .

Beispiel:public static void main(...){ Punkt p = new Punkt(2,8); p.setPunkt(5,13);}

Von einer anderen Klasse (z.B. der Startklasse) wird auf das Member setPunkt(...) der anderen Klasse Punkt zugegriffen.

Page 23: public class MainKlassen5{   public static void              main(String[] args)

... anderen Klasse (bzw. außerhalb) außerhalb fängt mit einem a an, also ...

... jetzt wird das a ausgefüllt ...

Wie kann man sich merken, dass außerhalb mit einem Punkt zusammenhängt?

... und der Balken entfernt, dann hat man einen ...

Page 24: public class MainKlassen5{   public static void              main(String[] args)

... Punkt.

Page 25: public class MainKlassen5{   public static void              main(String[] args)

// main(...){ p.x=12; p.setPunkt(7,9);}

class Punkt{ private int x; private int y;

public Punkt(int px, int py){ setPunkt(px,py); }

public void setPunkt(int px, int py){ x=px; y=py; }}

privater Bereich: Auf die Member des privaten

Bereichs kann außerhalb der Klasse nicht direkt, sondern nur indirekt

über Methoden des public Bereichs dieser Klasse zugegriffen werden.

öffentlicher Bereich: Auf die Member dieses Bereichs

kann man jederzeit zugreifen.

Page 26: public class MainKlassen5{   public static void              main(String[] args)

// main(...){ p.x=12; p.setPunkt(7,9);}

class Punkt{ private int x; private int y;

public Punkt(int px, int py){ setPunkt(px,py); }

public void setPunkt(int px, int py){ x=px; y=py; }}

ZvA auf private Member x: verboten

ZvA auf public Member setPunkt: erlaubt

ZvI auf private Member y: erlaubt

ZvI auf private Member x: erlaubt

ZvI auf public Member setPunkt: erlaubt

Begründen Sie, ob die rot markierten Zugriffe auf Member der Klasse erlaubt sind oder nicht.

Page 27: public class MainKlassen5{   public static void              main(String[] args)

Eine Klasse kann durch die sogenannte UML (Unified Modeling Language) beschrieben werden.

Page 28: public class MainKlassen5{   public static void              main(String[] args)

UML ist eine formale Sprache zur objektorientierten Spezifikation, Visualisierung, Konstruktion und Dokumentation von Softwaresystemen und Geschäftsmodellen.

Page 29: public class MainKlassen5{   public static void              main(String[] args)

Mit UML kann man z.B.die Klasse Punkt wie folgt durch ein sogenanntes Klassendiagramm darstellen:

Page 30: public class MainKlassen5{   public static void              main(String[] args)

Punkt - x: int

- y: int

+ Punkt()

+ Punkt(px:int, py:int)

+ setPunkt(px:int, py:int): void

+ getX (): int

+ getY (): int- bedeutet: Attribut bzw. Methode ist privat + bedeutet: Attribut bzw. Methode ist public

Attribute

Methoden

Page 31: public class MainKlassen5{   public static void              main(String[] args)

Warum soll man folgende Aussage befolgen ?

"Nur Mit Hilfe der Methoden soll man auf die Attribute zugreifen (lesen

bzw. ändern der Attribute)"

Page 32: public class MainKlassen5{   public static void              main(String[] args)

Übrigens:Das Prinzip, daß die Daten eines Objekts nur mit den

eigenen Methoden des Objekts manipuliert werden

können, nennt man"Datenkapselung"

Page 33: public class MainKlassen5{   public static void              main(String[] args)

Warum macht man diesen Umweg über die Methoden, also die Datenkapselung ?

Warum greift man nicht direkt auf die Attribute zu ?

Page 34: public class MainKlassen5{   public static void              main(String[] args)

Schauen wir uns dazu ein paar Beispiele aus der

“täglichen“ Praxis an...

Page 35: public class MainKlassen5{   public static void              main(String[] args)

Warum benutzen wir an der Kasse im Supermarkt als “Werkzeug“ den Kassierer, um auf die Kasse zuzugreifen ?Warum machen wir das nicht direkt (ohne den Kassierer) ?

Page 36: public class MainKlassen5{   public static void              main(String[] args)

Weil man dann den Kassenstand auf einen unerwünschten Wert verändern und einen ungewollten Ortswechsel der Kasse veranlassen kann!

Page 37: public class MainKlassen5{   public static void              main(String[] args)

Warum benutzen wir am Bankschalter als “Werkzeug“ die EC-Karte, um auf die Kasse der Bank zuzugreifen ?Warum machen wir das nicht direkt (ohne Banker oder ohne EC-Karte) ?

Page 38: public class MainKlassen5{   public static void              main(String[] args)

Weil man dann den Kassenstand auf einen unerwünschten Wert verändern kann !

Page 39: public class MainKlassen5{   public static void              main(String[] args)

Warum wird in einigen Autos als “Werkzeug“ das ABS-System benutzt ?

Warum bremst man nicht direkt mechanisch (ohne Elektronik) ?

Page 40: public class MainKlassen5{   public static void              main(String[] args)

Weil man dann die Bremskraft auf einen unerwünschten Wert verändern kann (Bremsen blockieren)!

Page 41: public class MainKlassen5{   public static void              main(String[] args)

Warum wird in einigen Häusern als “Werkzeug“ ein Thermostat verwendet, um die Temperatur zu regeln ?Warum macht man dies nicht direkt (einfüllen von Heizöl in den Ölofen) ?

Page 42: public class MainKlassen5{   public static void              main(String[] args)

Weil man dann z.B. in kürzester Zeit zu viel Heizöl in den Ofen leeren kann und es dann zu nicht gewünschten Verbrennungseffekten (Ofen explodiert !) kommen kann.

Page 43: public class MainKlassen5{   public static void              main(String[] args)

Weitere Beispiele:

Page 44: public class MainKlassen5{   public static void              main(String[] args)

Im Airbus, dem vollelektronischen Flugzeug, greift der Pilot nur über die Elektronik auf das Höhenruder, usw. zu

Page 45: public class MainKlassen5{   public static void              main(String[] args)

Die Opferbüchse in der Kirche besitzt eine Vorrichtung, die den Geldfluß nur in eine Richtung zuläßt.

Page 46: public class MainKlassen5{   public static void              main(String[] args)

Der Zugriff über die Boxhandschuhe auf den Körper des Gegners schützt diesen zumindest in einem gewissen Maße.

Page 47: public class MainKlassen5{   public static void              main(String[] args)

Die Verheiratung von Ehepartnern geschieht durch eine untere Verwaltungsbehörde. Dadurch sollen unerwünschte Vermählungen der handelnden Subjekte (enge Verwandtschaft, Artenschrankenüberschreitung) verhindert werden.

Page 48: public class MainKlassen5{   public static void              main(String[] args)

Diese Werkzeuge (Kassierer, EC-Karte, ABS-System, usw.) werden so gebastelt, daß sie es nicht erlauben, bestimmte Systemparameter (Geldmenge in Kasse, usw.) auf unerwünschte Werte abzuändern.

Page 49: public class MainKlassen5{   public static void              main(String[] args)

In Java sind diese Werkzeuge Methoden, die es dem Klassen-Programmierer(= Programmierer, der Klassen verwendet) nicht erlauben, die Attribute auf unerwünschte Werte abzuändern.

Page 50: public class MainKlassen5{   public static void              main(String[] args)

Wenn eine Methode dies garantiert, nennt man dies auch Zusicherung (englisch: constraint)

Page 51: public class MainKlassen5{   public static void              main(String[] args)

Mit welcher Anweisung in Java kann man in einer Methode verhindern, dass ein Attribut auf einen unerwünschten Wert gesetzt wird ?

Mit der if - Anweisung!

Page 52: public class MainKlassen5{   public static void              main(String[] args)

Aufgabe:Basteln Sie die Klasse Konto mit den zugehörigen Attributen und Methoden. Implementieren Sie speziell die Methode abheben. Diese soll garantieren, dass beim Abheben der Kontostand nicht unter 5000 Euro Schulden fallen kann.

Page 53: public class MainKlassen5{   public static void              main(String[] args)

class Konto{ private double stand;

public void setKonto(double pStand){ stand = pStand; }

public void abheben(double geld){ if(stand-geld >= -5000){ stand = stand - geld; } }}; // class Konto

Name der Klasse

privater Bereich: Auf die Member des privaten

Bereichs kann außerhalb der Klasse nicht direkt, sondern nur indirekt über Methoden des public Bereichs dieser

Klasse zugegriffen werden.

öffentlicher Bereich: Auf die Member dieses Bereichs

kann man jederzeit zugreifen.

Page 54: public class MainKlassen5{   public static void              main(String[] args)

class Konto{ private double stand;

public void setKonto(double pStand){ stand = pStand; }

public void abheben(double geld){ if(stand-geld >= -5000){ stand = stand - geld; } }}; // class Konto

Wenn das Abheben nicht geklappt hat (weil versucht wurde zu viel Geld abzuheben), gibt diese Methode kein "feedback". Wie könnte man dies andern? Schreiben Sie dazu eine entsprechende Methode.

public boolean abheben(double geld){ boolean erg=false; if(stand-geld >= -5000){ stand = stand - geld; erg=true; }return erg; }

Page 55: public class MainKlassen5{   public static void              main(String[] args)

class Konto{ private double stand;

public void setKonto(double pStand){ stand = pStand; }

public void abheben(double geld){ if(stand-geld >= -5000){ stand = stand - geld; } }}; // class Konto

... main(){ Konto k=new Konto(); k.setKonto(1000); k.abheben(7000);}

k.stand : 0

Da kein Konstruktor programmiert wurde, wird automatisch (ohne Zutun des

Programmierers) vom Compiler der Standard-Konstruktor angelegt. Dieser

enthält - außer super() - keine Anweisungen. Beim Anlegen eines Objekts werden alle

Attribute auf 0 gesetzt. Deswegen bekommt das Attribut stand den Wert 0.

Page 56: public class MainKlassen5{   public static void              main(String[] args)

class Konto{ private double stand;

public void setKonto(double pStand){ stand = pStand; }

public void abheben(double geld){ if(stand-geld >= -5000){ stand = stand - geld; } }}; // class Konto

... main(){ Konto k=new Konto(); k.setKonto(1000); k.abheben(7000);}

k.stand : 1000

Page 57: public class MainKlassen5{   public static void              main(String[] args)

class Konto{ private double stand;

public void setKonto(double pStand){ stand = pStand; }

public void abheben(double geld){ if(stand-geld >= -5000){ stand = stand - geld; } }}; // class Konto

... main(){ Konto k=new Konto(); k.setKonto(1000); k.abheben(7000);}

k.stand : 1000

Zusicherung:Kontostand > -5000

Page 58: public class MainKlassen5{   public static void              main(String[] args)

In UML

Page 59: public class MainKlassen5{   public static void              main(String[] args)

Konto - stand: double

+ setKonto(pStand:double):void

+ abheben(geld:double): void

- bedeutet: Attribut bzw. Methode ist privat + bedeutet: Attribut bzw. Methode ist public

{stand >= -5000}

Zusicherung

Page 60: public class MainKlassen5{   public static void              main(String[] args)

Aufgabe:Basteln Sie in der Klasse Konto die Methodeint vergleiche(...)Diese soll 2 Konten bzgl. des Kontostands vergleichen.Welchen Wert soll diese Methode zurückgeben?

Page 61: public class MainKlassen5{   public static void              main(String[] args)

-1 : Kontostand des 1. Kontos < Kontostand des 2. Kontos

0 : Kontostand des 1. Kontos == Kontostand des 2. Kontos

1 : Kontostand des 1. Kontos > Kontostand des 2. Kontos

Page 62: public class MainKlassen5{   public static void              main(String[] args)

Wie viele Parameter benötigt die Methode int vergleiche(...)

Page 63: public class MainKlassen5{   public static void              main(String[] args)

Annahme:Die Methode benötigt zwei Parameter.

Aufgabe:Implementieren Sie diese Methode!

Page 64: public class MainKlassen5{   public static void              main(String[] args)

class Konto{ private double kontostand; private double zinssatz;

public Konto(double pKontostand, double pZinssatz){ kontostand = pKontostand; zinssatz = pZinssatz; }

public double getKontostand() { return kontostand; }

public double getZinssatz() { return zinssatz; }

Page 65: public class MainKlassen5{   public static void              main(String[] args)

public void setKontostand(double pKontostand){ kontostand = pKontostand; }

public void setZinssatz(double pZinssatz) { zinssatz = pZinssatz; }

Page 66: public class MainKlassen5{   public static void              main(String[] args)

public int vergleiche(Konto k1, Konto k2){ int erg; if(k1.kontostand < k2.kontostand){ erg=-1; } else if(k1.kontostand == k2.kontostand){ erg=0; } else{ erg=1; } return erg; }}

Halt, halt: Warum gibt es keine Fehlermeldung bei k1.kontostand bzw. k2.kontostand ? Es wird doch auf ein private Member zugegriffen!

Page 67: public class MainKlassen5{   public static void              main(String[] args)

public int vergleiche(Konto k1, Konto k2){ int erg; if(k1.kontostand < k2.kontostand){ erg=-1; } else if(k1.kontostand == k2.kontostand){ erg=0; } else{ erg=1; } return erg; }}

Weil nicht von einer anderen Klasse auf kontostand zugefriffen wird.Innerhalb der gleichen Klasse Konto wird auf kontostand der gleichen Klasse Konto zugegriffen!

Page 68: public class MainKlassen5{   public static void              main(String[] args)

Vergleichen Sie in main() zwei Konten miteinander (bzgl. des Kontostands), indem Sie die Methode vergleiche(...) aufrufen.

Page 69: public class MainKlassen5{   public static void              main(String[] args)

public class MainKonto1 { public static void main(String[] args){ int x;

}}

Konto ko1 = new Konto(100,1);Konto ko2 = new Konto(200,1);Konto ko3 = new Konto(300,3);x=ko3.vergleiche(ko1, ko2);System.out.println("x="+x);

Wie kann man jetzt diese zwei Konten vergleichen? Vielleicht durch vergleiche(ko1,ko2); ?

Nein, da die Methode vergleiche nur durch ein Objekt der Klasse Konto aufgerufen werden kann. D.h. wir brauchen ein ...

3. Konto

Wie werden die Konten nun verglichen?

Page 70: public class MainKlassen5{   public static void              main(String[] args)

public class MainKonto1 { public static void main(String[] args){ int x;

}}

Konto ko1 = new Konto(100,1);Konto ko2 = new Konto(200,1);Konto ko3 = new Konto(300,3);x=ko3.vergleiche(ko1, ko2);System.out.println("x="+x);

Welchen Sinn hat das 3. Konto?

Es wird nur gebraucht, um die Methode vergleiche mit den Parametern ko1 und ko2 aufzurufen. Die Werte der Attribute von ko3 werden nicht verwendet. Sie sind völlig unwichtig!!

Page 71: public class MainKlassen5{   public static void              main(String[] args)

public class MainKonto1 { public static void main(String[] args){ int x;

}}

Konto ko1 = new Konto(100,1);Konto ko2 = new Konto(200,1);

x=ko2.vergleiche(ko1, ko2);System.out.println("x="+x);

Gibt es eine Alternative, die das 3. Konto ko3 nicht verwendet?

Man könnte genaus so gut auch ko1 nehmen:x=ko1.vergleiche(ko1, ko2);

Page 72: public class MainKlassen5{   public static void              main(String[] args)

Es werden also auch 3 Konten verwendet, wobei das Konto, das beim Aufruf verwendet wird (also ko2) nochmals als 2. Parameter beim Aufruf verwendet wird. Es werden also 3 Konten verwendet, wobei 2 davon identisch sind.

Page 73: public class MainKlassen5{   public static void              main(String[] args)

Wir wollen deshalb die Methode vergleiche erstellen, die genau 2 Konten verwendet, wobei der Parameter nur ein Konto hat und trotzdem 2 Konten vergleichen kann.Wo steckt dabei das 2. Konto?

Page 74: public class MainKlassen5{   public static void              main(String[] args)

Das 2. Konto steckt im Aufruf:

ko1.vergleiche(ko2)

Wie kann man aber innerhalb eines Objekts auf das Objekt selbst (= das aufrufende Objekt) zugreifen ?

Um innerhalb eines Objekts auf das Objekt selbst (= das aufrufende Objekt) zugreifen zu können, wird in

Java der Name this verwendet.

Page 75: public class MainKlassen5{   public static void              main(String[] args)

Das 2. Konto steckt im Aufruf:

ko1.vergleiche(ko2)

Implementieren Sie die zugehörige Methode vergleiche(...)

Page 76: public class MainKlassen5{   public static void              main(String[] args)

public int vergleiche(Konto pKo){ int erg; if(this.kontostand < pKo.kontostand) erg=-1; else if(this.kontostand == pKo.kontostand) erg=0; else erg=1; return erg;}

Um trotzdem innerhalb eines Objekts auf das Objekt selbst zugreifen zu können, wird in Java beim Zugriff

auf das Objekt selbst der Name this verwendet.

Andere Möglichkeit: Man läßt this weg: if(kontostand < pKo.kontostand)

Dann ist das Attribut kontostand auch das Attribut des Objekts selbst (aktuelle Objekt). Warum benutzt man dann this überhaupt? Siehe nachher später.

Page 77: public class MainKlassen5{   public static void              main(String[] args)

Vergleichen Sie in main() zwei Konten miteinander (bzgl. des Kontostands), indem Sie die Methode vergleiche(mit nur einem Parameter) aufrufen.

Page 78: public class MainKlassen5{   public static void              main(String[] args)

public class MainKonto1 { public static void main(String[] args){ int x;

}}

Konto ko1 = new Konto(100,1);Konto ko2 = new Konto(200,1);x=ko1.vergleiche(ko2);System.out.println("x="+x);

Wie kann man jetzt diese zwei Konten vergleichen?

Gibt es noch eine andere Möglichkeit für einen Aufruf?

x=ko2.vergleiche(ko1);

Page 79: public class MainKlassen5{   public static void              main(String[] args)

Aufgabe:Basteln Sie in der Klasse Konto die MethodeKonto vergleiche(...)Diese soll 2 Konten bzgl. des Kontostands vergleichen und das zurückgeben, das den höheren Kontostand hat.

Page 80: public class MainKlassen5{   public static void              main(String[] args)

public Konto vergleichen(Konto pKo){ Konto temp; if(this.kontostand < pKo.kontostand){ //if(kontostand < pKo.kontostand){ temp=pKo; } else{ temp=this; } return temp;}

Hier kann man jetzt this nicht mehr weglassen!

Es ist die einzige Möglichkeit auf das Objekt selbst (= das aufrufende Objekt)

zuzugreifen!

Dieses this kann zwar weggelassen werden (siehe ein paar Folien früher), … aber

Warum kann man diese Methode nicht (wie int vergleiche(Konto pKo){…} ) auch

vergleiche(…) nennen ?

Page 81: public class MainKlassen5{   public static void              main(String[] args)

public Konto vergleichen(Konto pKo){ Konto temp; if(this.kontostand < pKo.kontostand){ //if(kontostand < pKo.kontostand){ temp=pKo; } else{ temp=this; } return temp;}

Weil die folgenden Methodenint vergleiche(Konto pKo){ …}

Konto vergleiche(Konto pKo){ …}die gleichen Signaturen haben.

Die Signaturen für unterschiedliche Methoden müssen aber verschieden sein.

MERKE:Die Signatur einer Methode ist gekennzeichnet durch die Anzahl und/oder den jeweiligen Datentyp der Parameter der Methode.

Der Rückgabetyp der Methode gehört nicht zur Signatur.

Page 82: public class MainKlassen5{   public static void              main(String[] args)

Die Signatur einer Methode ist gekennzeichnet durch die Anzahl und/oder den jeweiligen Datentyp der Parameter der Methode. Der Rückgabetyp der Methode gehört nicht zur Signatur.

Page 83: public class MainKlassen5{   public static void              main(String[] args)

int vergleiche(Konto pKo){Die Signatur einer Methode ist gekennzeichnet durch die Anzahl und/oder den jeweiligen Datentyp der Parameter der Methode. Der Rückgabetyp der Methode gehört nicht zur Signatur.

Page 84: public class MainKlassen5{   public static void              main(String[] args)

Vergleichen Sie in main() zwei Konten miteinander (bzgl. des Kontostands), indem Sie die Methode vergleichen(mit nur einem Parameter) aufrufen.

Page 85: public class MainKlassen5{   public static void              main(String[] args)

public class MainKonto1 { public static void main(String[] args){ Konto temp;

}}

Konto ko1 = new Konto(100,1);Konto ko2 = new Konto(200,1);temp=ko1.vergleichen(ko2);System.out.println("Max="+temp. getKontostand());

Wie kann man jetzt diese zwei Konten vergleichen?

Page 86: public class MainKlassen5{   public static void              main(String[] args)

Aufgabe (siehe Klasse Punkt)

Basteln Sie zusätzlich zur Klasse Punkt noch die Klasse Gerade, die durch zwei Punkte gegeben ist.