Anforderungen an die neue Datenstruktur Anforderungen, die im Unterricht wiederholt vorgeschlagen wurden, um die bisherige Implementation der Queue zu verbessern: Mitverwaltung von Patientendaten (z.B. Alter, Krankheitsverlauf etc.) Realisierung als dynamische Datenstruktur (immer nur so viel Speicher belegt, wie gerade benötigt) Möglichkeit einer Prioritätenverwaltung (Priority-Queue, z.B. für Notfälle oder fest vereinbarte Termine)
1) Der Patient als eigene Klasse Bisher: Nachname des Patienten als String gespeichert. Besser: Klasse Patient definieren, von der dann Objekte für die einzelnen Patienten erzeugt werden können.
1) Der Patient als eigene Klasse Arbeitsauftrag: Implementieren Sie eine Klasse Patient! Es sollen mindestens die Datenfelder für Nachname, Vorname und Alter vorhanden sein. Erzeugen Sie ein Patientenobjekt. Testen Sie es (inspect)! Wie kann man die Datenfelder füllen?
1) Der Patient als eigene Klasse Um Objekte vom Typ Patient in die Queue einfügen zu können, muss die Datenstruktur geringfügig geändert werden. Das Array und die Parameter und Rückgabetypen der Methoden, bisher vom Typ String, müssen den Typ Object bekommen. Von der Klasse Object erbt jede andere Klasse in Java, so dass jede Klasse auch vom Typ Object ist. Die Queue kann nun jede Art von Daten aufnehmen. Nur die elementaren Datentypen wie boolean, int, char, double (Fließkommazahl) erben nicht von Object.
1) Der Patient als eigene Kasse Objektstruktur (Achtung: Kein Klassendiagramm)
1) Der Patient als eigene Klasse Der Referenzpfeil Referenz: im betreffenden Datenfeld ist nicht der Wert gespeichert. Abgelegt ist im Datenfeld die Speicheradresse, an der sich das referenzierte Objekt befindet. Im Diagramm führt der Referenzpfeil vom Datenfeld zum referenzierten Objekt Eine leere Referenz hat den Wert null. In JAVA werden nur die elementaren Datentypen: boolean, int, char, double (Fließkommazahl) nicht als Referenz gespeichert, sondern direkt in der Variablen / im Datenfeld. Alle anderen Daten werden über Referenzen adressiert.
1) Der Patient als eigene Klasse Arbeitsauftrag: Ändern Sie die Klasse Queue so, dass sie beliebige Objekte aufnehmen kann! Erzeugen Sie nun Objekte vom Typ Patient und stellen Sie sie in die Queue! Prüfen und testen Sie ausführlich (inspect)!
2) Dynamische lineare Datenstrukturen Nachteile statischer Datenstrukturen Die Größe eines Arrays muss vor seiner Erzeugung festgelegt werden: z.B. qArray = new Object[100] Wird das Array erzeugt, wird Speicherplatz für 100 Objektreferenzen reserviert 2 Nachteile: 1) Ggf. wird umsonst reserviert, 2) Ggf. reicht die Größe nicht.
2) Dynamische lineare Datenstrukturen Lösung: Dynamische Datenstrukturen Es wir immer nur so viel Speicherplatz verbraucht, wie gerade benötigt. Erst wenn neue Daten gespeichert werden, wird für sie Speicherplatz reserviert. Wenn Daten gelöscht werden, kann der Speicherplatz sofort wieder freigegeben werden. Insbesondere bei großen Datenmengen (z.B. Filmen notwendig) Außer der Platzersparnis noch weitere Vorteile!
2) Dynamische lineare Datenstrukturen Die Klasse Node (=Knoten) enthält 2 Datenfelder: content ist eine Referenz auf ein beliebiges Inhaltsobjekt, z.B. Patient. nextNode ist eine Referenz auf den nächsten Knoten. Implementationdiagramm: Node -content: Object -nextNode: Node
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content null nachName “Cloeters“ vorName null alter 0
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content null nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content nextNode null content null nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0
2) Dynamische lineare Datenstrukturen nextNode content nextNode content nextNode null content null nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0
2) Dynamische lineare Datenstrukturen nextNode content nextNode content nextNode null content null nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 nachName “Bongartz“ vorName null alter 0
2) Dynamische lineare Datenstrukturen nextNode content nextNode content nextNode null content nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 nachName “Bongartz“ vorName null alter 0
2) Dynamische lineare Datenstrukturen Nun das ganze noch einmal! Dieses Mal mit einer Hilfe für die Implementation in JAVA Aufgeführt sind die JAVA-Befehle zum bewerkstelligen der gezeigten Modifikationen in der Objektstruktur...
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content null node1 nachName “Cloeters“ vorName null alter 0
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content null node1 nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 Patient x=new Patient(“Lommetz“);
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content node1 nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 node1.nextNode.content=x;
2) Dynamische lineare Datenstrukturen nextNode content nextNode null content nextNode null content null node1 nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 Node y=new Node();
2) Dynamische lineare Datenstrukturen nextNode content nextNode content nextNode null content null node1 nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 Node y=new Node(); node1.nextNode.nextNode=y;
2) Dynamische lineare Datenstrukturen nextNode content nextNode content nextNode null content null node1 nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 nachName “Bongartz“ vorName null alter 0 x=new Patient(“Bongartz“);
2) Dynamische lineare Datenstrukturen nextNode content nextNode content nextNode null content node1 nachName “Cloeters“ vorName null alter 0 nachName “Lommetz“ vorName null alter 0 nachName “Bongartz“ vorName null alter 0 x=new Patient(“Bongartz“); node1.nextNode.nextNode.content=x;
2) Dynamische lineare Datenstrukturen Zur Implementierung einer Schlange mit Hilfe der Klasse Node müssen die Datenfelder head und tail vom Typ Node sein Die Methoden isEmpty, enqueue, front, dequeue müssen entsprechend umgeschrieben werden. → hier Verzicht auf genaue Implementierung
3) Lineare Datenstruktur: Liste Ausgangsproblem: Wie kann ich Patienten mit Priorität, d.h. z.B. Notfälle in die Schlange einfügen? Neue Anwendung: Verwaltung der Playlist eines Mediaplayers Aufgabe: Was muss so eine Playlist mindestens für Funktionen (Methoden) anbieten? (Think-Pair- Share, 5min)
3) Lineare Datenstruktur: Liste Mit der Klasse List der Abiturvorgaben lässt sich ein solcher Player realiseren, genauso gut kann aus List aber auch eine Priority-Queue (z.B. für Notfallpatienten) aufgebaut werden. Mit der Klasse List der Abiturvorgaben lässt sich ein solcher Player realiseren, genauso gut kann aus List aber auch eine Priority-Queue (z.B. für Notfallpatienten) aufgebaut werden. Die Klasse List wird im Folgenden erklärt und dokumentiert. Quelle:http://www.schulentwicklung.nrw.de/lehrplaene/ lehrplannavigator-s-ii/gymnasiale-oberstufe/informatik/ hinweise-und-beispiele/
3) Lineare Datenstruktur: Liste
3) Lineare Datenstruktur: Liste
3) Lineare Datenstruktur: Liste
3) Lineare Datenstruktur: Liste
3) Lineare Datenstruktur: Liste
3) Lineare Datenstruktur: Liste Sie erhalten jetzt die Klassendokumentation von List als Fotokopie Aufgabe: Die fogende Tabelle vervollständigen! Aktuelles Objekt Listenelemente
3) Lineare Datenstruktur: Liste
3) Lineare Datenstruktur: Liste