Benutzer-Werkzeuge

Webseiten-Werkzeuge


anhang:generics: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
anhang:generics:start [2024/12/06 08:02] Martin Pabstanhang:generics:start [2024/12/13 08:28] (aktuell) – [Aufgabe] Martin Pabst
Zeile 1: Zeile 1:
 ====== Generische Klassen ====== ====== Generische Klassen ======
-<WRAP center round info 80%>+===== Problemstellung ===== 
 +<WRAP center round tip 80%>
 Stellen Sie sich eine Klasse ''Liste'' vor, die beliebige Objekte speichern kann und beispielsweise Methoden ''add'' (hinten hinzufügen) und ''getFirst'' (erstes Element zürückliefern) besitzt:  Stellen Sie sich eine Klasse ''Liste'' vor, die beliebige Objekte speichern kann und beispielsweise Methoden ''add'' (hinten hinzufügen) und ''getFirst'' (erstes Element zürückliefern) besitzt: 
 <code java> <code java>
Zeile 20: Zeile 21:
 Wir brauchen eine Möglichkeit, den Compiler **beim Instanzieren der Liste** darüber zu informieren, dass darin später nur Objekte der Klasse ''Kunde'' (und natürlich von Unterklassen davon) gespeichert werden sollen. Wir brauchen eine Möglichkeit, den Compiler **beim Instanzieren der Liste** darüber zu informieren, dass darin später nur Objekte der Klasse ''Kunde'' (und natürlich von Unterklassen davon) gespeichert werden sollen.
 </WRAP> </WRAP>
 +
 +===== Generics =====
 +<WRAP center round info 80%>
 +Viele Programmiersprachen bieten Möglichkeiten der [[https://en.wikipedia.org/wiki/Generic_programming|Generischen Programmierung]], d.h. Sie ermöglichen beispielsweise die Deklaration einer Klasse unter Zuhilfenahme eines allgemeinen Datentypen (z.B. ''T''), der erst beim Instanzieren festgelegt wird. In Java sieht das so aus:
 +<code java>
 +class Liste<T> {
 +   T anfang;
 +   void add(T element){ ... }
 +   T getFirst(){ ... }
 +}
 +</code>
 +Eine Liste zum Speichern von ''Kunde''-Objekten instanziert man dann so:
 +<code java>
 +Liste<Kunde> kundenliste = new Liste<Kunde>();
 +// Wegen Type-inference geht auch: List<Kunde> kundenliste = new Liste<>();
 +</code>
 +Jetzt ist alles wie gewünscht: ''kundenliste.add'' akzeptiert nur Objekte der Klasse ''Kunde'' (und Unterklassen) und
 +<code java>
 +Kunde k = kundenliste.getFirst();
 +</code>
 +liefert keinen Fehler mehr.
 +</WRAP>
 +
 +===== Aufgabe =====
 +<WRAP center round todo 80%>
 +a) Schreiben Sie eine generische Klasse ''Liste'' unter Zuhilfenahme des Entwurfsmusters Kompositum, die mindestens folgende Methoden hat:
 +  * ''T pop()'' (erstes Element entnehmen)
 +  * ''push(T element)''(Element hinten anfügen)
 +  * ''int size()'' (Anzahl der enthaltenen Elemente)
 +  * ''void clear()'' (Liste leeren)
 +  * ''void addFirst(T element)'' (vorne anfügen)
 +  * ''T getLast()'' (letztes Element entnehmen)
 +
 +b) Schreiben Sie für jede der Methoden oben mindestens einen automatisierten [[anhang:unittests:start|Unit Test.]]
 +</WRAP>
 +
 +[[.generics:loesung:start|Lösung]]
 +
 +===== Bounded type parameters =====
 +
 +
 +
  
anhang/generics/start.1733472133.txt.gz · Zuletzt geändert: 2024/12/06 08:02 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki