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/11/29 18:26] – [Aufgabe: Die Klasse Bruch] 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 38: Zeile 80:
    // Das ist die Konstruktor-Methode ("der Konstruktor") dieser Klasse. Du erkennst sie daran,     // 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.    // dass sie den Bezeichner der Klasse ("Buntstift") trägt und kein Rückgabedatentyp angegeben ist.
-   public Buntstift(Color farbe1) {+   Buntstift(Color farbe1) {
       farbe = farbe1;       farbe = farbe1;
    }    }
  
-   public void schreibe(String text) {+   void schreibe(String text) {
       println(text, farbe);       println(text, farbe);
    }    }
Zeile 50: 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 138: 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 144: 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 167: 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 =====
 Im vorhergehenden Kapitel haben wir eine [[[klassen2:attribute:start#aufgabe_4eine_klasse_zum_bruchrechnen|Klasse zum Bruchrechnen]] kennengelernt. Erweitere sie um einen Konstruktor, der Zähler und Nenner als Parameter entgegennimmt, so dass man statt Im vorhergehenden Kapitel haben wir eine [[[klassen2:attribute:start#aufgabe_4eine_klasse_zum_bruchrechnen|Klasse zum Bruchrechnen]] kennengelernt. Erweitere sie um einen Konstruktor, der Zähler und Nenner als Parameter entgegennimmt, so dass man statt
 <code myJava> <code myJava>
Zeile 187: Zeile 229:
 <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 {
 +
 +   int z;
 +   int n;
 +
 +   // Hier fehlt der Konstruktor!
 +
 +   public void ausgabeUnecht() {
 +      println(z + "/" + n);
 +   }
 +
 +   public void ausgabeEcht() {
 +
 +      int a1 = z;
 +
 +      if(Math.abs(z) >= n) {
 +         int ganzerAnteil = z / n;
 +         a1 = z - ganzerAnteil * n;
 +         if(a1 < 0) {
 +            a1 = -a1;
 +         }
 +         print(ganzerAnteil + " ");
 +      }
 +      
 +      println(a1 + "/" + n);
 +      
 +   }
 +
 +   public void mal(Bruch b2) {
 +      
 +      z = z * b2.z;
 +      n = n * b2.n;
 +
 +      kürze();
 +
 +   }
 +
 +   public void geteilt(Bruch b2) {
 +      
 +      z = z * b2.n;
 +      n = n * b2.z;
 +
 +      kürze();
 +
 +   }
 +
 +   public void addiere(Bruch b2) {
 +
 +      // a/b + c/d = (a*d)/(b*d) + (c*b)/(d*b) = (a*d + c*b)/(b*d)
 +
 +      z =(z * b2.n + b2.z * n);
 +      n = n * b2.n;
 +
 +      kürze();
 +
 +   }
 +
 +   public void subtrahiere(Bruch b2) {
 +
 +      // a/b - c/d = (a*d)/(b*d) - (c*b)/(d*b) = (a*d - c*b)/(b*d)
 +
 +      z =(z * b2.n - b2.z * n);
 +      n = n * b2.n;
 +
 +      kürze();
 +
 +   }
 +
 +   public void kürze() {
 +      
 +      for(int i = 2; i <= Math.sqrt(Math.abs(z)); i++) {
 +         
 +         if(z % i == 0 && n % i == 0) {
 +            z = z / i;
 +            n = n / i;
 +         }
 +
 +      }
 +
 +   }
 +}
  
 </script> </script>
Zeile 193: Zeile 323:
 </HTML> </HTML>
 [[.loesung:aufgabe1:start|Hier geht's zur Lösung!]] [[.loesung:aufgabe1:start|Hier geht's zur Lösung!]]
 +
 +===== 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.1606670762.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki