30
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

Embed Size (px)

Citation preview

Page 1: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer, Dr. Gerhard Gröger

Einführung in die Programmierung mit Java

7. Vorlesung WS 2002/2003

Page 2: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

2 2

Übersicht

• Besprechung der Hausaufgabe

• Die Klasse String - Benutzung von Methoden und Arbeiten mit JavaDoc

• Statische Attribute (Klassenvariablen)

• Statische Methoden (Klassenmethoden)

Page 3: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

3 3

Terminverschiebung

• In der kommenden Woche findet Java nicht am Mittwoch (18.), sondern am Donnerstag (19.) von 15:00 bis 16:30 Uhr statt (nach Übung Diskrete Mathe)

Page 4: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

4 4

Hausaufgabe

• Definiert eine Klasse für Dreiecke, die in der Ebene eingebettet sind (d.h. alle drei Punkte haben x- und y-Koordinaten). Definiert – einen komfortablen Konstruktor (der ein Dreieck in einem

Schritt erzeugt) – eine Methode zur Berechnung des Umfangs, – eine Methode zum Verschieben des Dreiecks und – eine Methode zur textuellen Ausgabe.

• Hinweis: Es bietet sich an, die Klasse Punkt aus der Vorlesung zu verwenden.

Page 5: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

5 5

Lösung ohne Klasse Punkt (I von II):class Dreieck{

//Attribute (x und y für drei Eckpunkte des Dreiecks)

double punktAx, punktAy, punktBx, punktBy, punktCx, punktCy;

//Konstruktor

Dreieck(double Ax, double Ay, double Bx, double By, double Cx, double Cy){

punktAx = Ax; punkt Ay = Ay, punktBx = Bx; punktBy = By;

punktCx = Cx; punktCy = Cy);

//Methode zur Berechnung des Umfangs

double umfang(){

double u = Math.sqrt(Math.pow(punktAx - punktBx,2.0) +

Math.pow(punktAy - punktBy,2.0)) +

Math.sqrt(Math.pow(punktBx - punktCx,2.0) +

Math.pow(punktBy - punktCy,2.0)) +

Math.sqrt(Math.pow(punktCx - punktAx,2.0) +

Math.pow(punktCy - punktAy,2.0));

return u; }

.....................

A

B

C

Page 6: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

6 6

Lösung ohne Klasse Punkt (II von II):.......

//Methode zur Verschiebung um deltaX, deltaY

double verschieben(double deltaX, double deltaY){

punktAx = punktAx + deltaX;

punktAy = punktAy + deltaY;

punktBx = punktBx + deltaX;

punktBy = punktBy + deltaY;

punktCx = punktCx + deltaX;

punktCy = punktCy + deltaY;}

//Methode zur textuellen Ausgabe

void ausgabe(){

System.out.println("Die Punkte des Dreiecks haben die Koordinaten " +punktAx + " , " + punktAy + " , " +

punktBx + " , " + punktBy + " , " +

punktCx + " , " + punktCy);

}

}

A

B

C

Page 7: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

7 7

Lösung (mit Klasse Punkt):class Dreieck{

Punkt A; //Attribute, drei Punkte

Punkt B;

Punkt C;

Dreieck(double Ax, double Ay, double Bx, double By, double Cx, double Cy){

A = new Punkt(Ax, Ay); //Aufruf des Konstruktors der Klasse Punkt

B = new Punkt(Bx, By);

C = new Punkt(Cx, Cy); }

double umfang(){ //Verwendung der Methode "abstand" der Klasse "Punkt"

double u = A.abstand(B) + B.abstand(C) + C.abstand(A);

return u; }

void verschieben(double deltaX double deltaY){

A.verschieben(deltaX, deltaY); //Methode "verschieben" der Klasse "Punkt"

B.verschieben(deltaX, deltaY);

C.verschieben(deltaX, deltaY);

}

void ausgabe(){ ... }

}

Page 8: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

8 8

Beispiel: Klasse Punktclass Punkt{

double xKoordinate;

double yKoordinate;

Punkt(){ xKoordinate = 0.0; yKoordinate = 0.0;}

Punkt(double x, double y ){xKoordinate = x; yKoordinate = y;}

double x_Koordinate() {return xKoordinate;}

double y_Koordinate() {return yKoordinate;}

void aendereKoordinaten(double x, double y){

xKoordinate = x; yKoordinate = y;}

void verschieben(double deltaX , double deltaY) {

xKoordinate = xKoordinate + deltaX;

yKoordinate = yKoordinate + deltaY;}

double abstand(Punkt p){

double a = Math.sqrt(Math.pow(xKoordinate - p.xKoordinate,2.0) +

Math.pow(yKoordinate - p.yKoordinate,2.0));

return a;

}

}

Page 9: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

9 9

Anmerkungen zur Hausaufgabe

• Attribute von Klassen können wieder Klassen sein– Bsp: Klasse Dreieck hat Attribute A, B, C vom Typ Punkt

• diese Attribute müssen mit "new" erzeugt werden– Bsp.: A = new Punkt(Ax, Ay);

– dies geschieht im Konstruktor

• Nutzung der Funktionalität der enthaltenen Klasse– Bsp.: Nutzung der Methode abstand der Klasse Punkt bei

Ermittlung des Umfangs in Klasse Dreieck

• Wiederverwendung von Programmcode

Page 10: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

10 10

Übungsaufgabe

• Ergänzt die Klasse Dreieck aus der Hausaufgabe um eine Methode, die den Flächeninhalt eines Dreiecks berechnet und zurückgibt.

• Hinweis: Der Flächeninhalt eines Dreiecks ist:

Flächeninhalt = 1/2 * ( ( Ax (By - Cy) + Bx (Cy - Ay) + Cx ( Ay - By))

A

B

C

Page 11: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

11 11

Übungs- und Hausaufgabe

• Ergänzt die Klasse Dreieck aus der Hausaufgabe um eine Methode, die ermittelt, ob zwei Dreiecke benachbart sind (d.h. eine Kante des einen mit einer Kante des anderen geometrisch übereinstimmt). Der Rückgabewert soll vom Typ boolean sein.

• Ergänzt ggf. die Klasse Punkt entsprechend.

Page 12: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

12 12

Lösung (Alternative 1) :class Dreieck{

.......

boolean benachbart(Dreieck d){

int anzahlGleicherPunkte = 0;

if(A.abstand(d.A) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(A.abstand(d.B) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(A.abstand(d.C) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(B.abstand(d.A) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(B.abstand(d.B) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(B.abstand(d.C) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(C.abstand(d.A) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(C.abstand(d.B) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(C.abstand(d.C) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(anzahlGleicherPunkte > 1) return true

else return false;

}

}

Page 13: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

13 13

Fortsetzung Lösung (Alternative 1) :

//Aufruf:

Dreieck d1 = new Dreieck(4.3,9.8,2.1);

Dreieck d2 = new Dreieck(5.2,2.1,4.3);

boolean b = d1.benachbart(d2);

if(b) System.out.println("Dreiecke sind benachbart");

Page 14: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

14 14

Lösung (Alternative 2) :class Dreieck{

.......

boolean benachbart(Dreieck d){

int anzahlGleicherPunkte = 0;

if( A.xKoordinate == d.A.xKoordinate & A.yKoordinate == d.A.yKoordinate) == 0 )

anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if( A.xKoordinate == d.B.xKoordinate & A.yKoordinate == d.B.yKoordinate) == 0 )

anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

..........................

if(anzahlGleicherPunkte > 1) return true

else return false;

}

}

Page 15: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

15 15

Anmerkung zur Hausaufgabe :class Dreieck{

.......

boolean benachbart(Dreieck d){

int anzahlGleicherPunkte = 0;

if( A == d.A ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if( A == d.B ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

.................

if( C == d.C ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(anzahlGleicherPunkte > 1) return true

else return false;

}

}

// Diese Lösung ist falsch, da die Referenzvariablen und nicht // die Attributwerte der Instanzen (xKoordinate, yKoordinate)// auf Gleichheit überprüft werden

Page 16: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

16 16

Nutzung von Methoden: die Klasse String

• Zweck der Klasse String: Speicherung und Bearbeitung von Zeichenketten (Wörter, Sätze)

• Beispiel:String s1 = "Das ist das Haus";String s2 = "Nikolaus.";

String s3 = s1 + " vom " + s2;//in s3 steht:"Das ist das Haus vom Nikolaus.";

String s4 = s3.substring(12,16);

// in s4 steht: "Haus"

• Strings sind konstant (können nicht geändert werden)– sie müssen nicht mit new erzeugt werden– Stringvariablen können jedoch geändert werden, z.B.

s1 = "abc"; in obigem Beispiel.

Page 17: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

17 17

Die Klasse String

• Erzeugung einer Instanz: – String variable = “Zeichenkette“;

• Operator +: Konkatenation von Zeichenketten– String s1 = “ABC“ + variable + “DEF“;

• Nützliche Methoden der Klasse String:– “Geoinformation“.length() liefert 14– “ ABCD “.trim() liefert “ABCD“– "Geoinformation".substring(3,7) liefert "info“– "Institution".indexOf("ti") liefert 3

• Weitere Methoden: JavaDoc

Page 18: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

18 18

Übungsaufgabe

• Schreibt ein Programm, das euren Vor- und Nachnamen mit einem Leerzeichen getrennt einer String-Variablen zuweist. Leitet aus diesem String durch entsprechende Methoden der Klasse String folgendes ab:– einen String, der nur den Vornamen enthält

– einen String, der nur den Nachnamen enthält

– einen String mit Nach- und Vornamen (mit Komma dazwischen)

– die Anzahl der Buchstaben des Strings (ohne Leerzeichen)

– einen String, in dem jedes Vorkommen von ä, ö, ü durch ae, oe, ue ersetzt wurde

• Das Programm soll natürlich für jeden Vor- und Nachnamen funktionieren.....

Page 19: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

19 19

Statische Attribute

• die bisher behandelten Attribute (nicht-statische Attribute) existieren einmal pro Instanz

• nicht möglich, Informationen zur Klasse abzuspeichern (z.B. Anzahl der Instanzen; Werte, die für jede Instanz der Klasse gleich sind, ...)

• statische Attribute: existieren einmal pro Klasse, für alle Instanzen derselbe Wert

• Zweck: Speicherung Klassen-globaler Informationen• Syntax:

class Klassenbezeichner {static Typ Attributbezeichner ;...

}

Page 20: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

20 20

Zugriff auf statische Attribute

• Zugriff auf nicht-statische Attribute: – es muss Instanz der Klasse (Referenzvariable) existieren– Zugriff von Außen: Referenzvariable.attribut– Zugriff von Innen: attribut

• Zugriff auf statische Attribute: – es muss nicht unbedingt eine Instanz der Klasse existieren– Zugriff von Außen: Klassenname.attribut– oder Zugriff wie bei nicht-statischen Attributen

• Beispiel: class MeineKlasse {

static int v1;

}..........

MeineKlasse.v1 = 40;

Page 21: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

21 21

Statische Attribute: eine Klasse und Ihre Instanzen

Klassestatic int s = 7

int n

Instanzn = 65

Instanzn = 25

Instanzn = 4

Instanzn = 76

Bauplan

Page 22: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

22 22

Zugriff auf statische Attribute: Beispiel

class MeineKlasse {

static int s; //statisches Attribut

int n; //nicht-statisches Attribut

void methode(){

n = 4; //nicht-stat.Attribut, nur für Instanz geändert

S = 77;} //statisches Attribut, für Klasse geändert

}

//Außen:

MeineKlasse.s = 40; //Zugriff auf statisches Attribut

//noch keine Instanz der Klasse

MeineKlasse ms1 = new MeineKlasse();

MeineKlasse ms2 = new MeineKlasse();

ms1.n = 65; // dies geht erst nach Instanz-Erzeugung

ms1.s = 64; // dasselbe wie MeineKlasse.s = 64;

//ms2.s ist nun ebenfalls 64

Page 23: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

23 23

Beispiel für Nutzung statischer Attribute

class Punkt{

static int anzahl; //statisches Attribut: Anzahl //der Instanzen

Punkt(){

anzahl = anzahl + 1;

}

}

.....

System.out.println(„Anzahl Punkte: „ + Punkt.anzahl); //Ausgabe: 0

Punkt p1 = new Punkt();

Punkt p2 = new Punkt();

System.out.println(„Anzahl Punkte: „ + Punkt.anzahl); //Ausgabe: 2

Page 24: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

24 24

Statische Methoden

• die bisher behandelten Methoden (nicht-statische Methoden)– werden für eine Instanz aufgerufen– haben Zugriff auf alle Attribute der Instanz

• statische Methoden werden – für eine Klasse, nicht für eine Instanz aufgerufen– haben keinen Zugriff auf (nicht-statische) Attribute einer

Instanz– haben Zugriff auf statische Attribute der Klasse

• Definition: Voranstellen von static vor der Definition: class Klassenbezeichner {

static Rückgabetyp Methodenbezeichner (Parameterliste) {

...}

}

Page 25: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

25 25

Aufruf von statischen Methoden

• Aufruf von nicht-statischen Methoden: – Referenzvariable.methode()– es muss Instanz der Klasse (Referenzvariable) existieren

• Zugriff auf statische Attribute: – Klassenname.methode()– es muss nicht unbedingt eine Instanz der Klasse existieren– falls Instanz der existiert: Referenzvariable.methode– oder innerhalb der Klasse: methode

• Beispiel: class MeineKlasse {

static int methode(){

}..........

int i = MeineKlasse.methode();

Page 26: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

26 26

MethodeStatisch()MethodeNichtStatisch()

Statische Methoden: eine Klasse und Ihre Instanzen

Klassestatic int s = 7

int n

Instanzn = 65

Instanzn = 25

Instanzn = 4

Instanzn = 76

Bauplan

Zugriff

Page 27: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

27 27

Bekannte Beispiele für statische Methoden

• public static main ...– wird vom System aufgerufen, obwohl nie eine Instanz der

zugehörigen Klasse erzeugt wurde

• Math.sin(double w)– sin ist eine Methode der Klasse Math– sin wird nicht für eine Instanz aufgerufen, sondern "einfach

so": double d = Math.sin(2);– Aufruf mit vorangestelltem Klassennamen Math

Page 28: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

28 28

Benachbarte Dreiecke statisch

• Die Methode, die ermittelt, ob zwei Dreiecke benachbart sind (Übungsaufgabe), kann alternativ als statische Methode formuliert werden:

class Dreieck{

.......

static boolean benachbart(Dreieck d1, Dreieck d2){

int anzahlGleicherPunkte = 0;

if(d1.A.abstand(d2.A) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(d1.A.abstand(d2.B) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

.........

if(d1.C.abstand(d2.C) == 0 ) anzahlGleicherPunkte = anzahlGleicherPunkte + 1;

if(anzahlGleicherPunkte > 1) return true

else return false;

}

Page 29: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

29 29

Benachbarte Dreiecke statisch: Aufruf

//Aufruf:

Dreieck d1 = new Dreieck(4.3,9.8,2.1);

Dreieck d2 = new Dreieck(5.2,2.1,4.3);

boolean b = Dreieck.benachbart(d1,d2);

if(b) System.out.println("Dreiecke sind benachbart");

//Zum Vergleich: Aufruf mit nicht statischer Methode:

boolean b = d1.benachbart(d2);

Page 30: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

30 30

Hausaufgabe

• Ergänzt die Klasse "Dreieck" so, dass mit einer Methode die Summe der Umfänge aller bisher erzeugten Dreiecke ermittelt und zurückgegeben werden kann. Erzeugt drei Dreiecke und gebt die Summe der Umfänge vorher und nachher aus.

• Hinweis:– es bietet sich an, die Summe der Umfänge in einem

statischen Attribut zu speichern