Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

SystemWhole-Projekt in Java: JSON-Strings parsen und humanoide Maschinen erkennen – Ein Leitfaden für CS211

Lerne, wie du im CS211-Projekt SystemWhole JSON-ähnliche Strings parst, Machine-Objekte erstellst und humanoide Eigenschaften sowie Singularitäten erkennst – mit praxisnahen Beispielen aus KI und Gaming.

SystemWhole CS211 Projekt Java JSON parsen ohne Bibliothek humanoide Maschinen erkennen Singularitäten Java Machine-Klasse PartState ShapeAnalyzer Objektorientierte Programmierung Java String-Manipulation Java Klassifikationslogik Anomalieerkennung Java KI Klassifikation Beispiel Gaming NPC Erkennung CS211 Hausaufgabe Hilfe Java Tutorial Deutsch

Einführung in das SystemWhole-Projekt

Das SystemWhole-Projekt ist eine Kernaufgabe im Kurs CS211, bei der du lernst, komplexe Datenstrukturen zu verarbeiten und objektorientierte Programmierung in Java anzuwenden. Du wirst JSON-ähnliche Strings parsen, Machine-Objekte instanziieren und analysieren, ob diese humanoide Züge aufweisen. Das Projekt simuliert die Untersuchung von Emergenzen – Phänomenen, die aus dem Zusammenspiel einfacher Regeln entstehen – ähnlich wie in modernen KI-Systemen oder bei der Entwicklung von NPCs in Spielen.

In diesem Tutorial zeige ich dir Schritt für Schritt, wie du die geforderten Aufgaben umsetzt, ohne externe Bibliotheken zu verwenden. Du wirst nicht nur die technischen Fähigkeiten verbessern, sondern auch ein Verständnis für Mustererkennung und Entscheidungslogik entwickeln – Fähigkeiten, die in der heutigen Tech-Welt, von generativer KI bis zu autonomen Fahrzeugen, unverzichtbar sind.

Projektübersicht und Kernkomponenten

Das Projekt besteht aus vier Hauptklassen: SystemWhole, Machine, PartState und ShapeAnalyzer. Deine Aufgabe ist es, die noch nicht implementierten Methoden in SystemWhole zu schreiben, insbesondere die Parsing-Logik und die Humanoid-Erkennung.

1. Die Klasse SystemWhole

Die zentrale Steuerungsklasse. Sie verwaltet die Rohdaten (JSON-Strings) und die daraus erzeugten Machine-Objekte. Zu den wichtigsten Methoden gehören:

  • emergencesFromPhenomena(String[] emergences): Speichert die übergebenen Strings.
  • reifyFrameOfReference(): Parst jeden String und erzeugt mit Hilfe von ShapeAnalyzer Machine-Objekte.
  • isHumanoid(Object[] machineProperties): Prüft anhand der PartState-Eigenschaften, ob eine Maschine humanoid ist.
  • identitySingularityMachines() und trackSingularityMachines(): Identifizieren Singularitäten – also Fälle, in denen die Selbsteinschätzung der Maschine von der Systemanalyse abweicht.

2. Die Klasse Machine

Repräsentiert eine einzelne Maschine mit Feldern wie kind (z.B. "Humanoid"), properties (Array von PartState), humanConstrained (Systemanalyse) und humanEmergence (Selbsteinschätzung).

3. Die Klasse PartState (bereits implementiert)

Kapselt eine einzelne Eigenschaft als Paar aus property (z.B. "bodyType") und value (z.B. "physical").

4. Die Klasse ShapeAnalyzer

Stellt Hilfsmethoden zur Verfügung, um aus einem JSON-String die Machine-Daten zu extrahieren. Du wirst diese Methoden in deiner reifyFrameOfReference-Methode aufrufen.

Aufgabe 1: Parsen der JSON-ähnlichen Strings

Deine erste Herausforderung: Implementiere die Logik zum Parsen der JSON-ähnlichen Strings. Da du keine externen Bibliotheken verwenden darfst, musst du mit String-Methoden wie split(), substring() und trim() arbeiten. Ein Beispiel-String sieht so aus:

{"kind": "Humanoid", "bodyType": "physical", "faceType": "anthropomorphic", "reverie": "biotypical"}

Du musst die Schlüssel-Wert-Paare extrahieren. Beachte, dass die Werte in Anführungszeichen stehen können. Ein typischer Ansatz ist, den String zunächst in einzelne Paare zu zerlegen, indem du nach Kommas suchst, die nicht innerhalb von geschweiften Klammern oder Anführungszeichen stehen. Dann trennst du jedes Paar am Doppelpunkt. Vergiss nicht, die geschweiften Klammern am Anfang und Ende zu entfernen.

Tipp: Verwende eine Hilfsmethode, die den gesamten JSON-String verarbeitet und eine Map<String, String> zurückgibt. Das erleichtert die spätere Verarbeitung.

Aufgabe 2: Instanziieren der Machine-Objekte

Nach dem Parsen rufst du ShapeAnalyzer.getKind(emergence) und ShapeAnalyzer.getProperties(emergence) auf, um den kind-String und das PartState-Array zu erhalten. Dann erstellst du ein neues Machine-Objekt und speicherst es im Array parts. Achte darauf, dass die humanEmergence aus dem JSON-String stammt – oft als zusätzliches Feld wie "humanoid": true – und die humanConstrained später durch isHumanoid() gesetzt wird.

Aufgabe 3: Identifizieren humanoider Maschinen

Die Methode isHumanoid(Object[] machineProperties) durchläuft das PartState-Array und prüft drei Bedingungen:

  1. bodyType muss "physical" sein.
  2. faceType muss "anthropomorphic" sein.
  3. reverie muss "biotypical" sein.

Nur wenn alle drei erfüllt sind, gilt die Maschine als humanoid. Dieses Und-Verknüpfung ist typisch für Klassifikationsaufgaben in der Künstlichen Intelligenz. Stell dir vor, du entwickelst einen Chatbot wie ChatGPT, der erkennen muss, ob ein Nutzer eine menschliche Anfrage stellt – auch dort werden mehrere Merkmale kombiniert.

Aufgabe 4: Singularitäten verfolgen

Eine Singularität liegt vor, wenn die Selbsteinschätzung der Maschine (humanEmergence) von der Systemanalyse (humanConstrained) abweicht. Du musst zwei Methoden implementieren:

  • identitySingularityMachines(): Gibt die Anzahl der Maschinen zurück, bei denen eine Singularität vorliegt.
  • trackSingularityMachines(): Gibt ein Array mit allen Machine-Objekten zurück, die eine Singularität aufweisen.

Diese Aufgabe erinnert an Anomalieerkennung in der Cybersicherheit: Ein System meldet verdächtige Aktivitäten, die von der Norm abweichen. In der Gaming-Branche wird ähnliche Logik verwendet, um Cheater zu identifizieren – etwa wenn ein Spieler unnatürlich schnell reagiert.

Häufige Fehler und Best Practices

  • Vergiss nicht, leere Strings oder Null-Werte zu behandeln. Dein Parser sollte robust sein.
  • Verwende equals() statt == beim Vergleich von Strings.
  • Teste mit verschiedenen JSON-Strings, auch mit fehlerhaften, um die Stabilität zu prüfen.
  • Halte den Code modular: Eine Methode pro Aufgabe erleichtert das Debuggen.

Fazit

Mit diesem Tutorial hast du eine solide Grundlage, um das SystemWhole-Projekt erfolgreich abzuschließen. Du hast gelernt, wie man JSON-ähnliche Strings parst, objektorientierte Konzepte wie Klassen und Objekte anwendet und eine Klassifikationslogik implementiert. Diese Fähigkeiten sind nicht nur für die Uni wichtig, sondern auch für viele reale Anwendungen – von KI-Assistenten bis zu automatisierten Testsystemen.

Viel Erfolg bei deinem Projekt! Wenn du Fragen hast, stelle sie auf Piazza – die Community hilft gerne weiter.