Grundkonzepte der objektorientierten Programmierung Teil 1 Klaus Becker
Grundkonzepte der objektorientierten Programmierung Teil 1 Klaus Becker 2006
Objektorientierte Modellierung 2 1 4 2 5 3 1$ 6 1$ 1$ 1$ Miniwelt Modell System
3 Warum Objektorientierung? These: Marktreife Software ist sehr schwer zu entwickeln. (Balzert: Lehrbuch der Software-Technik, S. 27) „Berühmte“ Software-Fehler • Eine Schweizer Bank überwies einigen Kunden Betrag, den die Kunden selbst an die Bank hätten überweisen müssen. Der Fehler wurde erst nach 9 Monaten bemerkt, der Bank entstand inzwischen ein Schaden von ca. 200000 DM. • Beim Bau der Rakete Ariane-5 wurde das bewährte Navigationssystem der Ariane-4 komplett übernommen. Daher konnten die für die Softwaretests vorgesehenen Ausgaben von mehr als 100 Millionen DM drastisch reduziert werden. Eine praxisgerechte Simulation der bei einem Ariane-5 -Start anfallenden Datenmengen fand nicht statt. Da die Ariane-5 durch zusätzliche Triebwerke schneller startete als ihr Vorgängermodell, konnten die Computer die Daten nicht schnell genug verarbeiten. Die Ariane-5 musste eine Minute nach dem Start gesprengt werden (Schaden: mehrere Milliarden DM). • Der als schwarzer Montag in die Börsengeschichte eingegangene 19. 10. 1987 war zum Großteil durch falsch programmierte Börsenprogramme großer Banken hervorgegangen. Als der Kurs einiger Aktien an diesem Tag besonders stark fiel, verkauften einige Programme automatisch die entsprechenden Aktien. Durch einen Lawineneffekt kam es zu einem weltweit drastischen Absinken der Kurse. (vgl. Bähnisch: Praktische Informatik 1, S. 193 ff)
4 Warum Objektorientierung? These: Marktreife Software ist sehr schwer zu entwickeln. (Balzert: Lehrbuch der Software-Technik, S. 27) Statistische Untersuchungen • Nach einer Untersuchung der Standish Group aus dem Jahr 1995 werden 31% aller Softwareprojekte erfolglos abgebrochen, 53% kosten viel mehr als die ursprünglich vorgesehenen Kosten und nur 16% werden rechtzeitig und ohne Kostenüberschreitung fertiggestellt. • Normale Software enthält durchschnittlich 25 Fehler pro 1000 Programmzeilen. Bei guter Software kann der Schnitt auf ca. 2 Fehler pro 1000 Programmzeilen reduziert werden. Beim Betriebssystem Windows-95, das aus 10 Millionen Programmzeilen besteht, muss man davon ausgehen, dass es bei der Auslieferung etwa 200 000 Fehler enthält. (vgl. http: //www. standishgroup. com/chaos. html)
5 Warum Objektorientierung? These: Objektorientierung ist die derzeitige Antwort auf die gestiegene Komplexität der Softwareentwicklung. (Oestereich: Objektorientierte Software-Entwicklung, S. 30) „Hauptprobleme“ der Software-Entwicklung „Eines der Hauptprobleme der Software-Entwicklung ist die Entwicklung zuverlässiger Software. Man bezeichnet ein Programm als zuverlässig, wenn es sich im Betrieb so verhält, wie man es aufgrund der Anforderungen an das Programm erwartet. Je umfangreicher ein Software-Projekt ist, desto unwahrscheinlicher ist es, dass sein Ergebnis jemals fehlerfrei wird. Man muss sogar davon ausgehen, dass es unmöglich ist, umfangreiche Software-Produkte vollständig fehlerfrei zu entwickeln. “ „Das andere Hauptproblem der Software-Entwicklung besteht darin, die Software so zu entwickeln, dass sie später problemlos geändert werden kann. Für die Entwickler ist es vorteilhaft, wenn die Entwicklung eines Software-Systems nach seiner Fertigstellung beendet ist. Eine weitergehende Betrachtung zeigt jedoch, dass die Entwicklung eines Software-Systems ein evolutionärer Prozess ist, der oft sehr lange währt, und dessen Ende womöglich nicht abzusehen ist. “ (Gumm, S. 661, 662)
6 Zur Orientierung Objektorientierung zeigt ihre Vorteile in der Regel erst bei komplexeren Software-Entwicklungsaufgaben. Komplexe Software-Entwicklungsaufgaben eignen sich jedoch nicht gut, um die Grundkonzepte objektorientierter Programmierung zu erlernen. Im folgenden sollen diese Grundkonzepte daher zunächst an einfachen und überschaubaren Problemkontexten entwickelt werden. Danach werden dann umfangreichere Problemstellungen bearbeitet, die den Nutzen der Objektorientierung illustrieren sollen.
7 Teil 1 Objekte und Klassen
Das Würfelspiel „chuck a luck“ 8 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$
Zielsetzung 9 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$ Miniwelt System
10 Eine ad-hoc-Lösung mit Hilfe von Delphi type Nachteil: TGUI = class(TForm) Die Klasse TGUI ist für alles Pueberschrift: TPanel; zuständig, neben der Verwaltung Pspielfeld: TPanel; Pwuerfel: TPanel; der GUI-Objekte auch für die Pkonto: TPanel; Verwaltung der Spieldaten. . Bei größeren Anwendungen führt BEinsatz. Zahlen: TButton; ein solcher Programmierstil zu. . . procedure BEinsatz. Zahlen. Click schwer überschaubaren und (Sender: TObject); schlecht wartbaren Programmen. private { Private-Deklarationen } spielzahl: integer; wuerfel 1: integer; procedure TGUI. BEinsatz. Zahlen. Click wuerfel 2: integer; (Sender: TObject); wuerfel 3: integer; begin konto: integer; // Verarbeitung: Einsatz abbuchen public { Public-Deklarationen } konto : = konto-1; // Ausgabe: Aktualisierung der Anzeige end; PKontostand. Caption : = Int. To. Str(konto); end;
Lösungsansatz mit Modellierung 11 1 4 2 5 3 1$ 6 Modell System 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.
Objektorientierung 12 1 4 2 5 3 1$ 6 Modell System 1$ 1$ 1$ - Abbild der Miniwelt - Vorlage für das System Miniwelt Idee: Die Software wird aus unabhängigen „Bausteinen“ zusammengesetzt. Die „Software-Bausteine“ sollen dabei den „Bausteinen der Miniwelt“ entsprechen. Ein Objekt im Sinne der objektorientierten Programmierung ist ein solcher „Software-Baustein“.
Struktur der Miniwelt 13 1 4 2 5 3 1$ 6 1$ 1$ 1$ Spielbrett Würfel Konto Zuständigkeit: getippte Zahl merken Zuständigkeit: würfeln Zuständigkeit: Geldbetrag verwalten Sichtweise: Die Miniwelt ist aus Gegenständen aufgebaut. Gegenstände können Personen, Dinge, Sachverhalte, Ereignisse, . . . sein. Jeder Gegenstand stellt eine autonome Einheit mit klar begrenzten Zuständigkeiten dar.
Struktur der Miniwelt 14 Miniwelt Gegenstand 1 4 2 5 3 1$ 6 Spielbrett 1$ 1$ 1$ Würfel Konto Eigenschaft: Zahl Eigenschaft: Augen Eigenschaft: Stand Operation: Tipp setzen Operation: werfen Operationen: Betrag einzahlen Betrag abheben Sichtweise: Gegenstände der Miniwelt haben charakteristische Eigenschaften. Mit den Gegenständen kann man bestimmte Operationen ausführen.
Grundidee der Objektorientierung 15 Miniwelt Gegenstand 1 4 2 5 3 1$ 6 1$ 1$ 1$ Objekt Modell spielbrett wuerfel. A wuerfel. B wuerfel. C konto Die Gegenstände der Miniwelt werden mit Hilfe von Objekten im Sinne der Informatik beschrieben.
Grundidee der Objektorientierung 16 Miniwelt Gegenstand 1 4 2 5 3 1$ 6 1$ 1$ 1$ Objekt Modell spielbrett wuerfel. A Zuständigkeit: getippte Zahl merken wuerfel. B Zuständigkeit: würfeln wuerfel. C konto Zuständigkeit: Geldbetrag verwalten Ein Objekt stellt eine autonome Einheit mit klar begrenzten Zuständigkeiten dar.
Attribute 17 Gegenstand Eigenschaft: Augen Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft: Stand 1 4 2 5 3 1$ 6 Operation: werfen Operationen: Betrag einzahlen Betrag abheben 1$ 1$ 1$ Objekt Miniwelt Modell spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 Attribut Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Gesamtheit der Attributwerte legt den Objektzustand fest.
Methoden 18 Gegenstand Eigenschaft: Zahl Operation: Tipp setzen Eigenschaft: Stand Eigenschaft: Augen 1 4 2 5 3 1$ 6 Operationen: Betrag einzahlen Betrag abheben Operation: werfen 1$ 1$ 1$ Miniwelt Objekt Modell spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 setzen(tipp) werfen abheben(betrag) einzahlen(betrag) Methode Das Verhalten eines Objekts wird mit Operationen / Methoden erfasst. Diese bestimmen die dynamischen Eigenschaften eines Objekts.
Klassen 19 Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 setzen(tipp) werfen abheben(betrag) einzahlen(betrag) Objekt Gleich strukturierte Objekte werden einer Klasse zugeordnet.
Klassen 20 Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand setzen(tipp) werfen abheben(betrag) einzahlen(betrag) instance of spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 setzen(tipp) werfen abheben(betrag) einzahlen(betrag) Objekt Klassen sind Baupläne für Objekte, sie legen den Typ dieser Objekte fest. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet.
Konstruktoren / Destruktoren 21 Modell Klasse TSpielbrett TWuerfel Konstruktor zahl erzeugen vernichten setzen(tipp) instance of TKonto Destruktor augen erzeugen vernichten werfen instance of stand erzeugen(betrag) vernichten abheben(betrag) einzahlen(betrag) instance of spielbrett wuerfel. B konto zahl =. . . augen = 3 stand = 9 Objekt Konstruktoren / Destruktoren sind spezielle Operationen zur Erzeugung bzw. Vernichtung von Objekten.
Klassenmethoden 22 Modell Klasse TSpielbrett TWuerfel TKonto zahl augen stand erzeugen vernichten setzen(tipp) erzeugen vernichten werfen erzeugen(betrag) vernichten abheben(betrag) einzahlen(betrag) Objekt instance of spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 setzen(tipp) werfen abheben(betrag) einzahlen(betrag) Beachte: Konstruktoren sind Klassenmethoden. Objekte verfügen nicht über diese Methoden.
Erstes objektorientiertes Modell 23 1 4 2 5 3 1$ 6 1$ 1$ 1$ Miniwelt Modell TSpielbrett TWuerfel TKonto zahl augen stand erzeugen vernichten setzen(tipp) erzeugen vernichten werfen erzeugen(betrag) vernichten abheben(betrag) einzahlen(betrag) instance of spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9
Konventionen 24 TSpielbrett TWuerfel TKonto zahl augen stand erzeugen vernichten setzen(tipp) erzeugen vernichten werfen Klassendiagramm erzeugen(betrag) vernichten abheben(betrag) einzahlen(betrag) instance of Objektdiagramm instance of spielbrett wuerfel. A wuerfel. B wuerfel. C konto zahl = 3 augen = 5 stand = 9 Klassen und Objekte werden hier mit Diagrammen der standardisierten Sprache UML (uniform modeling language) dargestellt. Beachte: Klassenbezeichner beginnen mit Großbuchstaben (hier zusätzlich mit T). Objektbezeichner beginnen jeweils mit Kleinbuchstaben.
25 Teil 2 Objekte in Aktion
26 Zielsetzung Das Chuck-A-Luck-Spiel soll mit einem bereits implementierten Modell mit Hilfe von Objekt-Aktionen simuliert werden. Wie benutzen hierzu die Entwicklungsumgebung Blue. J als Simulationswerkzeug.
27 Laden eines Modells Schritt 1: Laden Sie zunächst das Projekt „Chuck. ALuck 1“ im Verzeichnis „Blue. JProjekte“. Blue. J zeigt die Klassen des Modells an.
28 Erzeugen von Objekten Schritt 2: Erzeugen Sie die benötigten Objekte zur Simulation des Spiels: Klasse anklicken; rechte Maustaste; new. . . aufrufen; dem Objekt einen passenden Namen geben; ggf. weitere Parameter festlegen.
29 Inspektion von Objekten Schritt 3: Inspizieren Sie die erzeugten Objekte (Objekt anklicken; rechte Maustaste; Inspect aufrufen). Sie können sich so einen Überblick über die aktuellen Objektzustände verschaffen.
30 Aktivierung von Objekten Schritt 4: Beauftragen Sie die Objekte, Operationen durchzuführen: Objekt anklicken; rechte Maustaste; passende Methode aufrufen; ggf. Parameterwerte festlegen.
31 Aufgabe Simulieren Sie auf die beschriebene Weise mit Hilfe der Modell-Objekte ein gesamtes Spiel. Aktivieren Sie jeweils das passende Objekt und inspizieren Sie anschließend die Veränderung des Objektzustandes.
32 Aufgabe Verschaffen Sie sich einen ersten Einblick in eine Implementierung der Klassen zum Chuck-A-Luck-Spiel (Klasse anklicken; rechte Maustaste; Open Editor). Beachten Sie, dass hier die Programmiersprache Java zur Implementierung benutzt wird.
33 Teil 3 Gekapselte Objekte
34 Das Geheimnisprinzip besagt, dass Details einer Klasse (insbesondere ihre Implementierung) verborgen werden sollten. Ein Programmierer, der eine Klasse benutzen möchte, sollte keine Kenntnis über den internen Aufbau dieser Klasse benötigen. Ihm sollte auch nicht erlaubt sein, Interna dieser Klasse zu verwenden. Ein Vorgehen nach dieser Bedingung ist erforderlich, wenn unabhängige Software-Bausteine entwickelt werden sollen, die ggf. auch wieder ausgetauscht werden müssen.
35 Datenkapselung besagt, dass ein Objekt keinen direkten Zugriff auf die Daten ermöglicht, die mit Hilfe von Attributen verwaltet werden. Ohne Datenkapselung TKonto Mit Datenkapselung TKonto stand erzeugen(betrag) vernichten abheben(betrag) einzahlen(betrag) verbergen Zugriff erlaubt
Zugriffsmethoden 36 Um weiterhin auf Attributwerte (lesend bzw. schreibend) zugreifen zu können, werden spezielle Zugriffsmethoden benötigt. TKonto stand erzeugen(betrag) vernichten abheben(betrag) einzahlen(betrag) „stand erfragen“ „stand setzen“ Zugriffsmethoden
37 Schnittstellenspezifikation Eine Schnittstellespezifikation beschreibt sämtliche Informationen, die man zur Benutzung einer Klasse benötigt. • Zugriffsrechte auf Attribute und Methoden • Datentypen der Attribute (und eventuelle Initialisierungswerte) • Signaturen der Methoden (Parameter u. bei Funktionen der Ergebnistyp) TKonto stand – stand: integer erzeugen(betrag) vernichten abheben(betrag) einzahlen(betrag) „stand erfragen“ „stand setzen“ + create(betrag: integer) + destroy + abheben(betrag: integer) + einzahlen(betrag: int. ) + get. Stand: integer + set. Stand(betrag: integer)
38 Aufgabe Laden Sie das Modell Chuck. ALuck 2 und führen Sie das Spiel ohne Inspektion der Objekte durch. Sämtliche Attributwerte müssen mit Hilfe von Zugriffsmethoden erfragt werden.
39 Teil 3 Implementierungen von Objekten und Klassen
Zielsetzung 40 1 4 2 5 3 1$ 6 1$ 1$ 1$ Miniwelt Modell System Ziel ist es, das entwickelte objektorientierte Modell zum Chuck-A-Luck-Spiel mit Delphi zu implementieren.
41 Vorgehensweise Am Beispiel „Würfel“ soll hier gezeigt werden, wie (in Delphi) ein Objekt zu einer „neuen“ Klasse erzeugt und benutzt wird. Wir gehen von einer fertigen Benutzungsoberfläche aus, die aber noch keine Spielaktionen ausführt. Ziel ist es, die Würfel-Objekte zu implementieren und in das bestehende System zu integrieren.
42 Vorgehensweise Schritt 1: Implementierung der Klasse TWuerfel Hiermit wird der Bauplan für TWuerfel-Objekte festgelegt. Schritt 2: Erzeugung der TWuerfel-Objekte Jedes Objekt muss erzeugt werden, bevor es benutzt werden kann. Schritt 3: Aktivierung der TWuerfel-Objekte Mit Hilfe der erzeugten Objekte können jetzt die vorgesehenen Aufgaben erledigt werden. Schritt 4: Vernichtung der TWuerfel-Objekte Wenn Objekte nicht mehr benötigt werden, sollte der für sie reservierte Speicherplatz wieder freigegeben werden.
Schritt 1: Implementierung einer Klasse 43 Klassen werden als Module (Programmeinheiten) implementiert, die in Delphi in zwei Teilen beschrieben werden: Schnittstellenvereinbarung: Deklaration der Attribute und Methoden Implementierungsteil: Implementierung der Methoden unit u. Wuerfel; interface // Deklaration der // Attribute und Methoden implementation // Implementierung der // Methoden end. TWuerfel augen erzeugen vernichten werfen
44 Schritt 1: Implementierung einer Klasse unit u. Wuerfel; interface type TWuerfel = class private augen: integer; public constructor create; destructor destroy; override; procedure werfen; function get. Augen: integer; end; TWuerfel – augen: integer + create + destroy + werfen + get. Augen: integer . . . Deklaration der Attribute und Operationen
45 Schritt 1: Implementierung einer Klasse unit u. Wuerfel; interface. . . implementation constructor TWuerfel. create; begin augen : = random(6)+1; end; destructor TWuerfel. destroy; begin end; . . . Implementierung der Konstruktoren / Destruktoren
46 Schritt 1: Implementierung einer Klasse unit u. Wuerfel; interface. . . implementation. . . procedure TWuerfel. werfen; begin augen : = random(6)+1; end; function TWuerfel. get. Augen: integer; begin result : = augen; end. Implementierung der Operationen
Schritt 1: Einbindung einer Modellklasse 47 unit u. GUI; interface uses Windows, Messages, Sys. Utils, Classes, Graphics, Controls, Forms, Dialogs, Std. Ctrls, Ext. Ctrls, u. Wuerfel; type Einbindung der Klassen-Unit TGUI = class(TForm). . . Die Unit „u. Wuerfel“ enthalte die Implementierung der Klasse „TWuerfel“.
Schritt 2: Erzeugung eines Objekts 48 . . . type TGUI = class(TForm) PTitel: TPanel; GBWuerfel: TGroup. Box; GBKonto: TGroup. Box; PWuerfel. A: TPanel; PWuerfel. B: TPanel; PWuerfel. C: TPanel; PKonto: TPanel; . . . procedure Form. Create(Sender: TObject); . . . private { Private-Deklarationen } wuerfel. A: TWuerfel; public end; { Public-Deklarationen } Deklaration einer Referenzvariablen für das neue Objekt
49 Schritt 2: Erzeugung eines Objekts unit u. GUI; interface. . . implementation {$R *. DFM} Erzeugung des procedure TGUI. Form. Create(Sender: TObject); Objekts durch Aufruf begin des Konstruktors randomize; wuerfel. A : = TWuerfel. create; PWuerfel. A. Caption : = Int. To. Str(wuerfel. A. get. Augen); end; . . . end.
50 Schritt 3: Aktivierung eines Objekts procedure TGUI. BWuerfel. Werfen. Click(Sender: TObject); begin // Aktualisierung der Modell-Objekte Auftrag an das Objekt wuerfel. A. werfen; //. . . // Aktualisierung der Anzeige PWuerfel. A. Caption : = Int. To. Str(wuerfel. A. get. Augen); //. . . Anfrage an das end; Objekt
51 Schritt 4: Vernichtung eines Objekts unit u. GUI; interface. . . implementation {$R *. DFM}. . . procedure TGUI. Form. Destroy(Sender: TObject); begin wuerfel. A. free; end; . . . end. Vernichtung des Objekts durch Freigabe des Speichers
52 Aufgabe Schauen Sie sich zunächst das bereits implementierte Teilsystem im Verzeichnis „Chuck. ALuck 0 -Nur. Wuerfeln“ an. Erweitern Sie dann das bereits implementierte Teilsystem zu einem funktionsfähigen Gesamtsystem. Gehen Sie wie folgt vor, wenn Sie eine weitere Klasse implementieren und in das bereits begonnene Projekt integrieren wollen: Datei – Neu – Unit. Delphi gibt Ihnen ein Programmgerüst vor. Ändern Sie zunächst den Namen der Unit (z. B. u. Konto). Ergänzen Sie anschließend die Implementierung der betreffenden Klasse. Vergessen Sie nicht, auch die Ergänzungen in der Unit „u. GUI“ vorzunehmen (Unit einbinden; Objekte erzeugen; . . . ).
53 Teil 4 Übung: Uhr
54 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.
55 Aufgabe: Identifikation von Objekten Versuchen Sie, in einem ersten Schritt Objekte zu identifizieren. Beachten Sie, dass Objekte autonome Einheiten mit klar bestimmten Zuständigkeiten bilden sollen. Miniwelt 16: 46
56 Aufgabe: Beschreibung der Objekte Beschreiben Sie zunächst informell und dann möglichst präzise die Attribute und Methoden der identifizierten Objekte. - Überlegen Sie sich hierzu, welche Daten ein Objekt verwalten muss / durch welche Eigenschaften ein Objektzustand festgelegt wird. - Überlegen Sie sich auch, welche Operationen ein Objekt ausführen soll.
57 Identifikation von Objekten Miniwelt 16: 46 Modell stunden. Zaehler minuten. Zaehler Die Miniwelt soll mit Hilfe von zwei Objekten „stunden. Zaehler“ und „minuten. Zaehler“ beschrieben werden. Diese Objekte sind für das weiterzählen des jeweiligen Stunden- bzw. Minutenwerts zuständig.
58 Beschreibung von Objekten Miniwelt 16: 46 Modell stunden. Zaehler minuten. Zaehler max = 23 stand = 16 max = 59 stand = 46 stand. Setzen(wert) null. Setzen weiter. Zaehlen Beide Objekte „stunden. Zaehler“ und „minuten. Zaehler“ arbeiten nach demselben Prinzip: Weiterzählen, bis ein maximaler Wert erreicht ist, dann wieder bei Null beginnen.
Klassenentwurf 59 TModulo. Zaeher Klasse - max: integer - stand: integer + create(max. Wert: integer) + destroy + set. Stand(stand. Wert: int. ) + weiter. Zaehlen + null. Setzen + get. Stand: integer stunden. Zaehler minuten. Zaehler max = 23 stand = 16 max = 59 stand = 46 Objekte Es ist daher sinnvoll, eine Klasse „TModulo. Zaehler“ zu entwickeln, die ein Bauplan für Zähler ist, die modulo eines bestimmten maximalen Werts wieder bei Null beginnen.
60 Aufgabe Implementieren Sie das dargestellte (oder das selbst entwickelte) Modell.
61 Teil 5 Übung: Chiffriersystem
62 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein System zu entwickeln, mit dem der Benutzer Texte nach der Caesar-Methode verschlüsseln und wieder entschlüsseln kann.
Identifikation von Objekten 63 Miniwelt Schlüssel 3 3 SALVECAESAR VDOYHFDHVDU Quelltext Geheimtext Verschlüsselung SALVECAESAR Quelltext Entschlüsselung Die Miniwelt soll mit Hilfe eines Objekts „chiffrierer: TCaesar. Chiffrierer“ beschrieben werden. Dieses Objekt ist für die gesamte Chiffrierung nach der Caesar-Methode zuständig.
64 Aufgabe Sie sollen die Attribute und Methoden des Objekts „chiffrierer“ festlegen. Die folgenden Fragen sollen bei dieser Festlegung helfen: - Welche Daten der Miniwelt muss das Objekt „chiffrierer“ mit geeigneten Attributen verwalten? - Welche Operationen soll das Objekt „chiffrierer“ ausführen können?
65 Lösungsvorschlag TChiffrierer - quelltext: string - geheimtext: String - schluessel: integer Klasse + create + destroy + verschuesseln + entschluesseln + set. Quelltext(t: string) + get. Quelltext: sting. . . Objekt chiffrierer quelltext = ‚CAESAR‘ geheimtext = ‚FDHVDU‘ schluessel = 3
66 Aufgabe Im Verzeichnis „Chiffrierer 0“ finden Sie eine funktionsfähige Implementierung des Chiffriersystems, der kein objektorientiertes Modell zu Grunde liegt. Ändern Sie dieses System so ab, dass das Miniwelt-Modell mit Hilfe eines Objekts „chiffrierer“ beschrieben wird. Zum Vergleich finden Sie eine mögliche Lösung im Verzeichnis „Chiffrierer 1“.
67 Teil 6 Übung: Roboter
68 Zielsetzung Ziel ist es, mit Hilfe objektorientierter Modellierung ein grafisches Simulationsprogramm zu entwickeln, mit dem ein steuerbarer Modellroboter in einem Zellengitter bewegt werden kann.
69 Identifikation von Objekten Miniwelt Norden (6, 4) Westen Osten Süden Die Miniwelt soll mit Hilfe eines Objekts „roboter: TRoboter“ beschrieben werden. Dieses Objekt ist zunächst nur für die Bewegungen des Roboters (Schritt vorwärts; links drehen; rechts drehen; zurück in eine Ausgangsposition) zuständig. Wir gehen auch von einer festen 10 x 10 -Gitter. Welt aus.
70 Aufgabe Sie sollen die Attribute und Methoden des Objekts „roboter“ festlegen. Die folgenden Fragen sollen bei dieser Festlegung helfen: - Welche Eigenschaften des Roboters muss das Objekt „roboter“ mit geeigneten Attributen verwalten? - Welche Operationen soll das Objekt „roboter“ vorerst ausführen können?
71 Lösungsvorschlag TRoboter Klasse - x. Pos: integer - y. Pos: integer - richtung: t. Richtung + create + initialisieren + schritt + links. Drehen + rechts. Drehen + get. XPos: integer + get. YPos: integer + get. Richtung: t. Richtung roboter x. Pos = 3 y. Pos = 5 richtung = osten Objekt
72 Aufgabe Im Verzeichnis „Roboter 0“ finden Sie eine funktionsfähige Implementierung des Robotersystems, der kein objektorientiertes Modell zu Grunde liegt. Ändern Sie dieses System so ab, dass das Miniwelt-Modell mit Hilfe eines Objekts „roboter“ beschrieben wird. Zum Vergleich finden Sie eine mögliche Lösung im Verzeichnis „Roboter 1“. Erweiterung: Es sollen zwei Roboter in der Welt agieren.
73 Teil 7 Zusammenfassung
Objektorientierung 74 Grundkonzepte Klasse Objekt Grundideen Modellierungssprache: UML Implementierungssprache: Delphi, Java, . . .
75 Idee: Objekt als Programmeinheit Ein Objekt (eine Klasse) ist eine Einheit (Modul), bei dem Daten und die hierauf anzuwendenden Operationen gemeinsam verwaltet werden. Die Daten werden so verkapselt, dass ein Zugriff nur über Operationen erfolgen kann (Geheimnisprinzip). Diese Operationen werden in einer klar definierten Schnittstelle festgelegt.
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. .
- Slides: 77