Benutzer-Werkzeuge

Webseiten-Werkzeuge


g9:uebungen:attribute: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
g9:uebungen:attribute:start [2021/12/29 11:29] – Externe Bearbeitung 127.0.0.1g9:uebungen:attribute:start [2022/06/30 07:40] (aktuell) Martin Pabst
Zeile 6: Zeile 6:
 </WRAP> </WRAP>
  
-===== Beispiel 1: Die Klasse Person ===== +===== Beispiel 1: Die Klasse Tier ===== 
-Wir beginnen mit einem künstlichen - dafür aber sehr einfachen - Beispiel: Einer Klasse ''Person'' mit den Attributen ''name'' und ''geschlecht'' (Datentyp: ''String'') sowie ''größe'' (Datentyp: ''double'', gemeint ist: in m).  +Wir beginnen mit einem künstlichen - dafür aber sehr einfachen - Beispiel: Einer Klasse ''Tier'' mit den Attributen ''name'', ''art'' und ''anzahlBeine''
-<WRAP center round tip 60%> +
-Unter Programmierern ist es ''Konvention'' Attribute mit Kleinbuchstaben zu beginnen. Attributbezeichner dürfen keine Leerzeichen enthalten. Setzt sich ein Attribut aus mehreren Wörtern zusammen, so trennt man sie entweder mit Unterstrichen (weniger üblich, z.B. ''handbreite_in_cm'') oder verwendet Großschreibung mitten im Wort ([[https://en.wikipedia.org/wiki/Camel_case|camel case]], auf deutsch: [[https://de.wikipedia.org/wiki/Binnenmajuskel|Binnenmajuskel]], z.B. ''handbreiteInCm''). +
-</WRAP>+
  
 <HTML> <HTML>
Zeile 17: Zeile 14:
  
 <script type="text/plain" title="Attribute1.java"> <script type="text/plain" title="Attribute1.java">
-Person fritzi = new Person(); +Tier s = new Tier(); 
-fritzi.name = "Fritzi Fleißig"; +s.name = "Snoopy"; 
-fritzi.geschlecht = "weiblich"; +s.art = "Katze"; 
-fritzi.größe 1.67;+s.anzahlBeine 4;
  
-Person max = new Person(); +Tier g = new Tier(); 
-max.name = "Max Munter"; +g.name = "Gerda"; 
-max.geschlecht = "männlich"; +g.art = "Huhn"; 
-max.größe 1.66;+g.anzahlBeine 2;
  
-println("Fritzis Name ist: " + fritzi.name); +println(s.name); 
-println("Max ist " + max.größe + " m groß.");+println(g.anzahlBeine);
  
-class Person {+class Tier {
    String name;    String name;
-   String geschlecht+   String art
-   double größe;+   int anzahlBeine;
 } }
 </script> </script>
Zeile 41: Zeile 38:
 <WRAP center round info 80%> <WRAP center round info 80%>
 **Deklaration von Attributen:** \\  **Deklaration von Attributen:** \\ 
-Attribute werden deklariert, indem man auf oberster Ebene innerhalb der Klassendeklaration (also **nicht** innerhalb einer Methode!) den Datentyp des Attributs gefolgt von seinem Bezeichner schreibt, z.B. +Attribute werden deklariert, indem man auf oberster Ebene innerhalb der Klassendeklaration (also **nicht** innerhalb einer Methode!) den Datentyp des Attributs gefolgt von seinem Bezeichner schreibt.
-<code myJava> +
-class Person { +
-   String name; +
-   String geschlecht; +
-   double größe; +
-+
-</code>+
 Es ist auch möglich, bei der Attributdeklaration einen Anfangswert anzugeben, z.B. Es ist auch möglich, bei der Attributdeklaration einen Anfangswert anzugeben, z.B.
 <code myJava> <code myJava>
-   String geschlecht = "weiblich";+   String art = "Katze";
 </code> </code>
  
-Auf die Attribute von Objekten kann man außerhalb der Klassendeklaration mithilfe der Punktschreibweise zugreifen. Wie das geht, siehst Du im obigen Beispiel in den Zeilen 2 - 12.+Auf die Attribute von Objekten kann man außerhalb der Klassendeklaration mithilfe der Punktschreibweise zugreifen. Wie das geht, siehst Du im obigen Beispiel.
 </WRAP> </WRAP>
  
Zeile 62: Zeile 52:
 Attributdeklarationen und Methodendeklarationen dürfen innerhalb einer Klassendeklaration beliebig hintereinander stehen. Es ist aber üblich, **gleich zu Beginn** einer Klassendeklaration **alle Attribute** der Klasse zu deklarieren und danach erst die Methoden. \\ \\  Attributdeklarationen und Methodendeklarationen dürfen innerhalb einer Klassendeklaration beliebig hintereinander stehen. Es ist aber üblich, **gleich zu Beginn** einer Klassendeklaration **alle Attribute** der Klasse zu deklarieren und danach erst die Methoden. \\ \\ 
  
-<code myJava> 
-class Person { 
-   String name; 
-   String geschlecht; 
-   double größe; 
-    
-   // Jetzt kommt eine Methodendeklaration: 
-   void schreibeName(){ 
-      println(name); 
-   } 
-} 
-</code> 
 Innerhalb von Methodendeklarationen kann man auf Attribute wie auf gewöhnliche Variablen durch Angabe ihres Bezeichners zugreifen. Du siehst das im obigen Beispiel in der Anweisung ''println(name)''. Ausgegeben wird der Wert des Attributs Name desjenigen Objekts, für das die Methode aufgerufen wurde. Innerhalb von Methodendeklarationen kann man auf Attribute wie auf gewöhnliche Variablen durch Angabe ihres Bezeichners zugreifen. Du siehst das im obigen Beispiel in der Anweisung ''println(name)''. Ausgegeben wird der Wert des Attributs Name desjenigen Objekts, für das die Methode aufgerufen wurde.
  
Zeile 87: Zeile 65:
  
 <script type="text/plain" title="Attribute2.java"> <script type="text/plain" title="Attribute2.java">
-Person fritzi = new Person(); +Tier s = new Tier(); 
-fritzi.name = "Fritzi Fleißig"; +s.name = "Snoopy"; 
-fritzi.geschlecht = "weiblich"; +s.art = "Katze"; 
-fritzi.größe 1.67;+s.anzahlBeine 4;
  
-Person max = new Person(); +Tier g = new Tier(); 
-max.name = "Max Munter"; +g.name = "Gerda"; 
-max.geschlecht = "männlich"; +g.art = "Huhn"; 
-max.größe 1.66;+g.anzahlBeine 2;
  
-fritzi.schreibeName(); +s.stellDichVor(); 
-fritzi.begrüßen(); +g.stellDichVor();
-println(); +
-max.begrüßen();+
  
-class Person {+class Tier {
    String name;    String name;
-   String geschlecht+   String art
-   double größe+   int anzahlBeine
-    + 
-   void schreibeName(){ +   void stellDichVor() { 
-      print(name); +      println("Ich heiße name + " und bin ein/e + art);
-   } +
-    +
-   void begrüßen(){ +
-      println("Guten Tag, "); +
-      if(geschlecht == "weiblich"){ +
-         print("Frau "); +
-      } else { +
-         print("Herr "); +
-      } +
-      println(name + "!");+
    }    }
 +
 } }
 </script> </script>
Zeile 126: Zeile 93:
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Führe das Programm schrittweise mit "step into ({{:klassen2:constructors:step-into-dark.png?nolink|}})" aus und beobachte, welchen Wert die Attribute ''name'' und ''geschlecht'' jeweils innerhalb der Methoden haben! Öffne dazu rechts den Variablen-Reiter. Die Objekte werden jeweils im "zugeklappten" Zustand gezeigt. Klappe sie auf! \\ \\ +Führe das Programm schrittweise mit "step into ({{:klassen2:constructors:step-into-dark.png?nolink|}})" aus und beobachte, welchen Wert die Attribute ''name'' und ''art'' jeweils innerhalb der Methoden haben! Öffne dazu rechts den Variablen-Reiter. Die Objekte werden jeweils im "zugeklappten" Zustand gezeigt. Klappe sie auf! \\ \\ 
 Wenn sich der Aktuelle Ausführungspunkt des Programms (grün hinterlegte Programmzeile) gerade innerhalb einer Methode befindet, wird das Objekt, für das die Methode aufgerufen wurde, immer mit ''this'' bezeichnet. Klappe daher auch das ''this''-Objekt im Reiter "Variablen" auf und schau' Dir seine Attributwerte an. Wenn sich der Aktuelle Ausführungspunkt des Programms (grün hinterlegte Programmzeile) gerade innerhalb einer Methode befindet, wird das Objekt, für das die Methode aufgerufen wurde, immer mit ''this'' bezeichnet. Klappe daher auch das ''this''-Objekt im Reiter "Variablen" auf und schau' Dir seine Attributwerte an.
 </WRAP> </WRAP>
  
-{{ :klassen2:attribute:objekte_betrachten.gif |}} +===== Aufgabe 1: RechteckHelfer =====
- +
-{{ :klassen2:attribute:pasted:20201122-202223.png?300}} +
-===== Beispiel 4: Ampel ===== +
-Wir programmieren eine Klasse ''Ampel'', die eine einfache Fußgängerampel Zeichnet und Methoden ''schalteGrün()'' und ''schalteRot()'' zum Umschalten besitzt. Die Ampel besteht aus einem ''Rectangle''-Objekt und zwei ''Circle''-Objekten. Diese speichern wir als Attribute der Klasse ''Ampel''. Sie werden in der Methode ''init()'' instanziert und initialisiert. +
- +
-<WRAP center round todo 60%> +
-Ich habe Dir noch etwas Arbeit im Programm hinterlassen (siehe die Kommentare). Vielleicht möchtest Du die Ampel auch noch etwas umfangreicher gestalten: +
-  * Umgib das Gehäuse mit einem dunkelgrauen Rahmen (Methode ''setBorderColor'' der ''Rectangle''-Klasse!) +
-  * Füge ein gelbes Licht hinzu! +
-  * Füge eine "Fuß" hinzu! +
-</WRAP> +
- +
- +
-<HTML> +
- +
-<div class="java-online" style="height: 550px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'Attribute4'}"> +
- +
-<script type="text/plain" title="Attribute4.java"> +
-Ampel a = new Ampel(); +
-a.init(); +
-a.schalteRot(); +
-Input.readString("Drücke die Taste Enter!"); +
-a.schalteGrün(); +
-Input.readString("Drücke die Taste Enter!"); +
-a.schalteAus(); +
- +
-class Ampel { +
-   Rectangle gehäuse; +
-   Circle lichtOben; +
-   Circle lichtUnten; +
- +
-   void init() { +
- +
-      // Instanzieren und Initialisieren des Gehäuses: +
-      gehäuse = new Rectangle(340, 140, 120, 220); +
-      gehäuse.setFillColor(Color.gray); +
- +
-      // Ergänze den Code zum Instanzieren und initialisieren der beiden Lichter! +
-      // Die Lichter sollen initial beide mit der Farbe Color.darkgray gefüllt sein. +
- +
-   } +
- +
-   void schalteRot() { +
-      lichtOben.setFillColor(Color.red); +
-      lichtUnten.setFillColor(Color.darkgray); +
-   } +
- +
-   // Ergänze Methoden schalteGrün() und schalteAus()! +
- +
-+
-</script> +
-</div> +
-</HTML> +
- +
-[[:klassen2:attribute:ampelloesung:start|Hier geht's zur Lösung!]] +
-===== Aufgabe 1: Tiere ===== +
-Erstelle eine Klasse ''Tier'' mit den Attributen ''art'' (Typ ''String''), ''name'' (Typ ''String'') und ''beinzahl'' (Typ ''int'') sowie einer Methode ''vorstellen()'', die im Falle der Katze Snoopy (mit zum Glück noch 4 Beinen) folgende Meldung ausgibt: +
-<code> +
-Ich heiße Snoopy und bin ein/e Katze mit 4 Beinen. +
-</code>  +
- +
-<HTML> +
- +
-<div class="java-online" style="height: 550px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'AttributeAufgabe1'}"> +
- +
-<script type="text/plain" title="AttributeAufgabe1.java"> +
-Tier s = new Tier(); +
-s.name = "Snoopy"; +
-s.art = "Katze"; +
-s.beinzahl = 4; +
- +
-Tier c = new Tier(); +
-c.name = "Caruso"; +
-c.art = "Hahn"; +
-c.beinzahl = 2; +
- +
-s.vorstellen(); +
-c.vorstellen(); +
- +
-// Jetzt bist Du dran: Definiere hier die Klasse Tier, so dass das Programm oben  +
-// fehlerfrei läuft. +
- +
- +
- +
- +
-</script> +
-</div> +
-</HTML> +
- +
-[[:klassen2:attribute:Aufgabe1Loesung:start|Hier geht's zur Lösung.]] +
- +
- +
-===== Aufgabe 2: Längeneinheiten ===== +
-<WRAP center round tip 80%> +
-Sind Dir schon mal Längenangaben wie //12 in// oder //17 zoll// oder //14%%''%%// begegnet? Sie bezeichnen dieselbe Längeneinheit [[https://www.typolexikon.de/inch/| Inch (im deutschen auch als "englischer Zoll" bezeichnet)]] und werden in Deutschland bespielsweise zur Angabe von Monitor-Diagonalen verwendet. In England und den USA sind sie neben den international vereinbarten [[https://de.wikipedia.org/wiki/Internationales_Einheitensystem|SI-Einheiten]] bis heute weit verbreitet. \\ \\  +
-**Umrechnung:** 1 in = 2.54 cm  +
-</WRAP> +
- +
-Schreibe eine Klasse ''Länge'' mit den Methoden ''speichere(double länge, String einheit)'', ''schreibeInch()'' und ''schreibeCm()'', die bei der Umrechnung der beiden Längeneinheiten hilft. Hier ein beispielhaftes Hauptprogramm zusammen mit der Ausgabe, durch das die Bedeutung der Methoden klar wird: +
-== Programm: == +
-<code myJava> +
-Länge a = new Länge(); +
-a.speichere(3.0, "inch"); +
-a.schreibeCm(); +
-a.speichere(25.4, "cm"); +
-a.schreibeInch(); +
-</code> +
-== Ausgabe == +
-<code> +
-7.62 cm +
-10 inch +
-</code> +
- +
-**Tipp: ** Natürlich benötigt die Klasse auch ein Attribut, um die Länge zu speichern. Es bietet sich an, nur ein einziges Attribut zu deklarieren, in dem die Länge immer in cm gespeichert wird und nur beim Speichern von inch und der Ausgabe in inch umzurechnen. +
-<HTML> +
- +
-<div class="java-online" style="height: 550px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'AttributeAufgabe2'}"> +
- +
-<script type="text/plain" title="AttributeAufgabe2.java"> +
-Länge a = new Länge(); +
-a.speichere(3.0, "inch"); +
-a.schreibeCm(); +
-a.speichere(25.4, "cm"); +
-a.schreibeInch(); +
- +
-// Jetzt bist Du dran: schreibe die Definition der Klasse Länge! +
- +
- +
-</script> +
-</div> +
-</HTML> +
- +
-[[:klassen2:attribute:Aufgabe2Loesung:start|Hier geht's zur Lösung.]] +
- +
- +
-===== Aufgabe 3: RechteckHelfer =====+
 Schreibe eine Klasse ''RechteckHelfer'' mit den Methoden ''setzeLängeBreite(double länge, double breite)'', ''gibUmfang()'', ''gibFlächeninhalt()'' und ''gibDiagonalenlänge()''. Hier ein Hauptprogramm mit Ausgabe, das die Bedeutung der Methoden zeigt: Schreibe eine Klasse ''RechteckHelfer'' mit den Methoden ''setzeLängeBreite(double länge, double breite)'', ''gibUmfang()'', ''gibFlächeninhalt()'' und ''gibDiagonalenlänge()''. Hier ein Hauptprogramm mit Ausgabe, das die Bedeutung der Methoden zeigt:
 == Programm: == == Programm: ==
Zeile 305: Zeile 136:
  
  
-===== Aufgabe 4: Eine Klasse zum Bruchrechnen =====+===== Aufgabe 2: Eine Klasse zum Bruchrechnen =====
 Studiere die Klasse Bruch im Programm unten genau und ergänze folgende Methoden:  Studiere die Klasse Bruch im Programm unten genau und ergänze folgende Methoden: 
   * ''subtrahiere(Bruch b2)''   * ''subtrahiere(Bruch b2)''
Zeile 397: Zeile 228:
 </WRAP> </WRAP>
  
-===== Aufgabe 5: Bild mit verschiedenen Tageszeiten ===== 
-{{ :klassen2:attribute:pasted:20201122-212921.png}} 
-{{:klassen2:attribute:pasted:20201122-212757.png }} 
-{{ :klassen2:attribute:pasted:20201122-212839.png }} 
- \\  
-Die Klasse Bild zeichnet das Bild einer Wüste mit Sonne und Himmel (s.u.) zu drei verschiedenen Tageszeiten. Sie besitzt die Methoden ''init()'' (zum Instanzieren und Initialisieren der Objekte), ''schalteMorgen()'' (schaltet auf das "Morgenbild" um), ''schalteMittag()'' und ''schalteAbend()''. \\ \\  
-**Tipp:** Orientiere Dich beim Programmieren am [[#beispiel_4ampel|Ampel-Beispiel oben]]! 
-<HTML> 
- 
-<div class="java-online" style="height: 550px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'AttributeAufgabe5'}"> 
- 
-<script type="text/plain" title="AttributeAufgabe5.java"> 
-Bild b = new Bild(); 
-b.init(); 
-b.schalteMorgen(); 
-b.schalteMittag(); 
-b.schalteAbend(); 
- 
-class Bild { 
- 
-} 
- 
-</script> 
-</div> 
-</HTML> 
- 
-[[:klassen2:attribute:aufgabe5loesung:startxx|Hier geht's zur Lösung!]] 
g9/uebungen/attribute/start.1640773795.txt.gz · Zuletzt geändert: 2021/12/29 11:29 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki