Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Generics und ArrayList in Java: Eine Schritt-für-Schritt-Anleitung für das CS211-Projekt 2 – Deus Ex Machina

Lerne, wie du Generics und ArrayList in Java für das CS211-Projekt 2 'Deus Ex Machina' einsetzt. Mit praxisnahen Beispielen aus der Welt der KI und Simulationen.

Generics Java ArrayList Java CS211 Projekt 2 Deus Ex Machina Java Java Collections Framework NarrativeLoop SystemWhole Westworld Simulation Java Generics Tutorial ArrayList Beispiel Java Programmierung Studium KI Simulation Java Typsicherheit Java Java 14 Generics Emergenzen kategorisieren DoloresTest

Einleitung: Warum Generics und ArrayList?

Im CS211-Projekt 2 'Deus Ex Machina' geht es darum, mit Generics und der ArrayList aus dem Java Collections Framework zu arbeiten. Dieses Tutorial hilft dir, die Konzepte zu verstehen, ohne die Hausaufgabe direkt zu lösen. Stell dir vor, du entwickelst eine KI wie in der Serie 'Westworld' – deine Maschinen (Roboter) müssen in verschiedenen Realitäten (Emulation, Simulacra, Simulation) kategorisiert werden. Genau das machst du mit Generics und ArrayList.

Was sind Generics?

Generics erlauben es dir, Klassen, Interfaces und Methoden zu definieren, die mit verschiedenen Datentypen arbeiten können, ohne die Typsicherheit zu verlieren. Statt für jeden Datentyp eine eigene Klasse zu schreiben, nutzt du einen Typparameter. Beispiel: List<String> speichert nur Strings – der Compiler prüft das.

Vorteile von Generics

  • Typsicherheit: Fehler werden zur Compile-Zeit erkannt.
  • Code-Wiederverwendung: Eine generische Klasse kann für viele Typen genutzt werden.
  • Keine Casts: Du musst keine expliziten Typumwandlungen vornehmen.

ArrayList in Java

Die ArrayList ist eine dynamische Liste, die Elemente speichert und bei Bedarf wächst. Sie ist generisch, also ArrayList<Typ>. Typische Methoden sind add(), get(), remove(), clear(). Im Projekt nutzt du drei ArrayLists: emulation, simulacra, simulation – alle speichern SystemWhole-Objekte.

Das sublime-Paket: Aufbau und Typen

Dein Code liegt im Paket sublime. Du erstellst mehrere Klassen, die zusammenarbeiten. Wichtig: Das westworld-Paket darfst du nicht ändern. Du implementierst unter anderem:

  • Realm-Enum: EMULATION, SIMULACRA, SIMULATION
  • Abstrakte Klasse NarrativeLoop: Enthält drei ArrayList<SystemWhole> und Methoden wie wipeNarrativeLoops() und updateNarrativeLoops()
  • Weitere Typen (A bis J), die auf der Aufgabenbeschreibung basieren

Praktisches Beispiel: Kategorisierung von Emergenzen

Angenommen, du hast Emergenzen (Strings wie "{'kind': 'Square'}"). Deine Aufgabe: Sortiere sie in die drei ArrayLists. Hier kommt Generics ins Spiel: Du definierst eine Methode, die eine Liste von SystemWhole zurückgibt, aber die Logik ist generisch. Beispiel für eine Hilfsmethode:

public <T> List<T> filterByKind(List<T> items, String kind) {
    List<T> result = new ArrayList<>();
    for (T item : items) {
        if (item.getKind().equals(kind)) {
            result.add(item);
        }
    }
    return result;
}

Diese Methode arbeitet mit jedem Typ, der eine getKind()-Methode hat (z.B. über ein Interface).

Die NarrativeLoop-Klasse im Detail

Felder

protected final List<SystemWhole> emulation = new ArrayList<>();
protected final List<SystemWhole> simulacra = new ArrayList<>();
protected final List<SystemWhole> simulation = new ArrayList<>();

Methoden

  1. wipeNarrativeLoops(): Ruft clear() auf allen drei Listen auf.
  2. updateNarrativeLoops(SystemWhole[] emulationContext, SystemWhole[] simulacraContext): Iteriert über die Arrays und fügt passende SystemWhole zu den Listen hinzu, basierend auf determineRealm().
  3. determineRealm(String kind, SystemWhole[] emulationContext, SystemWhole[] simulacraContext): Prüft, ob die kind in den Kontexten vorkommt und gibt das passende Realm zurück.

Trend-Beispiel: KI-Chatbots und Simulationen

Stell dir vor, du entwickelst einen KI-Chatbot wie ChatGPT. Die verschiedenen Versionen (GPT-3, GPT-4) sind wie Emulationen (hohe Genauigkeit), während abgewandelte Versionen für Spiele Simulacra sind. Einfache Regel-basierte Bots sind Simulationen. Genau diese Kategorisierung baust du mit deinem Code auf. Aktuelle Diskussionen über KI-Sicherheit und ethische Simulationen zeigen, wie relevant dieses Thema ist.

Häufige Fehler vermeiden

  • Modifikation des westworld-Pakets: Nicht erlaubt! Nutze nur die öffentliche API.
  • Verwendung veralteter Typen: Java 14+ vermeidet deprecated APIs.
  • Fehlende Kommentare: Erkläre schwierige Schleifen oder generische Methoden.
  • Sichtbarkeit von Feldern: Felder sind protected oder private mit Gettern.

Testen mit DoloresTest

Deine Tests schreibst du in DoloresTest.java. Beispiel für einen Test der wipeNarrativeLoops-Methode:

@Test
public void testWipeNarrativeLoops() {
    NarrativeLoop loop = new NarrativeLoopImpl(); // deine Implementierung
    loop.getEmulation().add(new SystemWhole(...));
    loop.wipeNarrativeLoops();
    assertTrue(loop.getEmulation().isEmpty());
}

Fazit

Mit diesem Tutorial hast du die Grundlagen von Generics und ArrayList in Java verstanden. Du kannst jetzt die Struktur des CS211-Projekts 2 nachvollziehen, ohne die Lösung zu kopieren. Denk dran: Übung macht den Meister – experimentiere mit eigenen generischen Methoden und nutze die JavaDoc des westworld-Pakets. Viel Erfolg!