Q12 Inf Name Nachschrift der 1. Schulaufgabe aus dem Fach Informatik am 19.01.2017 Rekursive Datenstrukturen – Listen Szenario für Aufgaben 1 und 2 Mehrere schmale Stollen eines stillgelegten Bergwerkes sollen als Lager für Sondermüll benutzt werden. Behälter, die den Sondermüll enthalten, werden auf Paletten, die so breit sind wie der gesamte Stollen, vor der Rückwand des Stollens abgestellt – die nächste Palette mit Behältern wird dann davor abgestellt und so weiter. Von Zeit zu Zeit wird vor einer abgestellten Palette eine Trennwand errichtet, die die neu abzustellenden Paletten von den bisher abgestellten trennt. Eine Software soll es ermöglichen, festzustellen, ob ein bestimmter Behälter in einem Stollen enthalten ist, die Lage eines gesuchten Behälters im Verhältnis zu allen anderen Inhalten des Stollens zu bestimmen und somit auch nachzuvollziehen, welche Paletten mit Behältern sowie welche Trennwände gegebenenfalls wieder abgeräumt werden müssen, um an diesen Behälter heranzukommen – gelegentlich können solche Umräumaktionen nötig sein. Aufgabe 1: Klassendiagramm Für jeden Stollen soll dessen oben beschriebener Inhalt in einer rekursiv organisierten Liste gespeichert werden. Struktur und Daten sind zu trennen. Zeichnen Sie ein den Vorgaben entsprechendes „erweitertes“ Klassendiagramm (mit Datentypen), das alle beteiligten Klassen von der Klasse Lager bis hin zu den Klassen Behälter und Trennwand umfasst. Auf die Angabe von Attributen können Sie dabei ganz verzichten. Geben Sie nur diejenigen Methoden an, die für die Suche nach einem bestimmten Behälter benötigt werden, sowie diejenigen, die die Klassen der Listenstruktur zur Erfüllung der hier gestellten Anforderungen besitzen müssen. 13 Punkte Aufgabe 2: Spezielle Listen Für spezielle Listen, die – abgesehen von der Methode zum Suchen – genau das können, was von den Listen hier gefordert wird, gibt es eigene Bezeichnungen. Geben Sie eine dieser Bezeichnungen sowie die übliche Bezeichnung für das Organisationsprinzip einer solchen speziellen Liste an. Benennen Sie dann eine andere Art spezieller Listen gemeinsam mit dem zugehörigen Organisationsprinzip und erklären Sie knapp, was die beiden speziellen Formen von Listen gemeinsam haben und was sie unterscheidet. 5 Punkte Szenario für Aufgaben 3, 4 und 5 Gegeben sei die unten abgebildete Listenstruktur. Wir gehen davon aus, • dass die speichert-Beziehung zwischen den Klassen Knoten und Inhalt durch ein Attribut meinInhalt: Inhalt in der Klasse Knoten implementiert ist und • dass die hatNachfolger-Beziehung zwischen den Klassen Knoten und Listenkomponente durch ein Attribut meinNachfolger: Listenkomponente in der Klasse Knoten implementiert ist. Wir nehmen an, dass auf beide Attribute auch „von außen“ lesend und schreibend zugegriffen werden kann. Liste steuert 1 Listenkomponente 1 hatNachfolger Abschluss Knoten speichert 1 Inhalt groesserAls(inhalt:Inhalt): Boolean entspricht(inhalt:Inhalt): Boolean Aufgabe 3: Sequenzdiagramm Wir nehmen an, dass die Klassen Liste und Listenkomponente (sowie deren Unterklassen) jeweils über eine Methode suchen(inhalt: Inhalt): Boolean verfügen. Des Weiteren nehmen wir an, dass in einer solchen Liste bisher genau ein Inhalts-Objekt einer von Ihnen zu benennenden Klasse gespeichert worden ist. Nun ist die suchen-Methode des entsprechenden Liste-Objekts mit einem nicht in der Liste enthaltenen Inhalt als Parameter aufgerufen worden. Zeichnen Sie ein Sequenzdiagramm, das die in diesem Zusammenhang ablaufende Interaktion zwischen allen beteiligten Objekten korrekt abbildet. 6 Punkte Aufgabe 4: Implementierung zweier Methoden in der Programmiersprache Scala In den Klassen Knoten und Abschluss soll jeweils eine (in Listenkomponente als abstrakte Methode vorgesehene) Methode mit der Signatur entfernen(inhalt: Inhalt, vorgaenger: Knoten): Boolean implementiert werden. Sie soll zum Entfernen des ersten mit inhalt übereinstimmenden Inhalts aus der Liste dienen. Allerdings soll sie etwas anders funktionieren als die im Unterricht implementierte Methode: Da nämlich jedes Knoten-Objekt, dessen entfernen-Methode aufgerufen wird, über den Parameter vorgaenger vorübergehend Zugriff auf seinen Vorgängerknoten bekommt, kann es sich bei Bedarf selbst aus der Liste entfernen! Implementieren sie die entfernen-Methoden für die Klasse Knoten und die Klasse Abschluss. Hinweise: • Um das Problem, dass der erste Knoten in der Liste gar kein Knoten-Objekt als Vorgänger hat, kümmern wir uns in Aufgabe 5. Für den Augenblick können wir uns darauf verlassen, dass die entfernen-Methode des ersten Knotens nur dann aufgerufen wird, wenn er nicht der zu entfernende Knoten ist. • In Scala kann ein Objekt „sich selbst“ (also eine Referenz auf sich selbst) mithilfe des Schlüsselwortes this z. B. als Parameter übergeben. 7 Punkte * 1,5 = 10,5 Punkte Aufgabe 5: Aktivitätsdiagramm Wir nehmen an, dass die entfernen-Methoden aus Aufgabe 4 korrekt funktionieren. Zeichnen Sie ein Aktivitätsdiagramm, das darstellt, wie nun im gegebenen Zusammenhang die Methode entfernen(inhalt: Inhalt): Boolean eines Objekts der Klasse Liste funktionieren kann. (Achtung: Auf „irreführende“ Methoden wie die im Unterricht verwendete inhaltEntsprichtMethode der Klasse Abschluss soll hier verzichtet werden! Effizienz ist hier nicht maßgeblich.) 6,5 Punkte