Q12 Inf Name Nachschrift der 1. Schulaufgabe aus dem Fach

Werbung
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
Herunterladen