21
Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Embed Size (px)

Citation preview

Page 1: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Programmiervorkurs WS 2014/15

InstanzmethodenTermin 6

Page 2: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon)public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = flaeche(p);

}public static double flaeche(Polygon p) {

Punkt[] pkt = p.punkte;double f = ...return f;

}}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygons

}

Page 3: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = Polygon.flaeche(p);

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic static double flaeche(Polygon p) {

Punkt[] pkt = p.punkte;double f = ...return f;

}}

Besser: Methode in der Klasse unterbringen, mit der sie häufig gemeinsam eingesetzt wird.

Page 4: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = Polygon.flaeche(p);

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic static double flaeche(Polygon p) {

Punkt[] pkt = p.punkte;double f = ...return f;

}}

Besser: Methode in der Klasse unterbringen, mit der sie häufig gemeinsam eingesetzt wird.

= „Klasse Polygon, bitteberechne mir die Fläche von p“.

Page 5: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = Polygon.flaeche(p);

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic static double flaeche(Polygon p) {

Punkt[] pkt = p.punkte;double f = ...return f;

}}

Beim Aufruf steht vor dem Namen der Methode der Name der Klasse, in welcher die Methode definiert ist.

Page 6: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = this.punkte;double f = ...return f;

}}

Noch Besser: Methoden können sich auf Objekte beziehen.

Page 7: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = this.punkte;double f = ...return f;

}}

Noch Besser: Methoden können sich auf Objekte beziehen.

= Instanzmethoden

Page 8: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = this.punkte;double f = ...return f;

}}

Noch Besser: Methoden können sich auf Objekte beziehen.

= „Polygon p, bitteberechne mir DeineFläche “.

= Instanzmethoden

Page 9: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = this.punkte;double f = ...return f;

}}

Beim Aufruf steht vor dem Namen der Methode der Bezeichner für das Objekt, für das die Methode aufgerufen wird.

Page 10: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = this.punkte;double f = ...return f;

}}

Es muss jetzt kein Polygon mehr übergeben werden.

Page 11: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = this.punkte;double f = ...return f;

}}

Instanzmethoden erkennt man daran, dass sie nicht static sind.

Page 12: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = this.punkte;double f = ...return f;

}}

this ist eine Referenz auf das Polygon, für welches die Methode aufgerufen wurde.

Page 13: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Polygon) public class Flaechenberechnung {

public static void main(String[] args) {Polygon p = ...double f = p.flaeche();

}

}

public class Polygon {public Punkt[] punkte; //die Ecken des Polygonspublic double flaeche() {

Punkt[] pkt = punkte;double f = ...return f;

}}

this kann auch weggelassen werden, wenn Bezeichner (punkte) eindeutig ist.

Page 14: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Kreis) public class Flaechenberechnung {

public static void main(String[] args) {Kreis k = new Kreis(); //erzeuge Kreisk.xM = k.yM = 0.0; //setze Mittelpunkt = (0,0)k.radius = 1.0; //setze Radius auf 1System.out.println("Flaeche = " + k.flaeche());

} }

public class Kreis {public double xM;public double yM;public double radius;public double flaeche() {

return Math.PI * radius * radius;}

}

Page 15: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Kreis) public class Flaechenberechnung {

public static void main(String[] args) {Kreis k = new Kreis(0.0, 0.0, 1.0); //erzeuge Kreis System.out.println("Flaeche = " + k.flaeche());

} } Besser: Erzeuge Kreis gleich mit

den richtigen Attributwerten

Page 16: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Kreis) public class Flaechenberechnung {

public static void main(String[] args) {Kreis k = new Kreis(0.0, 0.0, 1.0); //erzeuge KreisSystem.out.println("Flaeche = " + k.flaeche());

} }

Dies erfordert eine besondere Methode: Einen Konstruktor

Besser: Erzeuge Kreis gleich mit den richtigen Attributwerten

public class Kreis {public double xM;public double yM;public double radius;

public Kreis(double x, double y, double r) {xM = x;yM = y;radius = r;

}public double flaeche() {

return Math.PI * radius * radius;}

}

Page 17: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Kreis)

public class Kreis {public double xM;public double yM;public double radius;

public Kreis(double x, double y, double r) {xM = x;yM = y;radius = r;

}public double flaeche() {

return Math.PI * radius * radius;}

}

kein Rückgabewert (auch nicht void !)

Page 18: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Kreis)

public class Kreis {public double xM;public double yM;public double radius;

public Kreis(double x, double y, double r) {xM = x;yM = y;radius = r;

}public double flaeche() {

return Math.PI * radius * radius;}

}

Bezeichner identisch mit Klassenname

Page 19: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Flächenberechnung (Kreis)

public class Kreis {public double xM;public double yM;public double radius;

public Kreis(double x, double y, double r) {xM = x;yM = y;radius = r;

}public double flaeche() {

return Math.PI * radius * radius;}

}

im Konstruktor werden (in der Regel) die Attributwerte gesetzt

Page 20: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

AufgabeErweitert die Klasse Kreis um dieInstanzmethoden

public double umfang()

und public double distanz(Kreis k)

Die Methode distanz soll die euklidische Distanz zwischen dem Kreis, für den die Methode aufgerufen wird, und dem Kreis k berechnen.

(Die aufrufende Instanz hat natürlich Zugriff auf ihre eigenen Attribute, es ist nicht nötig diese zusätzlich zu übergeben.)

Page 21: Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

AufgabeErstellt eine Klasse Quadrat mit den Attributen

public double xM //x-Koord. Mittelp.public double yM //y-Koord. Mittelp.public double seitenlaenge

und den Methoden

public double umfang()public double flaeche()ZUSATZ: public double distanz(Quadrat q)

Diese Methoden sollen dieselbe Bedeutung wie die gleichnamigen Methoden der Klasse Kreis haben.Für die Berechnung der Distanz könnt Ihr davon ausgehen, dass die Quadrate achsparallel sind.Die Klasse Quadrat soll außerdem einen Konstruktor haben, mit dem sich die Attributwerte setzen lassen.