g9:uebungen:attribute:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
g9:uebungen:attribute:start [2022/06/30 07:31] – [Beispiel 1: Die Klasse Person] Martin Pabst | g9:uebungen:attribute:start [2022/06/30 07:40] (aktuell) – Martin Pabst | ||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
</ | </ | ||
- | ===== Beispiel 1: Die Klasse | + | ===== Beispiel 1: Die Klasse |
- | Wir beginnen mit einem künstlichen - dafür aber sehr einfachen - Beispiel: Einer Klasse '' | + | Wir beginnen mit einem künstlichen - dafür aber sehr einfachen - Beispiel: Einer Klasse '' |
- | <WRAP center round tip 60%> | + | |
- | Unter Programmierern ist es '' | + | |
- | </ | + | |
< | < | ||
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 { | + | |
- | | + | |
- | | + | |
- | | + | |
- | } | + | |
- | </ | + | |
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> | ||
- | | + | |
</ | </ | ||
- | Auf die Attribute von Objekten kann man außerhalb der Klassendeklaration mithilfe der Punktschreibweise zugreifen. Wie das geht, siehst Du im obigen Beispiel | + | Auf die Attribute von Objekten kann man außerhalb der Klassendeklaration mithilfe der Punktschreibweise zugreifen. Wie das geht, siehst Du im obigen Beispiel. |
</ | </ | ||
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 { | ||
- | | ||
- | | ||
- | | ||
- | |||
- | // Jetzt kommt eine Methodendeklaration: | ||
- | void schreibeName(){ | ||
- | println(name); | ||
- | } | ||
- | } | ||
- | </ | ||
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 '' | 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 '' | ||
Zeile 87: | Zeile 65: | ||
<script type=" | <script type=" | ||
- | Person fritzi | + | Tier s = new Tier(); |
- | fritzi.name = "Fritzi Fleißig"; | + | s.name = "Snoopy"; |
- | fritzi.geschlecht | + | s.art = "Katze"; |
- | fritzi.größe | + | s.anzahlBeine |
- | Person max = new Person(); | + | Tier g = new Tier(); |
- | max.name = "Max Munter"; | + | g.name = "Gerda"; |
- | max.geschlecht | + | g.art = "Huhn"; |
- | max.größe | + | g.anzahlBeine |
- | fritzi.schreibeName(); | + | s.stellDichVor(); |
- | fritzi.begrüßen(); | + | g.stellDichVor(); |
- | println(); | + | |
- | max.begrüßen(); | + | |
- | class Person | + | class Tier { |
| | ||
- | | + | |
- | double größe; | + | int anzahlBeine; |
- | | + | |
- | | + | |
- | print(name); | + | println(" |
- | } | + | |
- | + | ||
- | void begrüßen(){ | + | |
- | println(" | + | |
- | if(geschlecht == " | + | |
- | | + | |
- | } else { | + | |
- | | + | |
- | } | + | |
- | println(name + "!"); | + | |
} | } | ||
+ | |||
} | } | ||
</ | </ | ||
Zeile 126: | Zeile 93: | ||
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
- | Führe das Programm schrittweise mit "step into ({{: | + | Führe das Programm schrittweise mit "step into ({{: |
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 '' | 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 '' | ||
</ | </ | ||
- | {{ : | + | ===== Aufgabe 1: RechteckHelfer ===== |
- | + | ||
- | {{ : | + | |
- | ===== Beispiel 4: Ampel ===== | + | |
- | Wir programmieren eine Klasse '' | + | |
- | + | ||
- | <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 '' | + | |
- | * Füge ein gelbes Licht hinzu! | + | |
- | * Füge eine " | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | < | + | |
- | + | ||
- | <div class=" | + | |
- | + | ||
- | <script type=" | + | |
- | Ampel a = new Ampel(); | + | |
- | a.init(); | + | |
- | a.schalteRot(); | + | |
- | Input.readString(" | + | |
- | a.schalteGrün(); | + | |
- | Input.readString(" | + | |
- | a.schalteAus(); | + | |
- | + | ||
- | class Ampel { | + | |
- | | + | |
- | | + | |
- | | + | |
- | + | ||
- | void init() { | + | |
- | + | ||
- | // Instanzieren und Initialisieren des Gehäuses: | + | |
- | gehäuse = new Rectangle(340, | + | |
- | 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()! | + | |
- | + | ||
- | } | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | [[: | + | |
- | ===== Aufgabe 1: Tiere ===== | + | |
- | Erstelle eine Klasse '' | + | |
- | < | + | |
- | Ich heiße Snoopy und bin ein/e Katze mit 4 Beinen. | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | + | ||
- | <div class=" | + | |
- | + | ||
- | <script type=" | + | |
- | Tier s = new Tier(); | + | |
- | s.name = " | + | |
- | s.art = " | + | |
- | s.beinzahl = 4; | + | |
- | + | ||
- | Tier c = new Tier(); | + | |
- | c.name = " | + | |
- | c.art = " | + | |
- | c.beinzahl = 2; | + | |
- | + | ||
- | s.vorstellen(); | + | |
- | c.vorstellen(); | + | |
- | + | ||
- | // Jetzt bist Du dran: Definiere hier die Klasse Tier, so dass das Programm oben | + | |
- | // fehlerfrei läuft. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | [[: | + | |
- | + | ||
- | + | ||
- | ===== Aufgabe 2: Längeneinheiten ===== | + | |
- | <WRAP center round tip 80%> | + | |
- | Sind Dir schon mal Längenangaben wie //12 in// oder //17 zoll// oder // | + | |
- | **Umrechnung: | + | |
- | </ | + | |
- | + | ||
- | Schreibe eine Klasse '' | + | |
- | == Programm: == | + | |
- | <code myJava> | + | |
- | Länge a = new Länge(); | + | |
- | a.speichere(3.0, | + | |
- | a.schreibeCm(); | + | |
- | a.speichere(25.4, | + | |
- | a.schreibeInch(); | + | |
- | </ | + | |
- | == Ausgabe == | + | |
- | < | + | |
- | 7.62 cm | + | |
- | 10 inch | + | |
- | </ | + | |
- | + | ||
- | **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, | + | |
- | < | + | |
- | + | ||
- | <div class=" | + | |
- | + | ||
- | <script type=" | + | |
- | Länge a = new Länge(); | + | |
- | a.speichere(3.0, | + | |
- | a.schreibeCm(); | + | |
- | a.speichere(25.4, | + | |
- | a.schreibeInch(); | + | |
- | + | ||
- | // Jetzt bist Du dran: schreibe die Definition der Klasse Länge! | + | |
- | + | ||
- | + | ||
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | [[: | + | |
- | + | ||
- | + | ||
- | ===== Aufgabe 3: RechteckHelfer ===== | + | |
Schreibe eine Klasse '' | Schreibe eine Klasse '' | ||
== Programm: == | == Programm: == | ||
Zeile 305: | Zeile 136: | ||
- | ===== Aufgabe | + | ===== Aufgabe |
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: | ||
* '' | * '' | ||
Zeile 397: | Zeile 228: | ||
</ | </ | ||
- | ===== Aufgabe 5: Bild mit verschiedenen Tageszeiten ===== | ||
- | {{ : | ||
- | {{: | ||
- | {{ : | ||
- | | ||
- | Die Klasse Bild zeichnet das Bild einer Wüste mit Sonne und Himmel (s.u.) zu drei verschiedenen Tageszeiten. Sie besitzt die Methoden '' | ||
- | **Tipp:** Orientiere Dich beim Programmieren am [[# | ||
- | < | ||
- | |||
- | <div class=" | ||
- | |||
- | <script type=" | ||
- | Bild b = new Bild(); | ||
- | b.init(); | ||
- | b.schalteMorgen(); | ||
- | b.schalteMittag(); | ||
- | b.schalteAbend(); | ||
- | |||
- | class Bild { | ||
- | |||
- | } | ||
- | |||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | [[: |
g9/uebungen/attribute/start.1656567098.txt.gz · Zuletzt geändert: 2022/06/30 07:31 von Martin Pabst