10 Klassen 10 1 Klassen und Objekte 10
10. Klassen 10. 1 Klassen und Objekte 10. 2 Beispiele 10. 3 Klassen und Arrays Bitte schalten Sie auf Präsentationsmodus und versuchen Sie, die folgenden Fragen zu beantworten, bevor Sie auf die Lösung klicken. Wenn Sie eine Frage nicht korrekt beantwortet haben, sehen Sie sich bitte nochmals die entsprechenden Vorlesungsfolien an. © 2020. This work is licensed under a CC BY-NC-SA 4. 0 license Hanspeter Mössenböck, Institut für Systemsoftware, JKU 1
Fragen Sowohl Klassen als auch Arrays sind strukturierte Datentypen. Wie unterscheiden sich Klassen von Arrays? Lösung anzeigen Ein Array ist eine Tabelle aus lauter gleichartigen Elementen (z. B. int-Zahlen). Die Elemente haben keinen Namen, sondern werden über Indizes angesprochen (z. B. a[i]). Eine Klasse ist eine Sammlung von Variablen (Feldern), die unterschiedlichen Typ haben können (z. B. int, String, double). Die Felder haben einen Namen und werden über diesen Namen angesprochen (z. B. x. day). Variable Was ist der Unterschied zwischen einer Klasse, einem Objekt und einer Variablen? date Lösung anzeigen Eine Klasse ist ein Datentyp. Sie definiert das Aussehen von Objekten dieser Klasse Date-Objekt 12 day "April" month 2020 year class Date { int day; String month; int year; } Ein Objekt ist ein Stück Daten, deren Struktur durch eine Klasse bestimmt wird (der Typ des Objekts). Objekte müssen explizit aus einer Klasse erzeugt werden, z. B. new Date(); Eine Variable referenziert ein Objekt, d. h. zeigt auf ein Objekt. Die Daten des Objekts können über die Variable angesprochen werden (z. B. date. month). 2
Klassen-Deklaration und Objekterzeugung Deklarieren Sie eine Klasse Article, die als Felder eine Artikelnummer (int), einen Artikelnamen (String) und einen Preis (double) hat. Lösung anzeigen class Article { int nr; String name; double price; } Erzeugen Sie ein Article-Objekt. Lösung anzeigen Article a = new Article(); Zeichnen Sie auf Papier das Layout und den Inhalt dieses Objekts. Weisen Sie den Feldern des Article-Objekts sinnvolle Werte zu und zeichnen sie es erneut. a Lösung anzeigen 0 nr null name 0. 0 price 100231 nr "Printer" name 199. 99 price Alle Felder werden mit ihren Nullwerten initialisiert Lösung anzeigen a a. nr = 100231; a. name = "Printer"; a. price = 199. 99; 3
Objektzuweisung Was liefert folgendes Codestück: Article b; Out. println(b. price); Lösung anzeigen Fehler: Der Code lässt sich nicht compilieren, weil b noch kein Wert zugewiesen wurde Was liefert folgendes Codestück: Article b = a; // a from previous slide b. price = 149. 99; Out. println(a. price); Out. println(b. price); Lösung anzeigen 149. 99 a a und b zeigen auf dasselbe Objekt, daher ist a. price == b. price b 100231 nr "Printer" name 149. 99 price Was liefert folgendes Codestück: b = null; Out. println(a. price); Out. println(b. price); Lösung anzeigen 149. 99 -- Null. Pointer. Exception -- b zeigt auf kein Objekt, daher darf man nicht auf b. price zugreifen a b 4
Vergleiche und Kopieren Was liefert der Vergleich in folgender if-Anweisung? Article a = new Article(); a. price = 100; Article b = new Article(); b. price = 100; if (a == b). . . Lösung anzeigen false, weil Zeigervergleich. a und b referenzieren unterschiedliche Objekte Schreiben Sie eine Methode static boolean equal (Article a, Article b) {. . . } die prüft, ob a und b vom Wert her gleich sind. Lösung anzeigen static boolean equal (Article a, Article b) { return a. nr == b. nr && a. name. equals(b. name) && a. price == b. price; } Schreiben Sie eine Methode static Article copy (Article a) {. . . } die eine Kopie von a liefert. Lösung anzeigen static Article copy (Article a) { Article b = new Article(); b. nr = a. nr; b. name = new String(a. name); b. price = a. price; return b; } 5
Klassen und Arrays Ein Warenlager besteht aus mehreren Artikeln, die in unterschiedlicher Menge auf Lager liegen. Implementieren Sie eine Klasse Stock. Item, die einen Artikel und seine Lagermenge speichert. Das gesamte Lager ist dann ein Array von Stock. Items. Lesen Sie von einer Datei einige Artikel und ihre Lagermenge ein und bauen Sie daraus ein Warenlager. Eingabedatei z. B. : 1234 "printer" 199. 99 3 1256 "mouse" 9. 99 22 1334 "disk" 249. 99 10. . . Lösung anzeigen class Stock. Item { Article article; int amount; } stock static Stock. Item[] stock = new Stock. Item[100]; static int n. Items = 0; static void Build. Store() { In. open("input. txt"); Article a = read. Article(); while (In. done()) { Stock. Item item = new Stock. Item(); item. article = a; item. amount = read. Int(); stock[n. Items] = item; n. Items++; a = read. Article(); } In. close(); } n. Items == 3 Stock. Item Article 3 1234 "printer" 199. 99 22 1256 "mouse" 9. 99 10 1334 "disk" 249. 99 static Article read. Article() { Article a = new Article(); a. nr = In. read. Int(); a. name = In. read. String(); a. price = In. read. Double(); return a; } 6
Funktionen mit mehreren Rückgabewerten Schreiben Sie eine Funktion, die aus einer int-Matrix die Zeilen- und Spaltennummer des kleinsten Werts zurückgibt. Lösung anzeigen class Pos { int line; int col; } static Pos min (int[][] a) { Pos res = new Pos(); int m = a[0][0]; // current minimum res. line = 0; res. col = 0; for (int i = 0; i < a. length; i++) { for (int j = 0; j < a[i]. length; j++) { if (a[i][j] < m) { // new minimum m = a[i][j]; res. line = i; res. col = j; } } } return res; } 7
- Slides: 7