Benutzer-Werkzeuge

Webseiten-Werkzeuge


klassen2:constructors:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
klassen2:constructors:start [2020/05/26 15:47] Martin Pabstklassen2:constructors:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== Konstruktoren ====== ====== Konstruktoren ======
 +
 +{{youtube>y0az0x-mHx4?medium}}
 +
 Wir haben inzwischen schon viele Objekte instanziert, oft auch mit der Angabe von Parametern. Das folgende Programm instanziert beispielsweise ein Objekt der Klasse ''Rechteck'' und übergibt die Parameter (50, 50, 400, 300) für die Koordinaten der linken oberen Ecke (50, 50), die Breite (400) und die Höhe (300). Wir haben inzwischen schon viele Objekte instanziert, oft auch mit der Angabe von Parametern. Das folgende Programm instanziert beispielsweise ein Objekt der Klasse ''Rechteck'' und übergibt die Parameter (50, 50, 400, 300) für die Koordinaten der linken oberen Ecke (50, 50), die Breite (400) und die Höhe (300).
 <HTML> <HTML>
Zeile 18: Zeile 21:
  Wir lernen in diesem Kapitel, wie wir die Konstruktoren unserer Klassen selbst schreiben können.  Wir lernen in diesem Kapitel, wie wir die Konstruktoren unserer Klassen selbst schreiben können.
  
-===== Beispiel 1: Buntstift =====+===== Beispiel 1: Würfel ===== 
 +Programmiere eine Klasse ''Würfel'', die einen n-seitigen Würfel simuliert. Die Zahl der Seiten soll schon beim Instanzieren mit angegeben werden, ein Hauptprogramm könnte also so aussehen: 
 +<code MyJava> 
 +Würfel w6 = new Würfel(6);     // Würfel-Objekt mit 6 Seiten 
 +Würfel w20 = new Würfel(20);   // Würfel-Objekt mit 20 Seiten 
 +println(w6.würfle()); 
 +println(w20.würfle()); 
 +</code> 
 + 
 +<HTML> 
 + 
 +<div class="java-online" style="height: 400px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Konstruktoren1a'}"> 
 + 
 +<script type="text/plain" title="Beispiel1a.java"> 
 +Würfel w6 = new Würfel(6);     // Würfel-Objekt mit 6 Seiten 
 +Würfel w20 = new Würfel(20);   // Würfel-Objekt mit 20 Seiten 
 +println(w6.würfle()); 
 +println(w20.würfle()); 
 + 
 +class Würfel{ 
 +   int seitenzahl; 
 +    
 +   // Das ist die Konstruktor-Methode ("der Konstruktor") dieser Klasse. Du erkennst sie daran,  
 +   // dass sie den Bezeichner der Klasse ("Würfel") trägt und kein Rückgabedatentyp angegeben ist. 
 +   Würfel(int s){ 
 +      seitenzahl = s; 
 +   } 
 +    
 +   int würfle(){ 
 +      return Math.floor(Math.random()*seitenzahl) + 1; 
 +   } 
 +
 +</script> 
 +</div> 
 +</HTML> 
 + 
  
 +===== Beispiel 2: Buntstift =====
 +Schau' Dir das folgende Beispielprogramm an und überlege Dir, an welchen Stellen des Programms der Konstruktor ''Buntstift(Color farbe1)'' aufgerufen wird und welchen Zweck er hat.
  
 <HTML> <HTML>
Zeile 28: Zeile 69:
 Buntstift rotstift = new Buntstift(Color.red); Buntstift rotstift = new Buntstift(Color.red);
 rotstift.schreibe("Hallo Welt!"); rotstift.schreibe("Hallo Welt!");
 +
 Buntstift grünstift = new Buntstift(Color.lime); Buntstift grünstift = new Buntstift(Color.lime);
 grünstift.schreibe("Das ist grün"); grünstift.schreibe("Das ist grün");
Zeile 36: Zeile 78:
    Color farbe;    Color farbe;
  
-   public Buntstift(Color farbe1) {+   // Das ist die Konstruktor-Methode ("der Konstruktor") dieser Klasse. Du erkennst sie daran,  
 +   // dass sie den Bezeichner der Klasse ("Buntstift") trägt und kein Rückgabedatentyp angegeben ist. 
 +   Buntstift(Color farbe1) {
       farbe = farbe1;       farbe = farbe1;
    }    }
  
-   public void schreibe(String text) {+   void schreibe(String text) {
       println(text, farbe);       println(text, farbe);
    }    }
Zeile 48: Zeile 92:
 </div> </div>
 </HTML> </HTML>
- 
 ===== Aufgabe ===== ===== Aufgabe =====
 Führe das Programm Schrittweise mit "step into ({{:klassen2:constructors:step-into-dark.png?nolink|}})" aus und beobachte, in welcher Reihenfolge die Programmzeilen durchlaufen werden! Führe das Programm Schrittweise mit "step into ({{:klassen2:constructors:step-into-dark.png?nolink|}})" aus und beobachte, in welcher Reihenfolge die Programmzeilen durchlaufen werden!
Zeile 136: Zeile 179:
 </HTML> </HTML>
  
-===== Beispiel 2: Polynomrechner =====+===== Beispiel 3: Polynomrechner ===== 
 +Die Klasse ''PolynomZweitenGrades'' repräsentiert ein Polynom 2. Grades, also einen Term der Form $ax^2+bx+c$. Die Werte für die Konstanten a, b und c werden beim Instanzieren des Objekts dem Konstruktor übergeben und in den entsprechenden Attributen gespeichert, so dass dann in der Methode ''getWert(double x)'' für jeden beliebigen Wert von x der Wert des Polynoms berechnet werden kann.  
 <HTML> <HTML>
  
Zeile 142: Zeile 187:
  
 <script type="text/plain" title="Polynomrechner.java"> <script type="text/plain" title="Polynomrechner.java">
-PolynomZweitenGrades p = new PolynomZweitenGrades(1, 2, -3);+PolynomZweitenGrades p = new PolynomZweitenGrades(1, 2, -3);    // Definiert das Polynom 1x^2+2x-3
 println("p(4) = " + p.getWert(4)); println("p(4) = " + p.getWert(4));
 println("p(-1) = " + p.getWert(-1)); println("p(-1) = " + p.getWert(-1));
Zeile 165: Zeile 210:
 </HTML> </HTML>
  
-Die Klasse ''PolynomZweitenGrades'' repräsentiert ein Polynom 2. Grades, also einen Term der Form {{:klassen2:constructors:polynom_2._grades.png?nolink 120|}}. Die Werte für die Konstanten a, b und c werden beim Instanzieren des Objekts dem Konstruktor übergeben und in den entsprechenden Attributen gespeichert, so dass dann in der Methode ''getWert(double x)'' für jeden beliebigen Wert von x der Wert des Polynoms berechnet werden kann.  
  
-===== Aufgabe: Die Klasse Bruch ===== +===== Aufgabe 1: Die Klasse Bruch ===== 
-Ein Objekt der Klasse Bruch repräsentiert einen Bruch $\frac{a}{b}$, wobei $a\in\mathbb{Z}$ und $b\in\mathbb{N}$Die Klasse soll einen Konstruktor besitzen, der die Werte für $a$ und $b$ entgegennimmt. Zudem soll sie die Methoden ''ausgabeUnecht()'' und ''ausgabeEcht()'' habendie den Bruch als unechten bzw. echten Bruch ausgeben. Mit den Methoden ''mal'' und ''geteilt'' soll es möglich sein, den Wert eines Bruches mit dem Wert eines anderen zu multiplizieren bzw. durch ihn zu dividieren. Hier ein beispielhaftes Hauptprogramm zusammen mit der Ausgabe: +Im vorhergehenden Kapitel haben wir eine [[[klassen2:attribute:start#aufgabe_4eine_klasse_zum_bruchrechnen|Klasse zum Bruchrechnen]] kennengelerntErweitere sie um einen Konstruktor, der Zähler und Nenner als Parameter entgegennimmt, so dass man statt 
-<code learnj+<code myJava
-Bruch b1 = new Bruch(4, 3); +Bruch b1 = new Bruch(); 
-Bruch b2 = new Bruch(1, 2); +b1.zähler = 3
-b1.ausgabeUnecht()+b1.nenner = 4;
-b1.ausgabeEcht(); +
-b1.mal(b2); +
-b1.ausgabeUnecht();+
 </code> </code>
-Dieses Programm soll folgendes ausgeben: +einfach schreiben kann 
-<code learnj+<code myJava
-4/3 +Bruch b1 = new Bruch(3,4);
-1 1/3 +
-4/6+
 </code> </code>
- 
-<WRAP center round alert 60%> 
-An meine Schüler/innen: Bitte benutzt **nicht** den folgenden Eingabebereich, sondern Eure Entwicklungumgebung unter {{https://www.mathe-pabst.de/java|www.mathe-pabst.de/java}}. Legt dort einen neuen Workspace "Hausaufaben" an und darin die Datei "Bruch", in die Ihr das Hauptprogramm und Eure Klasse Bruch schreibt. \\  
-Die Tipps im Eingabebereich unten könnt Ihr Euch aber natürlich ansehen! 
-</WRAP> 
- 
-<WRAP center round todo 60%> 
-Für die Guten und Interessierten unter Euch: \\  
-Ihr könntet die Klasse ''Bruch'' erweitern um die Methoden 
-  * ''kürze()'' (kürzt den Bruch) 
-  * ''addiere(Bruch b)'' (addiert zum Bruch einen weiteren Bruch) 
-  * ''subtrahiere(Bruch b)'' (subtrahiert vom Bruch einen weiteren Bruch)  
-</WRAP> 
- 
  
 <HTML> <HTML>
Zeile 203: Zeile 228:
  
 <script type="text/plain" title="Bruch.java"> <script type="text/plain" title="Bruch.java">
-Bruch b1 = new Bruch(4, 3); 
-Bruch b2 = new Bruch(1, 2); 
-b1.ausgabeUnecht(); 
-b1.ausgabeEcht(); 
-b1.mal(b2); 
-b1.ausgabeUnecht(); 
  
-class Bruch { 
- 
-} 
-</script> 
-<script type="text/plain" title="Tipp 1 (Konstruktor)" data-type="hint"> 
-## Tipp 1 
-Die Klasse Bruch benötigt zwei Attribute ``a`` und ``b`` vom Typ ``int`` um Zähler bzw. Nenner zu speichern. Zudem benötigt sie einen Konstruktor, mit dem die Werte von ``a`` und ``b`` gesetzt werden: 
-``` 
-class Bruch { 
-   int a; 
-   int b; 
-    
-   public Bruch(int a, int b){ 
-      this.a = a; 
-      this.b = b; 
-   } 
-} 
-``` 
-</script> 
-<script type="text/plain" title="Tipp 2 (Methoden)" data-type="hint"> 
-## Tipp 2 
-Wisst Ihr noch, wie man eine Methode deklariert? Die Methode ``mal`` nimmmt als Parameter ein ``Bruch``-Objekt entgegen und gibt nichts (``void``) zurück. Sie verändert nur den Zustand des Bruches. Beachtet: innerhalb der Methode ist ``a`` der Zähler des Bruch-Objekts, dessen mal-Methode aufgerufen wurde. ``bruch2.a`` ist der Zähler des Bruch-Objekts, das als Parameter übergeben wurde.  
-``` 
-class Bruch { 
-   public void mal(Bruch bruch2){ 
-      // Hier weiterprogrammieren! 
-   } 
-} 
-``` 
-</script> 
-</div> 
-</HTML> 
- 
- 
- 
- 
-<hidden Lösung>  
-<HTML> 
- 
-<div class="java-online" style="height: 500px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'Konstruktoren6'}"> 
- 
-<script type="text/plain" title="Bruch.java"> 
 Bruch b1 = new Bruch(4, 3); Bruch b1 = new Bruch(4, 3);
 Bruch b2 = new Bruch(1, 2); Bruch b2 = new Bruch(1, 2);
Zeile 264: Zeile 241:
    int n;    int n;
  
-   public Bruch(int z, int n) { +   // Hier fehlt der Konstruktor!
-      this.z = z; +
-      this.n = n; +
-   }+
  
    public void ausgabeUnecht() {    public void ausgabeUnecht() {
Zeile 343: Zeile 317:
    }    }
 } }
 +
 </script> </script>
 +
 </div> </div>
 </HTML> </HTML>
 +[[.loesung:aufgabe1:start|Hier geht's zur Lösung!]]
  
-</hidden>+===== Aufgabe 2: Die Klasse Tier ===== 
 +Füge der [[klassen2:attribute:start#aufgabe_1tiere|Klasse Tier aus dem vorangegangenen Kapitel]] einen Konstruktor hinzu, so dass man das Tier-Objekt zur Katze "Pirat" mit 3 Beinen folgendermaßen instanzieren kann: 
 +<code myJava> 
 +Tier p = new Tier("Katze", "Pirat", 3); 
 +</code> 
 + 
 +<HTML> 
 + 
 +<div class="java-online" style="height: 500px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'KonstruktorenAufgabe2'}"> 
 + 
 +<script type="text/plain" title="Tier2.java"> 
 +Tier p = new Tier("Katze", "Pirat", 3); 
 +p.vorstellen(); 
 + 
 +class Tier { 
 +   String art; 
 +   String name; 
 +   int beinzahl; 
 + 
 +   // Hier fehlt der Konstruktor! 
 +    
 +   void vorstellen(){ 
 +      println("Ich heiße " + name + " und bin ein/e " + art + " mit " + beinzahl + " Beinen."); 
 +    
 +   } 
 + 
 +
 +</script> 
 + 
 +</div> 
 +</HTML> 
 +[[.loesung:aufgabe2:start|Hier geht's zur Lösung!]]
klassen2/constructors/start.1590500849.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki