Grundkonzepte der objektorientierten Programmierung Teil 3

Slides:



Advertisements
Ähnliche Präsentationen
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Advertisements

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Kritische Betrachtung
Pflege der Internetdienste
Unter- und Oberklassen: Beispiel
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
DVG Klassen und Objekte
Einführung in die Programmierung Vererbung
Informatikunterricht mit Java
1 Teil 4 Übung: Uhr. 2 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein System zu entwickeln, mit dem eine einfache Uhr simuliert.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
Delphi II - OOP IFB Fortbildung
Implementierung objektorientierter Modelle
Objektorientierte Programmierung
Listen Klaus Becker KB Listen 2 Listen Ansgar A., Speyer Claudia B., Koblenz Knut B., Neustadt Annett B., Wörrstadt Stefani D., Bad Ems Jochen F.,
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Grundkonzepte der objektorientierten Programmierung
Grundkonzepte der objektorientierten Programmierung
Konzepte der objektorientierten Programmierung
Objektorientierte Software-Entwicklung
Einführung in die Software-Entwicklung mit Delphi Teil 1
Grundkonzepte der objektorientierten Programmierung Teil 2
Bausteine zum objektorientierten Programmieren mit Delphi
Modellierung grafischer Objekte
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Analyse von Ablaufdiagrammen
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
PARTENARIAT ÉDUCATIF GRUNDTVIG PARTENARIAT ÉDUCATIF GRUNDTVIG REPERES KULTURELLER ZUSAMMENHALT UND AUSDEHNUNG DER IDEEN AUF EUROPÄISCHEM.
Objektorientierte Programmierung
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #6 Philipp Effenberger
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Objektorientierung.
Objektorientierte Modellierung mit UML
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Einführung in die Programmierung mit Java
Abstrakte Klassen und das Interface-Konzept
Objektorientierte (OO) Programmierung
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
C++ FÜR cOMPUTERSPIELENTWICKLER
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
1 Eine Einführung in die objektorientierte Programmierung.
Grundkonzepte der objektorientierten Programmierung Teil 1
9. Vererbung und Polymorphie
Implementieren von Klassen
 Präsentation transkript:

Grundkonzepte der objektorientierten Programmierung Teil 3 Klaus Becker 2006

Objektorientierte Modellierung 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 Miniwelt Modell System

Teil 1 Vererbung

Zielsetzung 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Beim Würfelspiel „chuck a luck“ soll einer der Würfel durch ein Glücksrad ersetzt werden. Ziel ist es, die sich hierdurch ergebenden Änderungen im Modell zu untersuchen. 1 4 1$ 1$ 2 5 1$ 1$ 1$ 2 4 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6 5 1 3 6

Modellierung Eine strukturgetreue, an der Miniwelt orientierte Modellierung zeigt neben zwei Würfel-Objekten auch ein Glücksrad-Objekt. Miniwelt Modell TWuerfel TGluecksrad augen position werfen drehen instance of instance of 2 4 wuerfelA wuerfelB rad 5 1 3 6 augen = 3 augen = 3 position = 5

Implementierung mit Code-Duplizierung unit uWuerfel; interface type TWuerfel = .. implementation constructor TWuerfel.create; begin augen := random(6)+1; end; procedure TWuerfel.werfen; begin augen := random(6)+1; end; function TWuerfel.getAugen: .. begin result := augen; end; end. unit uGluecksrad; interface type TGluecksrad = .. implementation constructor TGluecksrad.create; begin position := random(6)+1; end; procedure TGluecksrad.drehen; begin position := random(6)+1; end; function TGluecksrad.getPosit.. begin result := position; end; end. TWuerfel – augen: integer + create + werfen + getAugen: integer TGluecksrad – position: integer + create + drehen + getPosition: integer

Universelle Klasse zur Vermeidung ... Zur Vermeidung unnötiger Code-Duplizierung kann man eine universelle Klasse „TZufallsgeraet“ einführen, mit deren Hilfe Objekte erzeugt werden können, die mit Hilfe der Methode „aktivieren“ eine Zufallszahl aus dem Bereich 1..6 erzeugen können. TZufallsgeraet // Erzeugung der Objekte wuerfelA := TZufallsgeraet.create; wuerfelB := TZufallsgeraet.create; rad := TZufallsgeraet.create; – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) // Aktivierung der Objekte wuerfelA.aktivieren; wuerfelB.aktivieren; rad.aktivieren; instance of wuerfelA wuerfelB rad wert = 3 wert = 3 wert = 5

... von Code-Duplizierung Vorteil: Man benötigt nur eine Klasse zur Erzeugung der gewünschten Objekte. Nachteil: Unterschiede zwischen Würfel-Objekten und Glücksrad-Objekten können nicht erfasst werden. TZufallsgeraet – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) instance of wuerfelA wuerfelB rad wert = 3 wert = 3 wert = 5

Kleine Unterschiede Zur Verdeutlichung „kleiner Unterschiede“ soll das Chuck-A-Luck-Spiel jetzt mit einem universellen Zufallsgerät, einem Würfel und einem Glücksrad durchgeführt werden. Dabei gehen wir von folgenden Annahmen aus: Ein TZufallsgeraet-Objekt soll nach der Erzeugung einen unbestimmten (vom Compiler beliebig festgelegten) Wert haben. Ein TWuerfel-Objekt soll ein spezielles TZufallsgeraet-Objekt sein, das nach der Erzeugung eine nicht vorhersagbare Augenzahl aus dem Bereich 1..6 hat. Ein TGluecksrad-Objekt soll ein spezielles TZufallsgeraet-Objekt sein, das nach der Erzeugung immer auf Position 1 eingestellt ist. Zudem soll ein solches Objekt über eine Methode „stoppen“ verfügen, mit deren Hilfe die Anfangsposition eingestellt werden kann. 2 4 3 5 1 3 6

Kleine Unterschiede Die Klasse TWuerfel bzw. die Klasse TGluecksrad ist hier eine Erweiterung der Klasse TZufallsgeraet. TZufallsgeraet – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) ist ist TWuerfel TGluecksrad + create + create + stoppen instance of instance of instance of 2 4 geraet wuerfel rad 3 5 1 3 6 wert = 3 wert = 3 wert = 5

Vererbung Eine Erweiterung einer „Superklasse“ erbt alle Attribute und Methoden dieser Klasse. Eine solche „Subklasse“ kann weitere Attribute und Methoden besitzen. Sie kann auch ererbte Methoden überschreiben (d. h. neu festlegen). Superklasse TZufallsgeraet – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) ist ist Subklasse TWuerfel TGluecksrad + create + create + stoppen instance of instance of instance of Vererbung ermöglicht es, eine Klasse als Erweiterung einer anderen Klasse zu konzipieren. geraet wuerfel rad wert = 3 wert = 3 wert = 5

Implementierung der Superklasse unit uZufallsgeraet; interface type TZufallsgeraet = .. implementation constructor TZufallsgeraet.cre.. begin end; procedure TZufallsgeraet.aktiv.. begin augen := random(6)+1; end; function TZufallsgeraet.getWer.. begin result := wert; end; ... end. TZufallsgeraet – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) ist ist Keine Initialisierung TWuerfel TGluecksrad + create + create + stoppen instance of instance of instance of geraet wuerfel rad wert = 3 wert = 3 wert = 5

Implementierung einer Subklasse unit uWuerfel; interface uses uZufallsgeraet; type TWuerfel = class(TZufallsgeraet) public constructor create; end; implementation constructor TWuerfel.create; begin inherited create; aktivieren; end; end. TZufallsgeraet – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) ist ist TWuerfel TGluecksrad + create + create + stoppen instance of instance of instance of geraet wuerfel rad wert = 3 wert = 3 wert = 5

Implementierung einer Subklasse unit uGluecksrad; interface uses uZufallsgeraet; type TGluecksrad = class(TZufallsgeraet) public constructor create; procedure stoppen; end; implementation constructor TGluecksrad.create; begin inherited create; setWert(1); end; procedure TGluecksrad.stoppen; begin setWert(1); end; ... TZufallsgeraet – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) ist ist TWuerfel TGluecksrad + create + create + stoppen instance of instance of instance of geraet wuerfel rad wert = 3 wert = 3 wert = 5

Vererbung und Zugriffsrechte type TZufallsgeraet = class private wert: integer; public ... TZufallsgeraet – wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) type TGluecksrad = class(TZufallsgeraet) public constructor create; procedure stoppen; end; implementation constructor TGluecksrad.create; begin inherited create; wert := 1; end; ist ist TWuerfel TGluecksrad + create + create + stoppen Die privaten Attribute der Superklasse sind in den Subklassen nicht zugreifbar. Fehler

Vererbung und Zugriffsrechte type TZufallsgeraet = class protected wert: integer; public ... TZufallsgeraet # wert: integer + create + aktivieren + getWert: integer + setWert(w: integer) type TGluecksrad = class(TZufallsgeraet) public constructor create; procedure stoppen; end; implementation constructor TGluecksrad.create; begin inherited create; wert := 1; end; ist ist TWuerfel TGluecksrad + create + create + stoppen Die Attribute der Superklasse sind hier auch in den Subklassen zugreifbar. Ok!

Erzeugung von Subklassen-Objekten unit uGluecksrad; interface uses uZufallsgeraet; type TGluecksrad = class(TZufallsgeraet) public constructor create; procedure stoppen; end; implementation constructor TGluecksrad.create; begin inherited create; setWert(1); end; procedure TGluecksrad.stoppen; begin setWert(1); end; ... Im Konstruktor einer Subklasse muss zunächst der Konstruktor der Superklasse aufgerufen werden.

Erzeugung von Subklassen-Objekten unit uGluecksrad; interface uses uZufallsgeraet; type TGluecksrad = class(TZufallsgeraet) public constructor create; procedure stoppen; end; implementation constructor TGluecksrad.create; begin setWert(1); end; procedure TGluecksrad.stoppen; begin setWert(1); end; ... Fehlt dieser Aufruf, so wird er automatisch vom Compiler ergänzt. inherited create;

Aufgabe Erstellen Sie ein Chuck-A-Luck-System wie beschrieben. Die Klasse TZufallsgeraet kann weiter verallgemeinert werden. Z. B. könnte der Bereich der möglichen Zufallszahlen erweitert werden. Führen Sie die erforderlichen Veränderungen durch.

Aufgabe unit uWuerfel; interface type TWuerfel = class(TObject) private augen: integer; public constructor create; procedure werfen; function getAugen: integer; end; implementation constructor TWuerfel.create; begin inherited create; augen := random(6)+1; end; ... Testen Sie die gezeigte Implementierung der Klasse TWuerfel (z. B. in einer Version ChuckALuck2..) und erklären Sie die markierten Zusätze. Informieren Sie sich hierzu auch über die in Delphi vordefinierte Klasse TObject.

Teil 2 Polymorphie

Zielsetzung 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ Das Würfelspiel „chuck a luck“ soll – ohne dass der Benutzer es weiß – mal mit idealen, mal mit gezinkten Würfeln gespielt werden. 1 4 1$ 1$ 2 5 1$ 1$ 1$ 1$ 1$ 3 1$ 1$ 1$ 1$ 3 3 6

Modellierung Bei einem gezinkten Würfel sollen die Augenzahlen 1..6 mit ungleicher Wahrscheinlichkeit auftreten (z. B. 1: 50%, 2: 10%, 3: 10%, ...). TIdealerWuerfel TGezinkterWuerfel augen augen werfen werfen instance of instance of wuerfelA wuerfelB wuerfelC wuerfelA wuerfelB wuerfelC augen = 3 augen = 3 augen = 5 augen = 1 augen = 1 augen = 1

Modellierung Ideale und gezinkte Würfel werden als Spezialisierung eines „allgemeinen“ Würfels konzipiert, der beim Werfen nichts machen soll. TWuerfel - augen: integer + create + werfen // nichts machen + getAugen: integer + setAugen(a: integer) ist ist TIdealerWuerfel TGezinkterWuerfel werfen // Augen von 1..6 werfen // Augen von 1..6

Implementierungsversuch unit uWuerfel; interface type TWuerfel = class private augen: integer; public constructor create; procedure werfen; function getAugen: integer; procedure setAugen(a: int.. end; implementation constructor TWuerfel.create; begin augen := 1; end; procedure TWuerfel.werfen; begin end; ... TWuerfel - augen: integer + create + werfen // nichts machen + getAugen: integer + setAugen(a: integer) ist ist TIdealerWuerfel TGezinkterWuerfel werfen // Augen von 1..6 werfen // Augen von 1..6

Implementierungsversuch unit uGezinkterWuerfel; interface uses uWuerfel; type TGezinkterWuerfel = class(TWuerfel) public procedure werfen; end; implementation procedure TGezinkterWuerfel.werfen; var hilf: real; begin hilf := random; if hilf < 0.5 then setAugen(1) else if hilf < 0.6 then setAugen(2) else if hilf < 0.7 then ... TWuerfel - augen: integer + create + werfen // nichts machen + getAugen: integer + setAugen(a: integer) ist ist TIdealerWuerfel TGezinkterWuerfel werfen // Augen von 1..6 werfen // Augen von 1..5 Die Klasse „TIdealerWuerfel“ wird analog implementiert.

Implementierungsversuch ... type TSpielmanager = class private zustand: integer; wuerfelA: TWuerfel; wuerfelB: TWuerfel; wuerfelC: TWuerfel; konto: TKonto; spielbrett: TSpielbre.. public constructor create; procedure wuerfelWerfen ... type TGUI = class(TForm) ... private { Private-Deklarationen } wuerfelA, wuerfelB, ...: TWuerfel; ... procedure TGUI.FormCreate(Sender: TOb.. var hilf: integer; begin {Wahl der Würfel} randomize; hilf := random(2); if hilf = 0 then {erzeuge ideale Würf.} begin wuerfelA := TIdealerWuerfel.create; wuerfelB := TIdealerWuerfel.create; wuerfelC := TIdealerWuerfel.create; end else {erzeuge gezinkte Würfel} begin wuerfelA := TGezinkterWuerfel.create; wuerfelB := TGezinkterWuerfel.create; wuerfelC := TGezinkterWuerfel.create; ... procedure ...wuerfelWerfen; begin wuerfelA.werfen; wuerfelB.werfen; wuerfelC.werfen; end;

Statischer / dynamischer Typ type TGUI = class(TForm) ... private { Private-Deklarationen } wuerfelA, wuerfelB, ...: TWuerfel; ... procedure TGUI.FormCreate(Sender: TOb.. var hilf: integer; begin {Wahl der Würfel} randomize; hilf := random(2); if hilf = 0 then {erzeuge ideale Würf.} begin wuerfelA := TIdealerWuerfel.create; wuerfelB := TIdealerWuerfel.create; wuerfelC := TIdealerWuerfel.create; end else {erzeuge gezinkte Würfel} begin wuerfelA := TGezinkterWuerfel.create; wuerfelB := TGezinkterWuerfel.create; wuerfelC := TGezinkterWuerfel.create; ... procedure ...wuerfelWerfen; begin wuerfelA.werfen; wuerfelB.werfen; wuerfelC.werfen; end; Deklaration: statischer Typ Laufzeit: dynamischer Typ Dynam. Typ: TIdealerWuerfel Statischer Typ: TWuerfel

Frühe Bindung / späte Bindung procedure ...wuerfelWerfen; begin wuerfelA.werfen; ... end; procedure ...wuerfelWerfen; begin wuerfelA.werfen; ... end; Bei früher Bin-dung ist der sta-tische Typ für die Ausführung einer Methode aus-schlaggebend. Bei später Bindung wird die Suche der Methode beim dynamischen Typ begonnen. Dynam. Typ: TIdealerWuerfel Dynam. Typ: TIdealerWuerfel Statischer Typ: TWuerfel Statischer Typ: TWuerfel

Implementierung von später Bindung type TWuerfel = class private augen: integer; public constructor create; procedure werfen; virtual; ... end; implementation procedure TWuerfel.werfen; begin end; ... procedure ...wuerfelWerfen; begin wuerfelA.werfen; ... end; type TIdealerWuerfel = class(TWuerfel) public procedure werfen; override; end; implementation procedure TIdealerWuerfel.werfen; begin setAugen(random(6)+1); end; ... Dynam. Typ: TIdealerWuerfel Statischer Typ: TWuerfel

Implementierung von früher Bindung type TWuerfel = class private augen: integer; public constructor create; procedure werfen; ... end; implementation procedure TWuerfel.werfen; begin end; ... procedure ...wuerfelWerfen; begin wuerfelA.werfen; ... end; type TIdealerWuerfel = class(TWuerfel) public procedure werfen; end; implementation procedure TIdealerWuerfel.werfen; begin setAugen(random(6)+1); end; ... Dynam. Typ: TIdealerWuerfel Statischer Typ: TWuerfel

Abstrakte Methoden type TWuerfel = class private augen: integer; public constructor create; procedure werfen; virtual; abstract; ... end; implementation // keine Implementierung von werfen Abstrakte Methoden werden in der Superklasse nur deklariert und erst in Subklassen implementiert. type TIdealerWuerfel = class(TWuerfel) public procedure werfen; override; end; implementation procedure TIdealerWuerfel.werfen; begin setAugen(random(6)+1); end; ...

Polymorphie Methodenaufrufe können polymorph gestaltet werden. Derselbe Methodenaufruf kann zur Laufzeit zu verschiedenen Zeitpunkten verschiedene Methoden aufrufen, abhängig vom jeweiligen dynamischen Typ der für den Aufruf verantwortlichen Variablen. zunächst später

Aufgabe Erstellen Sie ein Chuck-A-Luck-System wie beschrieben. Fügen Sie einen Button hinzu, um das Chuck-A-Luck-Spiel neu zu initialisieren. Dabei soll auch neu festgelegt werden, mit welchen Würfeln (ideal, gezinkt) gespielt wird.

Aufgabe unit uWuerfel; interface type TWuerfel = class(TObject) private augen: integer; public constructor create; destructor destroy; override; procedure werfen; function getAugen: integer; end; ... Erklären Sie die markierte Stelle. Informieren Sie sich hierzu auch über die in Delphi vordefinierte Klasse TObject.

Teil 3 Zusammenfassung

Objektorientierung Grundideen Grund- konzepte Objekt Nachricht Polymorphie Vererbung Beziehung Klasse Modellierungssprache: UML Implementierungssprache: Delphi, Java, ...

Idee: Objekt als Baustein Objekte / Klassen sollten nach Möglichkeit so abstrakt entworfen werden, dass sie zur Erledigung vieler Aufgaben benutzt werden können (Wiederverwendung). Gut verwendbare Klassen können dann in Klassenbibliotheken zur weiteren Verwendung bereitgestellt werden.

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. ...

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. ...