85
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

Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Embed Size (px)

Citation preview

Page 1: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Wir gehen die Anweisungen von main Schritt für Schritt

durch ...

Page 7: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Programms).

Page 20: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Abkürzungen:

ZvA: Zugriff von außerhalb einer Klasse

ZvI: Zugriff von innerhalb eines Klasse

Page 21: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

... 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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

... Punkt.

Page 25: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

// 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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

// 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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 28: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 29: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 30: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Warum soll man folgende Aussage befolgen ?

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

bzw. ändern der Attribute)“

Page 32: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Warum macht man diesen Umweg über die Methoden ?

Warum greift man nicht direkt auf die Attribute zu ?

Page 33: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Schauen wir uns dazu ein paar Beispiele aus der

“täglichen“ Praxis an...

Page 34: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 35: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 36: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 37: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 38: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Warum bremst man nicht direkt mechanisch (ohne Elektronik) ?

Page 39: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 40: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 41: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 42: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Weitere Beispiele:

Page 43: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 44: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 45: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 46: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 47: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 48: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 49: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 50: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 51: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 52: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 53: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 54: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 55: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 56: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 57: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

In UML

Page 58: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 59: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 60: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

-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 61: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 62: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Annahme:Die Methode benötigt zwei Parameter.

Aufgabe:Implementieren Sie diese Methode!

Page 63: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 64: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

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

Page 65: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 66: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 67: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 68: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 69: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 70: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 71: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 72: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 73: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 74: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Das 2. Konto steckt im Aufruf:

ko1.vergleiche(ko2)

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

Page 75: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 76: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 77: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 78: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 79: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 80: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 81: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 83: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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

Page 84: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

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 85: Aufgabe: Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen

Aufgabe (siehe Klasse Punkt)

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