Programmiervorkurs WS 2014/15 Instanzmethoden Termin 6

Preview:

Citation preview

Programmiervorkurs WS 2014/15

InstanzmethodenTermin 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

}

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.

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“.

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.

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.

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

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

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.

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.

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.

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.

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.

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;}

}

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

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;}

}

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 !)

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

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

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.)

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.

Recommended