Grundkonzepte der objektorientierten Programmierung Teil 2 Klaus Becker 2006 Objektorientierte Modellierung 2 1 4 2 5 3 1$ 6 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Miniwelt Modell System 3 Teil 1 Beziehungen zwischen Objekten Das Würfelspiel „chuck a luck“ 4 Einsatz zahlen und Zahl tippen Einsatz: 1 $ Gewinn: Würfel werfen Gewinn auszahlen 1 4 2 5 3 1$ 6 0 Treffer: 1 Treffer: Einsatz + 1 $ 2 Treffer: Einsatz + 2 $ 3 Treffer: Einsatz + 3 $ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Zielsetzung 5 Ziel ist es, ein Simulationsprogramm zu entwickeln, mit dem das Würfelspiel „chuck a luck“ am Rechner gespielt werden kann. Am Beispiel dieses einfachen und überschaubaren Systems sollen Grundkonzepte der objektorientierten Programmierung verdeutlicht werden. 1 4 2 5 3 1$ 6 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Miniwelt System Lösungsansatz mit Modellierung 6 1 4 2 5 3 1$ 6 Modell System 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ - Abbild der Miniwelt - Vorlage für das System Miniwelt Ansatz: Mit Hilfe eines Modells soll die Miniwelt zunächst programmiersprachenunabhängig beschrieben werden. Das Modell soll dann helfen, in einem zweiten Schritt das Programm möglichst gut zu strukturieren. 7 Spiel ohne Überwachung Das bisher entwickelte Programm zur Simulation des Chuck-A-Luck-Spiels lässt noch Bedienungen zu, die in der Miniwelt nicht erlaubt sind. Einsatz zahlen und Zahl tippen Würfel werfen Gewinn verbuchen Einsatz zahlen Zahl tippen (z. B. 2) Solange Würfel werfen, bis die getippte Zahl fällt Gewinn mehrfach verbuchen Zustandsbasierte Ablaufmodellierung 8 Aktueller Zustand Auslösendes Ereignis Ausgelöste Aktion(en) Neuer Zustand bereit BEinsatzZahlen. onClick Einsatz vom Konto abbuchen einsatzgezahlt einsatzgezahlt RGSpielfeld. onClick Spielzahl festlegen einsatzgezahlt BWuerfelWerfen. onClick Würfelwerfen simulieren gewürfelt BGewinnVerbuchen. onClick Gewinn ermitteln und auf dem Konto verbuchen bereit gewürfelt Einsatz zahlen und Zahl tippen Würfel werfen Gewinn verbuchen Spiel mit Spielmanager 9 1 4 2 5 3 1$ 6 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Miniwelt In der Miniwelt wird der korrekte Spielablauf durch eine Person überwacht und gesteuert. In der Modellwelt soll diese Steuerung durch ein Objekt „spielmanager“ übernommen werden. Dieses Objekt ist zuständig für die Verwaltung des Spielzustandes und die jeweilige Aktivierung der am Spiel beteiligten Objekte. Spiel mit Spielmanager 10 1 4 2 5 3 1$ 6 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Modell Miniwelt spielmanager ... Zuständigkeit: verwaltet den Spielzustand und erteilt die passenden Aufträge an die SpielObjekte spielbrett wuerfelA wuerfelB wuerfelC konto zahl = 3 augen = 3 augen = 3 augen = 5 stand = 9 11 Spielmanager aktiviert Spiel-Objekte Aktueller Zustand Auslösendes Ereignis Ausgelöste Aktion(en) Neuer Zustand bereit BEinsatzZahlen. onClick Einsatz vom Konto abbuchen einsatzgezahlt BEinsatzZahlen.OnClick [zustand = bereit]: 12 Spielmanager aktiviert Spiel-Objekte Aktueller Zustand Auslösendes Ereignis Ausgelöste Aktion(en) Neuer Zustand einsatzgezahlt RGSpielfeld. onClick Spielzahl festlegen einsatzgezahlt RGSpielfeld.onClick [zustand = einsatzgezahlt]: 13 Spielmanager aktiviert Spiel-Objekte Aktueller Zustand Auslösendes Ereignis Ausgelöste Aktion(en) Neuer Zustand einsatzgezahlt BWuerfelWerfen. onClick Würfelwerfen simulieren gewürfelt BWuerfelWerfen.onClick [zustand = einsatzgezahlt]: 14 Spielmanager aktiviert Spiel-Objekte Aktueller Zustand Auslösendes Ereignis Ausgelöste Aktion(en) Neuer Zustand gewürfelt BGewinnVerbuchen. onClick Gewinn ermitteln und auf dem Konto verbuchen bereit BGewinnVerbuchen.onClick [zustand = gewuerfelt]: Aktivierung von Objekten 15 Ein Objekt stellt seiner Umgebung bestimmte Dienste (Operationen) zur Verfügung. Durch eine Nachricht veranlasst ein „Kunde“ das Objekt, die Dienstleistung zu erledigen. Das Objekt führt dann die Operation aus. konto stand = 9 spielmanager zustand = bereit abheben(1) konto stand = 9 konto stand = 8 Zustand vorher Aktivierung durch eine Nachricht Zustand nachher Beziehung zwischen Objekten 16 Ein Nachrichtenaustausch zwischen Objekten kann nur stattfinden, wenn das sendende Objekt die Nachricht dem Empfängerobjekt „zustellen“ kann. Hierzu müssen diese Objekte in Beziehung zueinander stehen. wuerfelA spielbrett hat wuerfelB hat spielmanager hat hat konto hat wuerfelC wuerfelA kennt wuerfelB kennt wuerfelC kennt kennt spielmanager kennt spielbrett konto Hat-Beziehung / Komposition 17 wuerfelA spielbrett hat wuerfelB hat spielmanager hat konto hat hat wuerfelC Bei dieser Struktur geht man davon aus, dass ein Objekt ein anderes besitzt, d. h. die vollständige Kontrolle über dieses Objekt hat. Insbesondere ist es für die Erzeugung und Vernichtung des kontrollierten Objekts zuständig. Man spricht in diesem Fall von einer Hat-Beziehung. Kennt-Beziehung / Verbindung 18 wuerfelA kennt wuerfelB kennt spielmanager kennt spielbrett konto kennt wuerfelC kennt Bei diesen Beziehungen führen die beteiligten Objekte ein Eigenleben. Die in Verbindung stehenden Objekte sind zwar aufeinander angewiesen, weil sie beispielsweise miteinander kommunizieren müssen, um eine gemeinsame Aufgabe zu erledigen, aber es reicht, wenn ein Objekt das andere kennt. Man spricht von einer Kennt-Beziehung zwischen Objekten. Modell mit Spielmanager 19 TSpielmanager - zustand: ... ... TSpielbrett hat TWuerfel hat + „erzeugen“ + „vernichten“ + einsatzZahlen + spielzahlSetzen(z: int.) + wuerfelWerfen + gewinnVerbuchen + getZustand: ... ... TWuerfel hat TWuerfel hat TKonto hat wuerfelA spielbrett hat wuerfelB spielmanager hat wuerfelC hat hat konto hat Modell mit Spielmanager 20 TSpielmanager kennt - zustand: ... ... kennt + „erzeugen“ + „vernichten“ + einsatzZahlen + spielzahlSetzen(z: int.) + wuerfelWerfen + gewinnVerbuchen + getZustand: ... ... wuerfelA kennt kennt kennt kennt wuerfelB kennt wuerfelC kennt TSpielbrett TWuerfel TWuerfel TWuerfel TKonto kennt spielmanager kennt spielbrett konto 21 Teil 2 Objekte in Aktion 22 Zielsetzung Ziel ist es, das Chuck-A-Luck-Spiel mit einem Spielmanager zu simulieren. Hat-Beziehung Kennt-Beziehung Beachte: In BlueJ werden Hat- und Kennt-Beziehung auf gleiche Weise mit Hilfe von Pfeilen dargestellt. 23 Modell mit Hat-Beziehung Schritt 1: Erzeugen Sie ein Objekt „GUI“ als Exemplar der Klasse „TGUI“. 24 Modell mit Hat-Beziehung Schritt 2: Inspizieren Sie zunächst das Objekt „GUI“ und die von ihm verwalteten Spielobjekte. Hier erkennt man, welches Objekt auf welches andere einen direkten Zugriff hat. 25 Modell mit Hat-Beziehung Schritt 3: Aktivieren Sie mit Hilfe von „GUI“ die einzelnen Spielaktionen. Die Veränderungen der Objektzustände kann man sich durch Inspektion anschauen. 26 Modell mit Hat-Beziehung Schritt 4: Aktivieren Sie abschließend die Methode „spielDatenAnzeigen“ des Objekts „GUI“. Diese Methode sollte jetzt genau die Spielergebnisse anzeigen, die man auch durch Inspektion der Objekte erhält. 27 Modell mit Kennt-Beziehung Schritt 1: Erzeugen Sie ein Objekt „GUI“ als Exemplar der Klasse „TGUI“. Schritt 2: Inspizieren Sie dieses Objekt und die von ihm verwalteten Objekte. 28 Modell mit Kennt-Beziehung Schritt 3: Führen Sie ein Spiel mit den Methoden von „GUI“ aus. Schritt 4: Lassen Sie „GUI“ die Spielergebnisse anzeigen. 29 Teil 3 Implementierung der Hat-Beziehung Zielsetzung 30 TSpielmanager erstellen TWuerfel hat - zustand: ... ... fertig + create + wuerfelWerfen ... Teil-Modell instance of instance of spielmanager zustand = ... wuerfelA hat augen = 3 Die Implementierung der Hat-Beziehung soll anhand eines Teilmodells des Gesamtmodells gezeigt werden. Wir verzichten vorerst auf die Verwaltung des Spielzustands. 31 Referenzen schaffen Beziehungen Mit Hilfe von Referenzattributen kann ein Objekt sich die Adressen seiner „Beziehungspartner“ merken. Speicheradresse 3A80 3A80 Referenzattribut 32 Klasse mit Referenzattribut TSpielmanager - zustand: ... - wuerfelA: TWuerfel ... + „erzeugen“ + „vernichten“ + einsatzZahlen + spielzahlSetzen(z: int.) + wuerfelWerfen + gewinnVerbuchen + getZustand: ... ... Referenzattribut Speicheradresse 3A80 3A80 Referenzattribut Die Klasse TSpielmanager muss um Referenzattribute erweitert werden, mit deren Hilfe die Beziehungen zu anderen Objekten verwaltet werden. Modellstruktur 33 FGUI spielmanager hat wuerfelA hat Bei der Hat-Beziehung geht man davon aus, dass ein Objekt ein anderes besitzt, d. h. die vollständige Kontrolle über dieses Objekt hat. Insbesondere ist es für die Erzeugung und Vernichtung des kontrollierten Objekts zuständig. Man spricht in diesem Fall von einer Hat-Beziehung. Modellklasse mit Referenzattributen 34 unit uSpielmanager; interface uses uWuerfel; type TSpielmanager Einbindung der Klassen-Unit - wuerfelA: TWuerfel ... ... TSpielmanager = class private wuerfelA: TWuerfel; Deklaration des Referenzattributs public constructor create; destructor destroy; override; ... end; implementation 35 Erzeugung des Würfel-Objekts FGUI hat type TSpielmanager = class private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; ... end; implementation constructor TSpielmanager.create; begin wuerfelA := TWuerfel.create; end; destructor TSpielmanager.destroy; begin wuerfelA.free; end; spielmanager wuerfelA hat Modellstruktur 36 Implementierung einer Nachricht ... FGUI hat type TSpielmanager = class private wuerfelA: TWuerfel; public constructor create; destructor destroy; override; procedure wuerfelWerfen; ... end; spielmanager hat Modellstruktur Nachricht spielmanager implementation ... Senderobjekt-Klasse procedure TSpielmanager.wuerfelWerfen; begin wuerfelA.werfen; Operation end; Empfängerobjekt wuerfelA werfen wuerfelA 37 Erzeugung des Spielmanager-Objekts unit uGUI; interface FGUI spielmanager hat wuerfelA hat Modellstruktur uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uSpielmanager; type TGUI = class(TForm) ... private { Private-Deklarationen } spielmanager: TSpielmanager; public { Public-Deklarationen } end; implementation {$R *.DFM} procedure TGUI.FormCreate(Sender: TObject); begin spielmanager := TSpielmanager.create; end; ... Zugriff auf Objekte 38 unit uGUI; FGUI spielmanager hat interface wuerfelA hat ... Modellstruktur implementation {$R *.DFM} procedure TGUI.BWerfenClick(Sender: TObject); begin // Aktualisierung der Modell-Objekte Kein direkter Zugriff spielmanager.wuerfelWerfen; auf wuerfelA möglich // Aktualisierung der Anzeige PWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA); end; Nachrichten ... FGUI getWuerfelA spielmanager getAugen wuerfelA 39 Zugriff auf ein abhängiges Objekt unit uGUI; interface FGUI spielmanager hat wuerfelA hat ... implementation {$R *.DFM} procedure TGUI.BWerfenClick(...); begin // Aktualisierung der Modell-Objekte spielmanager.wuerfelWerfen; // Aktualisierung der Anzeige Hilfsoperation PWuerfelA.Caption := IntToStr(spielmanager.getWuerfelA); end; function TSpielmanager.getWuerfelA: integer; begin result := wuerfelA.getAugen; end; TSpielmanager - wuerfelA: Wuerfel ... + create + destroy + wuerfelWerfen ... + getWuerfelA: integer ... 40 Aufgabe Die gezeigte Implementierung des Teilmodells „Spielmanager hat Wuerfel“ finden Sie im Verzeichnis „ChuckALuck21NurWuerfelnMitHatBeziehung“. Testen Sie zunächst diese Implementierung. Beachten Sie, dass man hier nur Würfel A werfen kann. Bauen Sie dann schrittweise diese Implementierung zu einer Implementierung des gesamten Spiels aus. Berücksichtigen Sie zunächst noch nicht den jeweiligen Spielzustand. Berücksichtigen Sie in einem letzten Schritt den jeweiligen Spielzustand. Eine vollständige Implementierung finden Sie im Verzeichnis „ChuckALuck22GesamtesSpielMitHatBeziehung“. 41 Teil 4 Implementierung einer Kennt-Beziehung Zielsetzung 42 TSpielmanager TWuerfel kennt - zustand: ... ... + create + wuerfelWerfen ... Teil-Modell instance of instance of spielmanager zustand = ... wuerfelA kennt augen = 3 Hier sollen die Ähnlichkeiten und Unterschiede zwischen einer Implementierung der Kennt-Beziehung und der Hat-Beziehung aufgezeigt werden. 43 Bekanntschaft durch Referenzen TSpielmanager - zustand: ... - wuerfelA: TWuerfel ... + „erzeugen“ + „vernichten“ + einsatzZahlen + spielzahlSetzen(z: int.) + wuerfelWerfen + gewinnVerbuchen + getZustand: ... ... Referenzattribut Speicheradresse 3A80 3A80 Referenzattribut Die Ausgangssituation bleibt gleich: Die Klasse TSpielmanager muss um Referenzattribute erweitert werden, mit deren Hilfe die Beziehungen zu anderen Objekten verwaltet werden. Modellstruktur 44 FGUI spielmanager hat wuerfelA kennt Bei der Kennt-Beziehung führen die beteiligten Objekte ein Eigenleben. Die in Verbindung stehenden Objekte sind zwar aufeinander angewiesen, weil sie beispielsweise miteinander kommunizieren müssen, um eine gemeinsame Aufgabe zu erledigen, aber es reicht, wenn ein Objekt das andere kennt. 45 unit uGUI; Erzeugung der Objekte FGUI interface spielmanager hat wuerfelA kennt uses ..., uWuerfel, uSpielmanager; type TGUI = class(TForm) ... private { Private-Deklarationen } wuerfelA: TWuerfel; spielmanager: TSpielmanager; public { Public-Deklarationen } end; implementation {$R *.DFM} procedure TGUI.FormCreate(Sender: TObject); begin randomize; wuerfelA := TWuerfel.create; spielmanager := TSpielmanager.create(wuerfelA); end; Modellstruktur 46 Erzeugung der Kennt-Referenz 3A80 3A80 3A80 spielmanager := TSpielmanager.create(wuerfelA); constructor TSpielmanager.create(wA: TWuerfel); begin wuerfelA := wA; end; 3A80 3A80 3A80 47 unit uGUI; Zugriff auf Objekte FGUI spielmanager hat interface wuerfelA kennt ... implementation Modellstruktur {$R *.DFM} procedure TGUI.BWerfenClick(Sender: TObject); begin // Aktualisierung der Modell-Objekte spielmanager.wuerfelWerfen; // Aktualisierung der Anzeige direkter Zugriff auf wuerfelA möglich PWuerfelA.Caption := IntToStr(wuerfelA.getAugen); end; ... FGUI wuerfelWerfen spielmanager getAugen Nachrichten werfen wuerfelA 48 Aufgabe Die gezeigte Implementierung des Teilmodells „Spielmanager kennt Wuerfel“ finden Sie im Verzeichnis „ChuckALuck31NurWuerfelnMitKenntBeziehung“. Testen Sie zunächst diese Implementierung. Beachten Sie, dass man hier nur Würfel A werfen kann. Bauen Sie dann schrittweise diese Implementierung zu einer Implementierung des gesamten Spiels aus. Berücksichtigen Sie zunächst noch nicht den jeweiligen Spielzustand. Berücksichtigen Sie in einem letzten Schritt den jeweiligen Spielzustand. Eine vollständige Implementierung finden Sie im Verzeichnis „ChuckALuck32GesamtesSpielMitKenntBeziehung“. 49 Aufgabe Das Simulationsprogramm zum Chuck-A-Luck-Spiel soll jetzt wie folgt verändert werden: - Es werden gezinkte Würfel benutzt (die keine 6 ermöglichen). - Der Spieleinsatz beträgt jetzt 2$, als Gewinne erhält man das 3-fache der Anzahl der Treffer (in $) zurück. - Die Würfel werden mit Hilfe von Bildern angezeigt. Machen Sie sich zunächst klar, wo im bestehenden Programm die jeweiligen Änderungen vorgenommen werden müssen (in einem gut strukturierten objektorientierten Programm sollte das kein Problem sein). Nehmen Sie dann die Änderungen schrittweise vor. 50 51 Teil 5 Übung: Uhr 52 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein System zu entwickeln, mit dem eine einfache Uhr simuliert werden kann. Nach: Barnes / Kölling: Objektorientierte Programmierung mit Java. Pearson Studium 2003. 53 Objekte und ihre Beziehung Miniwelt 16:46 Modell digitalUhr hat stundenZaehler hat minutenZaehler Die Digitaluhr der Miniwelt soll mit Hilfe eines Objekts „digitalUhr“ beschrieben werden, das seine Operationen mit Hilfe von zwei von ihm verwalteten Objekten „stundenZaehler“ und „minutenZaehler“ durchführt. Klassenentwurf 54 TDigitalUhr sZaehler: TModuloZaehler mZaehler: TModuloZaehler erzeugen vernichten setzen(sWert, mWert) tick rueckSetzen ... TModuloZaeher hat - max: integer - stand: integer hat + create(maxWert: integer) + destroy + setStand(standWert: int.) + weiterZaehlen + nullSetzen + getStand: integer digitalUhr stundenZaehler minutenZaehler sZaehler = mZaehler = max = 23 stand = 16 max = 59 stand = 46 55 Aufgabe Implementieren Sie das dargestellte (oder ein selbst entwickeltes) Modell. 56 Teil 6 Übung: Chiffriersystem 57 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein monoalphabetisches Chiffriersystem zu entwickeln. 58 Der Chiffrieransatz Der Benutzer gibt ein (langes) Schlüsselwort vor (z. B. WEITERBILDUNGSKURSX), aus dem dann die Chiffriertabelle wie folgt erzeugt wird. Man streicht zunächst alle mehrfach vorkommenden Buchstaben (im Beispiel ergibt das WEITRBLDUNGSKSX). Diese Buchstaben bilden den Anfang des Geheimtextalphabets. Dann füllt man ab der letzten Stelle mit den noch zur Verfügung stehenden Buchstaben des Alphabets auf. Klartextalphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z W E I T R B L D U N G S K X Y Z A C F H J M O P Q V Geheimtextalphabet Objekte und ihre Beziehung 59 Schlüssel Schlüssel Miniwelt WEITERBILDUNGSKURSX SALVECAESAR VDOYHFDHVDU Quelltext Geheimtext SALVECAESAR Quelltext A B C D E F G H I J K L M N O P Q R S T U V W X Y Z W E I T R B L D U N G S K X Y Z A C F H J M O P Q V Modell chiffrierer hat codierung Klassenentwurf 60 TChiffrierer quelltext geheimtext chluessel codierung TCodierung code: array [‚A‘..‘Z‘] of char hat erzeugen setSchluessel(...) getSchluessel: ... vorbereiten verschluesseln entschluesseln ... chiffrierer hat erzeugen setCode(s: string) getCode: string getGeheim(klar: char): char getKlar(geheim: char): char codierung 61 Aufgabe Implementieren Sie das dargestellte (oder das selbst entwickelte) Modell. 62 Teil 7 Übung: Roboter 63 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein grafisches Simulationsprogramm zu entwickeln, mit dem ein steuerbarer Modellroboter in einem Zellengitter bewegt werden kann. 64 Identifikation von Objekten Miniwelt Norden (6,4) Westen Osten Süden Modell roboter kennt welt Klassenentwurf 65 TRoboter xPos yPos richtung welt erzeugen initialisieren schritt linksDrehen rechtsDrehen markeSetzen markeLoeschen ... TWelt kennt marken: array [0..9] of array [0..9] of boolean ziegel: array [0..9] of array [0..9] of integer erzeugen markeSetzen(x, y: integer) markeLoeschen(x, y: integer) ziegelHinlegen(x, y: integer) ziegelAufheben(x, y: integer) getMarke(x, y: integer): boolean getZiegel(x, y: integer): integer 66 Aufgabe Implementieren Sie das dargestellte (oder das selbst entwickelte) Modell. 67 Teil 8 UML-Editoren 68 UML-Editoren UML-Editoren unterstützen den Entwickler beim Erstellen von Diagrammen. (Beispiel: Violet) 69 UML-Werkzeuge UML-Werkzeuge unterstützen den Entwickler auch beim Erstellen des Quellcodes und der Dokumentation von Modellen. (Beispiel: UMLEd) 70 UML-Werkzeuge Quellcode – erzeugt mit UMLEd: UNIT mTWuerfel; interface uses // Uses-Klausel ggf. anpassen type TWuerfel = CLASS // Attribute private augen : integer; //Objektbeziehungen // Methoden public constructor create; procedure werfen; function getAugen : integer; end; ... 71 UML-Werkzeuge Dokumentation – erzeugt mit UMLEd: Dokumentation der Klasse "TWuerfel" Beschreibung der Klasse: Attribute augen : integer beschreibt die aktuelle Augenzahl des Würfels Protokoll der Dienste / Methoden Konstruktor create Auftrag werfen aktiviert den Würfel so, dass (mit Hilfe des Zufallsgenerators) eine neue Augenzahl erzeugt wird Anfrage getAugen : integer 72 Aufgabe Testen Sie den UML-Editor „Violet“ und das UML-Werkzeug „UMLed“. 73 Teil 9 Zusammenfassung Objektorientierung 74 Klasse Grundkonzepte Beziehung Nachricht Objekt Grundideen Modellierungssprache: UML Implementierungssprache: Delphi, Java, ... 75 Idee: Objekt als Systemkomponente Ein Objekt ist eine aktive und autonome Programmeinheit, das für bestimmte Aufgaben zuständig ist und diese in eigener Verantwortung erledigt. Durch Nachrichten können Objekte andere Objekte zur Erledigung von (Teil)Aufgaben auffordern und somit gemeinsam die Systemaktivitäten erzeugen. 76 Literaturhinweise Es gibt eine Vielzahl von fachwissenschaftlichen Darstellungen zur objektorientierten Modellierung und Programmierung. Hier wurden folgende Lehrwerke benutzt: - D. J. Barnes, M. Kölling: Objektorientierte Programmierung mit Java. Pearson Studium 2003. - Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag 1999. - Bernd Oestereich: Objektorientierte Softwareentwicklung. Oldenbourg 1998. Dagegen gibt es nur wenige Schulbücher, die systematisch in die objektorientierte Programmierung einführen, z. B.: - Siegfried Spolwig: Objektorientierung im Informatikunterricht. Dümmler-Verlag 1997. - P. Damann, J. Wemßen: Objektorientierte Programmierung mit Delphi, Band 2. Klett-Verlag 2003. Viele interessante Artikel mit Unterrichtsvorschlägen bzw. fachdidaktischen Auseinandersetzungen findet man in der Zeitschrift LOG IN. Das Themenheft 128/129 ist speziell dem Thema „Objektorientiertes Modellieren und Programmieren“ gewidmet. ... 77 Literaturhinweise Im Internet findet man ebenfalls sehr viele schulgerechte Darstellungen der objektorientierten Modellierung und Programmierung, z. B: http://informatikag.bildung-rp.de/ Die AG-Informatik des LMZ in RLP stellt u. a. auch Fortbildungsmaterialien zu diesem Thema bereit. http://hsg.region-kaiserslautern.de/faecher/inf/index.php Auf der Homepage des HSG in Kaiserslautern findet man Unterrichtsmaterialien und Links zu weiteren interessanten Seiten. ...