17
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Embed Size (px)

Citation preview

Page 1: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Java-Kurs - 7. Übung

• Besprechung der Hausaufgabe

• Referenzvariablen

• Attribute als Referenzvariablen

• Programme mit mehreren Klassen

Page 2: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Hausaufgabe 5: Dreieckclass Dreieck{//Attribute Punkt A; Punkt B; Punkt C; //Konstruktor Dreieck(double xa, double ya, double xb, double yb, double xc, double yc) { A = new Punkt(xa , ya); B = new Punkt(xb , yb); C = new Punkt(xc , yc); }//Methoden void verschiebe(double dx, double dy) { A.verschiebe(dx, dy); B.verschiebe(dx, dy); C.verschiebe(dx, dy); } void ausgabe() { System.out.println(" "); System.out.println("Punkt A:"); A.ausgabe(); System.out.println(" "); System.out.println("Punkt B:"); B.ausgabe(); System.out.println(" "); System.out.println("Punkt C:"); C.ausgabe(); System.out.println(" "); } double flaeche() { //Berechng. der Flaeche ueber die Determinante double flaeche = 0.5*(A.x*(B.y-C.y)+B.x*(C.y-A.y)+C.x*(A.y-B.y)); return flaeche; }

Page 3: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Hausaufgabe 5: Trapezclass Trapez{ // Attribute Punkt A; Punkt B; Punkt C; Punkt D;//Konstruktor Trapez(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy) { A= new Punkt(ax,ay); B= new Punkt(bx,by); C= new Punkt(cx,cy); D= new Punkt(dx,dy); } // Methoden void verschiebe(double tx, double ty) { A.verschiebe(tx,ty); B.verschiebe(tx,ty); C.verschiebe(tx,ty); D.verschiebe(tx,ty); } void ausgabe() { System.out.println(" "); System.out.println("Punkt A:"); A.ausgabe(); System.out.println(" "); System.out.println("Punkt B:"); B.ausgabe(); System.out.println(" "); System.out.println("Punkt C:"); C.ausgabe(); System.out.println(" "); System.out.println("Punkt D:"); D.ausgabe(); System.out.println(" "); } double flaeche() { return 0.5*(((A.x-B.x)*(A.y+B.y))+((B.x-C.x)*(B.y+C.y))+ ((C.x-D.x)*(C.y+D.y))+((D.x-A.x)*(D.y+A.y))); //Berechnung d. Flaeche nach der Gauss'schen Flaechenformel //fuer Polygone } }

Page 4: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Hausaufgabe 5: Kreisclass Kreis{//Attribute Punkt mitt; //Mittelpunkt double radius;

//Konstruktor

Kreis(double x_mitt, double y_mitt, double rad) { mitt = new Punkt_muenster(x_mitt, y_mitt); radius = rad; } //Methoden void verschiebe(double dx, double dy) { mitt.verschiebe(dx, dy); } void ausgabe() { System.out.println(" "); System.out.println("Koordinaten des Mittelpunktes: "); mitt.ausgabe(); System.out.println(" "); System.out.println("Radius:"); System.out.println(radius); System.out.println(" "); } double flaeche() { return Math.PI*radius*radius; }}

Page 5: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Hausaufgabe 5: Ellipseclass Ellipse{ // Attribute Punkt mitt; double halbachse_a; double halbachse_b; // Konstruktor Ellipse(double x_mitt, double y_mitt, double rad_a, double rad_b) { mitt = new Punkt(x_mitt, y_mitt); halbachse_a = rad_a; halbachse_b = rad_b; } // Methoden void verschiebe(double dx, double dy) { mitt.verschiebe(dx, dy); } void ausgabe() { System.out.println(" "); System.out.println("Mittelpunkt der Ellipse: "); System.out.println(mitt); System.out.println(" "); System.out.print("Halbachse a : "); System.out.println(halbachse_a); System.out.print("Halbachse b : "); System.out.println(halbachse_b); System.out.println(" "); } double flaeche() { return Math.PI*halbachse_a*halbachse_b; } }

Page 6: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Hausaufgabe 5: Punktpublic class Punkt { double x; //x-Koordinate double y; //y-Koordinate

/** Creates new Punkt */ public Punkt(double xstartwert, double ystartwert){ x = xstartwert; y = ystartwert; }

public Punkt(Punkt p){ x = p.x; y = p.y; }

double abstand(Punkt p){ return Math.sqrt( Math.pow(p.x - x,2) + Math.pow(p.y - y,2) ); }

boolean gleich(Punkt p){ return x == p.x && y == p.y; }

void verschiebe (double dx, double dy) { x = x + dx; y = y + dy; }

void ausgabe() { System.out.print("x = "); System.out.print(x); System.out.print(" , y = "); System.out.println(y); }

}

} double flaeche() { return Math.PI*halbachse_a*halbachse_b; } }

Page 7: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Referenzvariablen

• Eine Referenzvariable ist eine Variable, die als Typ eine Klasse hat

• z.B. Punkt p = new Punkt(3,8);• Referenzvariablen zeigen auf Objekte, sie

enthalten nicht selber das Objekt (Synonyme: Zeiger, Referenzen, Speicheradressen, Namen, ...)

• Insbesondere können 2 Referenzvariablen auf dasselbe Objekt zeigen

Page 8: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Unterschied zu "einfachen" Variablen

Referenzvariablen

Punkt p1 = new Punkt(2,4);Punkt p2 = new Punkt(7,9);

"einfache" Variablen

int i = 7;int j = 4;

7

p1 p2 i j

4

Punkt(2,4) Punkt(7,9)

Page 9: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Unterschied zu "einfachen" Variablen

Referenzvariablen

Punkt p1 = new Punkt(2,4);Punkt p2 = new Punkt(7,9);p1 = p2;

"einfache" Variablen

int i = 7;int j = 4;i = j;

4

p1 p2 i j

4

Punkt(2,4) Punkt(7,9)

Page 10: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Unterschied zu "einfachen" Variablen

Referenzvariablen

Punkt p1 = new Punkt(2,4);Punkt p2 = new Punkt(7,9);p1 = p2;p2.verschiebe(44,33);

"einfache" Variablen

int i = 7;int j = 4;i = j;j = 77;

4

p1 p2 i j

77

Punkt(2,4) Punkt(51,42)

Page 11: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Unterschied zu "einfachen" Variablen

Referenzvariablen

Punkt p1 = new Punkt(2,4);Punkt p2 = new Punkt(7,9);p1 = p2;p2.verschiebe(44,33);//p1 ebenfalls verschoben

"einfache" Variablen

int i = 7;int j = 4;i = j;j = 77;//i ist weiterhin 4

4

p1 p2 i j

77

Punkt(2,4) Punkt(51,42)

Page 12: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Attribute als Referenzvariablen

• Eine Klasse kann als Attribut eine Referenzvariable haben

• Beispiel: Klasse Dreieck hat als Attribute 3 Variablen der Klasse Punkt

• Beispiel aus Vorlesung "Diskrete Mathe": Klasse Liste hat Attribut weiter (Typ Liste)

• Bestandteilshierarchie (vgl. UML - Vorlesung GIS): Ein Objekt besteht aus anderen Objekten

• ==> Programme mit mehreren Klassen

Page 13: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Programme mit mehreren Klassen

• Eine Klasse kennt alle Klassen im selben Verzeichnis (Sie sind im selben Package,kommt später)

• Voraussetzungen:• Klasse ist nicht protected• Verzeichnis ist unmittelbar in Forte verbunden

• Genau eine Klasse pro Datei (Dateiname = Klassenname)

• Genau eine Klasse hat Methode main

Page 14: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Erzeugen von Klassen ohne main

• Explorer-Fenster von Forte

• mit Maus auf Aktuelles Verzeichnis

• rechte Maustaste -> New from Template - Classes - Class

Page 15: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Programme mit mehreren Klassen: Ausführen

• Im Explorer von Forte Klasse mit main markieren (Maus)

• Grünes Dreieck im Hauptfenster oder rechte Maustaste - Execute

• Vorsicht: andere Dateien (außer der markierten) werden nicht neu compiliert!

Page 16: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Programme mit mehreren Klassen: Compilieren

• Im Explorer von Forte übergeordnetes Verzeichnis markieren (mit Maus)

• rechte Maustaste - Compile oder Build

• Compile: Nur geänderte Dateien im Verzeichnis werden compiliert

• Build: Alle Dateien im Verzeichnis werden compiliert

• Compile/Build All: Auch in Unterverzeichnissen

Page 17: Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen Attribute als Referenzvariablen Programme mit mehreren Klassen

Übungsaufgabe 6

• Entwerfen Sie eine Klassendefinition für (einfache) Polygone mit beliebig vielen Stützpunkten. Als Methoden sollten mindestens die Umfangs- und Flächenberechnung sowie die Verschiebung zur Verfügung gestellt werden. Es soll sichergestellt werden können, dass die Polygone mathematisch korrekt sind. Erzeugen Sie ein Polygon und wenden Sie die definierten Methoden an.