Sachinformation Oft fehlt es im Informatik-Unterricht an kurzen, zielgerichteten Aufgaben (Übungsaufgaben), mit denen Schüler/innen den Umgang mit den grundlegenden Konzepten der Objektorientierung (auch programmiertechnischer Art) üben können. Dazu gehören z.b. Übungen im Zeichnen von Klassendiagrammen und Objektdiagrammen, das programmiertechnische Implementieren einer Klasse in Programmcode oder das Lesen von fertigen Programmzeilen. Die hier vorliegenden Aufgaben sollen die genannten Aspekte wiederholen und festigen. Die Aufgaben können zudem eine überprüfbare Grundlage für Tests und/oder Klassenarbeiten bilden. Bei diesen Aufgabe wird davon ausgegangen, dass die Objektorientierung lediglich über ein grundlegendes Projekt (z.b. Baustein Das Textadventure) eingeführt wurde. Dass die Heranführung an die Objektorientierung zunächst lediglich über geht, und Themen wie Vererbung oder Datenkapselung zunächst noch nicht thematisiert wird, sollte selbstverständlich sein. Ein Klassendiagramm beinhaltet den Namen einer Klasse, die Attribute und Methoden (Prozduren und Funktionen) der entsprechenden Klasse und deutet durch die Pfeile an, welche Klasse auf Attribute und Methoden der anderen Klasse zugreift. Die Zahlen an den Pfeilen geben die Multiplizitäten an, wie viele Objekte von einer Klasse im Programm erzeugt werden: ( ein Objekt / n oder * beliebig viele /..5 zwischen und 5 Objekten). TForm Button : TButton Button2 : TButton Button3 : TButton Label : TLabel Memo : TMemo 3 TButton TLabel TMemo Die Klasse TForm sollte stets im Klassendiagramm gezeichnet werden. In der Regel werden die meisten Klassen von TForm referenziert. Ein Objektdiagramm ist ein Schnappschuss, der die Objekte und deren Referenzierung zu einem bestimmten Zeitpunkt des Programmlaufs zeigt. Dem Objektdiagramm kommt in der UML eine eher untergeordnete Rolle zu, für die Schule ist das Objektdiagramm jedoch sehr wichtig und sinnvoll. Hier erfasst der Schüler den Unterschied zwischen einem Objekt und einer Klasse. Zudem bietet das Objektdiagramm im Unterricht die Möglichkeit, Schüler ans Sprechen über zu bekommen und zu erkennen, inwieweit ein Schüler den Wirkzusammenhang zwischen Objekt und Klasse verstanden hat.
Form: TForm Button : TButton Button : TButton Button : TButton Label : TLabel Memo : TMemo Button_: TButton Button_2: TButton Button_3: TButton Label_: TLabel Memo_: TMemo Der Objektname ist im Objektdiagramm unterstrichen, die Klassenbezeichnung ist dem Doppelpunkt nachgestellt, der Objektname kann vor dem Doppelpunkt mit angegeben werden. Tatsächlich kann sich Objektname während des Ausführens eines Programms je nach Referenzierung ändern, das sollte man ohne Not im Unterricht jedoch nicht thematisieren. Die Referenzpfeile sollten direkt hinter dem Klassentyp innerhalb des Objektrahmens beginnen (anders beim Klassendiagramm). Die Ecken eines Objekts können zur besseren Unterscheidung zur Klasse abgerundet werden. In der Schule hat sich diese Vorgehensweise bewährt. Lernziele Die Schüler sollen Objektdiagramme und Klassendiagramme zeichnen können, aus einem Klassendiagramm die Implementierung in Delphi-Code vornehmen können, den Begriff der Objektreferenz verstehen. Unterrichtsverlauf Die Aufgaben sind so angelegt, dass sie in der Regel nicht am Rechner, sondern auf Papier bearbeitet werden. Die Aufgabe eignen sich zur Einzel- oder Partnerarbeit, sowie als Stundenoder Hausaufgabe. Einige Aufgaben können zudem (nach Zeit und Übungsbedarf) auch programmiert werden. Hier liegt ein Entwurf des entsprechenden Programms bei. 2
Arbeitsblatt Aufgabe Das abgebildete Delphi-Fenster besteht aus mehreren Objekten (z.b. Memo, Button, ). a) Zeichne das entsprechende Klassendiagramm. Zeichne das entsprechende Objektdiagramm. Aufgabe 2 Gegeben ist folgendes Klassendiagramm: TSchueler Name: String Alter: Integer a) Implementiere die Klasse in Delphi-Code. Von der Klasse TSchueler soll ein Objekt mit dem Namen Schueler erzeugt und mit den Attributen Lieschen Müller und 9 versehen werden. Schreibe den Delphi-Code. c) In einem Testprogramm sind Schueler bis Schueler4 in der Klasse TForm deklariert. Es werden die folgenden Zeilen ausgeführt: Schueler := TSchueler.create; Schueler.Name := Max König ; Schueler2 := TSchueler.create; Schueler2.Name := Lieschen Müller ; Schueler3 := Schueler2; Schueler4 := nil; Zeichne das Objektdiagramm. 3
Arbeitsblatt 2 Aufgabe 3 In einem Abenteuerspiel, in dem der Spieler von Raum zu Raum gehen kann, werden die Räume durch Klassen realisiert. a) Zeichne das Klassendiagramm zu folgendem Objektdiagramm: Form: TForm Kantine : TRaum Flur : TRaum Dachboden : TRaum Kantine: TRaum Beschreibung = Essensreste liegen auf dem Boden besucht = false Flur: TRaum Beschreibung = Ein Flur mit 2 Treppenaufgängen besucht = false Dachboden: TRaum Beschreibung = Ein rumpeliger Dachboden besucht = false Liste alle Anweisungen auf, die zur Entstehung des Objektdiagramms geführt haben. Aufgabe 4 Liste alle Anweisungen auf, die zu diesem Objektdiagramm geführt haben. Form: TForm Schueler : TSchueler Klassenbester : TSchueler Schulsieger : TSchueler Stufensieger: TSchueler Schuler: TSchueler nil Aufgabe 5 Erkläre schrittweise, was bei den Anweisungen passiert: a) Schueler := TSchueler.create; Dachboden.Beschreibung = Ein rumpeliger Dachboden ; c) Schulsieger := Klassenbester; 4
Arbeitsblatt 3 Aufgabe 6 Als Vorbereitung für die Abiturarbeit in Deutsch soll ein kleines objektorientiertes Programm geschrieben werden, das die Inhalte mehrerer Literaturklassiker anzeigen kann. Die Bücher sollen durch eine Klasse beschrieben werden. Zu den Büchern wird jeweils der Titel und Kurzinhalt gespeichert. Bsp.: Faust Faust liebt Gretchen, Pakt mit dem Teufel, Faust verjüngt sich, am Ende Gretchen tot oder Kabale und Liebe Ferdinand liebt Luise, Ferdinands Vater ist dagegen, Ferdinand vergiftet Luise und bringt sich um oder Wallenstein 30-jähriger Krieg, Wallenstein vertraut den falschen Leuten und wird umgebracht Ein dynamisches Anlegen von Büchern in hier noch nicht vorgesehen. Alle Objekte und Attribute werden in der FormCreate-Methode angelegt. Die Bücher werden als Array verwaltet (max. 20 Bücher), die Ausgabe von Titel und Inhalt erfolgt über Angabe der Array-Nummer. a) Erstelle das Klassendiagramm mit den Klassen TForm und TBuch. Implementiere das Delphi-Programm. Aufgabe 7 Das Programm aus Aufgabe 7 soll so erweitert werden, dass zusätzlich zu den schon vorhandenen Büchern weitere Bücher per Hand eingegeben werden können. a) Dazu wird auf Knopfdruck. ein Objekt erzeugt, 2. der Titel zugewiesen, 3. der Inhalt zugewiesen. Bei der Ausgabe des entsprechenden Buchs soll erweiternd geprüft werden, ob das Buch tatsächlich existiert (die angesprochende Referenz nicht nil ist). 5
Lösungen Lösung: Aufgabe a) TForm Button : TButton Button2 : TButton Button3 : TButton Label : TLabel Memo : TMemo 3 TButton TLabel TMemo Form: TForm Button_: TButton Button : TButton Button : TButton Button : TButton Label : TLabel Memo : TMemo Button_2: TButton Button_3: TButton Label_: TLabel Memo_: TMemo Lösung Aufgabe 2 a) type TSchueler = class Name : String; Alter : Integer; end; Schueler := TSchuelder.create; Schueler.Name := Lieschen Müller ; Schueler.Alter := 9; c) Form: TForm Schueler : TSchueler Schueler2 : TSchueler Schueler3 : TSchueler Schueler4 : TSchueler Schueler: TSchueler Name = Max König Schueler2: TSchueler Name = Lieschen Müller nil 6
Lösung Aufgabe 3 a) TForm Kantine : TRaum Flur : TRaum Dachboden : TRaum 3 TRaum Beschreibung : String besucht : boolean Kantine := TRaum.create; Flur := TRaum. create; Dachboden := TRaum.create; Kantine.Beschreibung = Essensreste liegen auf dem Boden ; Kantine.besucht = false; Flur.Beschreibung = Ein Flur mit 2 Treppenaufgängen ; flur.besucht = false; Dachboden.Beschreibung = Ein rumpeliger Dachboden ; Dachboden.besucht = false; Lösung Aufgabe 4 Schueler := TSchuler.create; Klassenbester := Schueler; Schulsieger := Schueler; Stufensieger := nil; Lösung Aufgabe 5 a) Ein Objekt vom Typ TSchueler wird erzeugt und vom Attribut Schueler aus referenziert. Dem Attribut Beschreibung des Objekts Dachboden wird die String-Variable zugeordnet. c) Das Attribut Schulsieger referenziert das Objekt, auf das die Referenz des Attributs Klassenbester zeigt. Lösung Aufgabe 6 a) TForm Buecher : array [..20] of TBuch..20 TBuch Titel : String Inhaltsbeschreibung : String vgl. Programmanhang Lösung Aufgabe 7 a) Anzahl := Anzahl + ; Buecher[Anzahl] := TBuch.Create; Buecher[Anzahl].Titel := Memo.Text; Buecher[Anzahl].Inhaltsbeschreibung := Memo2.Text; if (Buecher[StrToInt(Edit.Text)] <> nil) then begin Memo.Clear; Memo2.Clear; Memo.lines.add(Buecher[StrToInt(Edit.Text)].Titel); Memo2.lines.add(Buecher[StrToInt(Edit.Text)].Inhaltsbeschreibung); end; 7