Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Implementierung objektorientierter Modelle Klaus Becker 2009.

Ähnliche Präsentationen


Präsentation zum Thema: "Implementierung objektorientierter Modelle Klaus Becker 2009."—  Präsentation transkript:

1 Implementierung objektorientierter Modelle Klaus Becker 2009

2 2 mit Python, Delphi, Java

3 3 Teil 1 Python - Würfel

4 4 Beispiel 1: Würfel Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

5 5 Datenmodell Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel. Klasse Objekt Datenmodell Miniwelt

6 6 Implementierung des Datenmodells from random import randint class Wuerfel(object): def __init__(self): self.augen = 1 def werfen(self): self.augen = randint(1, 6) def getAugen(self): return self.augen Attribut Konstruktor Methode wuerfel.py

7 7 Test des Datenmodells # Datenmodell from wuerfel import * wuerfel = Wuerfel() # Test for i in range(10): wuerfel.werfen() print(wuerfel.getAugen()) Objekte in Aktion Erzeugung der Objekte test_wuerfel.py Datenmodell

8 8 Benutzeroberfläche zum Datenmodell from tkinter import * class GUIWuerfel(object): def __init__(self, wuerfel): # Referenzattribute zum Datenmodell self.wuerfel = wuerfel # Erzeugung des Fensters self.fenster = Tk() self.fenster.title("Würfel") self.fenster.geometry('120x110') # Anzeige des Würfels self.labelWuerfel = Label(master=self.fenster, text="1", background="#FBD975") self.labelWuerfel.place(x=45, y=40, width=30, height=30) # Button zum Auswerten self.buttonWuerfel = Button(master=self.fenster, text="Würfel werfen", \ command=self.Button_Wuerfel_Click) self.buttonWuerfel.place(x=10, y=80, width=100, height=20) def Button_Wuerfel_Click(self): # Verarbeitung der Daten self.wuerfel.werfen() # Anzeige der Daten self.labelWuerfel.config(text=str(self.wuerfel.getAugen())) Ereignisverarbeitung GUI-Objekte guiwuerfel.py Datenmodell-Objekte

9 9 Benutzeroberfläche zum Datenmodell # Datenmodell from wuerfel import * wuerfel = Wuerfel() # GUI from guiwuerfel import * guiwuerfel = GUIWuerfel(wuerfel) guiwuerfel.fenster.mainloop() GUI-Verwaltungsobjekt test_guiwuerfel.py Datenmodell-Objekte

10 10 Teil 2 Delphi - Würfel

11 11 Beispiel 1: Würfel Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

12 12 Datenmodell Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel. Klasse Objekt Datenmodell Miniwelt

13 13 Implementierung des Datenmodells Vorbereitung: Neuer Ordner (z.B. "WuerfelOhneGUI") Datei -> Neu -> Unit Unit im neuen Ordner abspeichern (z.B. "uWuerfel.pas")

14 14 Implementierung des Datenmodells unit uWuerfel; interface type TWuerfel = class private augen: integer; public constructor create; procedure werfen; function getAugen: integer; end;... Deklaration der Attribute und Methoden uWuerfel.pas... implementation constructor TWuerfel.create; begin augen := 1; randomize; end; procedure TWuerfel.werfen; begin augen := random(6)+1; end; function TWuerfel.getAugen: integer; begin result := augen; end; Klassen werden als Module (Programmeinheiten) implementiert, die in Delphi in zwei Teilen beschrieben werden: Schnittstellenvereinbarung: Deklaration der Attribute und Methoden Implementierungsteil: Implementierung der Methoden Implementierung der Attribute und Methoden

15 15 Test des Datenmodells Vorbereitung: Datei -> Neu -> Konsolen-Anwendung Projekt im bereits bestehenden ("WuerfelOhneGUI") abspeichern (z.B. "ProjectWuerfel.dpr") Projekt -> Dem Projekt hinzufügen -> "uWuerfel.pas"

16 16 Test des Datenmodells program ProjectWuerfel; {$APPTYPE CONSOLE} uses sysutils, uWuerfel in 'uWuerfel.pas'; var wuerfel: Twuerfel; i: integer; begin // Datenmodell wuerfel := TWuerfel.create; // Test for i := 0 to 9 do begin wuerfel.werfen; writeln(wuerfel.getAugen); end; readln; end. Objekte in Aktion Erzeugung der Objekte ProjectWuerfel.dpr Datenmodell

17 17 Benutzeroberfläche zum Datenmodell Vorbereitung: Neuer Ordner (z.B. "WuerfelMitGUI") Datei -> Neu -> Anwendung Projekt im neuen Ordner ("WuerfelMitGUI") abspeichern (z.B. "ProjectWuerfel.dpr") Unit "Unit1.pas" umbenennen (z.B. "uGUI.pas") Projekt -> Dem Projekt hinzufügen -> "uWuerfel.pas"

18 18 Benutzeroberfläche zum Datenmodell unit uGUI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uWuerfel; type TFGUIWuerfel = class(TForm) labelWuerfel: TLabel; buttonWuerfel: TButton; procedure buttonWuerfelClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } wuerfel: TWuerfel; public { Public-Deklarationen } end; var FGUIWuerfel: TFGUIWuerfel;... Deklaration des Referenzattributs uGUI.pas Einbindung der Datenmodell-Unit

19 19 Benutzeroberfläche zum Datenmodell... implementation {$R *.DFM} procedure TFGUIWuerfel.buttonWuerfelClick(Sender: TObject); begin wuerfel.werfen; labelWuerfel.Caption := IntToStr(wuerfel.getAugen); end; procedure TFGUIWuerfel.FormCreate(Sender: TObject); begin wuerfel := TWuerfel.create; end; end. Erzeugung der Datenmodell-Objekte uGUI.pas Implementierung der Ereignisverarbeitung

20 20 Benutzeroberfläche zum Datenmodell... type TFGUIWuerfel = class(TForm) labelWuerfel: TLabel; buttonWuerfel: TButton; procedure buttonWuerfelClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } wuerfel: TWuerfel; public { Public-Deklarationen } end;... procedure TFGUIWuerfel.FormCreate(Sender: TObject); begin wuerfel := TWuerfel.create; end;... uGUI.pas

21 21 Teil 3 Java - Würfel

22 22 Beispiel 1: Würfel Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

23 23 Datenmodell Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel. Klasse Objekt Datenmodell Miniwelt

24 24 Implementierung des Datenmodells Vorbereitung: Neuer Ordner (z.B. "WuerfelOhneGUI") Datei -> Neu -> Java Datei im neuen Ordner abspeichern: "Wuerfel.java"

25 25 Implementierung des Datenmodells public class Wuerfel { // Anfang Attribute private int augen; // Ende Attribute public Wuerfel() { } // Anfang Methoden public void werfen() { augen = (int)(Math.random() * 6 + 1); } public int getAugen() { return augen; } // Ende Methoden } Konstruktor Wuerfel.java Beachte: Der Dateiname (hier: Wuerfel.java) muss mit dem Klassennamen (hier: Wuerfel) übereinstimmen. Beachte: In einer Datei kann daher auch nur eine Klasse implementiert werden. Attribute Methoden

26 26 Test des Datenmodells Vorbereitung: Datei -> Neu -> Console Datei im bereits bestehenden ("WuerfelOhneGUI") abspeichern (z.B. "TestWuerfel.java")

27 27 Test des Datenmodells public class TestWuerfel { // Anfang Attribute // Ende Attribute // Anfang Methoden public static void main(String[] args) { // Datenmodell Wuerfel wuerfel = new Wuerfel(); // Test for (int i = 0; i < 10; i = i + 1) { wuerfel.werfen(); System.out.println(wuerfel.getAugen()); }; } // Ende Methoden } Objekte in Aktion Erzeugung der Objekte TestWuerfel.java Datenmodell

28 28 Benutzeroberfläche zum Datenmodell Vorbereitung: Neuer Ordner (z.B. "WuerfelMitGUI") Datei -> Neu -> Frame Datei im neuen Ordner ("WuerfelMitGUI") abspeichern (z.B. GUI.java")

29 29 Benutzeroberfläche zum Datenmodell import java.awt.*; import java.awt.event.*; public class GUI extends Frame { // Anfang Attribute private Label labelWuerfel = new Label(); private Button buttonWuerfel = new Button(); private Wuerfel wuerfel = new Wuerfel(); // Ende Attribute public GUI(String title) { // Frame-Initialisierung super(title); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); int frameWidth = 186; int frameHeight = 198; setSize(frameWidth, frameHeight); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int x = (d.width - getSize().width) / 2; int y = (d.height - getSize().height) / 2; … Konfiguration der GUI-Objekte GUI.java Erzeugung der Datenmodell-Objekte Erzeugung der GUI- Objekte

30 30 Benutzeroberfläche zum Datenmodell … // Anfang Methoden public void buttonWuerfel_ActionPerformed(ActionEvent evt) { // Verarbeitung der Daten wuerfel.werfen(); // Anzeige der Daten labelWuerfel.setText(Integer.toString(wuerfel.getAugen())); } // Ende Methoden public static void main(String[] args) { new GUI("GUI"); } Erzeugung des GUI- Verwaltungsobjekts GUI.java Datenmodell-Objekt in Aktion

31 31 Benutzeroberfläche zum Datenmodell... public class GUI extends Frame { // Anfang Attribute private Label labelWuerfel = new Label(); private Button buttonWuerfel = new Button(); private Wuerfel wuerfel = new Wuerfel(); // Ende Attribute... public static void main(String[] args) { new GUI("GUI");... GUI.java

32 32 Teil 4 Python - chuck a luck

33 33 Beispiel 2: chuck a luck Ziel ist es, ein System zur Simulation des Spiels "chuck a luck" zu entwickeln.

34 34 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. Miniwelt 1$ Einsatz zahlen Spielzahl setzen Würfel werfen Gewinn auszahlen Datenmodell

35 35 Implementierung des Datenmodells from random import randint class Konto(object): def __init__(self, betrag): self.stand = betrag def einzahlen(self, betrag): self.stand = self.stand + betrag def abheben(self, betrag): self.stand = self.stand - betrag... class Spiel(object): def __init__(self): self.konto = Konto(100) self.spielzahl = Spielzahl() self.wuerfelA = Wuerfel() self.wuerfelB = Wuerfel() self.wuerfelC = Wuerfel()... model_chuckaluck.py

36 36 Test des Datenmodells # # Datenmodell # from model_chuckaluck import * spiel = Spiel() # # Test # # Durchführung eines Spiels spiel.einsatzZahlen() spiel.spielzahlSetzen(5) spiel.wuerfelWerfen() spiel.gewinnAuszahlen() # Ausgabe der Spiel print("Würfel A:", spiel.wuerfelA.augen) print("Würfel B:", spiel.wuerfelB.augen) print("Würfel C:", spiel.wuerfelC.augen) print("Konto:", spiel.konto.stand) Objekte in Aktion Erzeugung der Datenmodell-Objekte test_model_chuckaluck.py Datenmodell

37 37 Benutzeroberfläche zum Datenmodell from tkinter import * class GUIChuckALuck(object): def __init__(self, spiel): # Referenzattribute zum Datenmodell self.spiel = spiel # Erzeugung des Fensters self.tkFenster = Tk() self.tkFenster.title("chuck a luck") self.tkFenster.geometry('350x145') # Rahmen Überschrift... def Button_Einsatz_Click(self): # Verarbeitung der Daten self.spiel.einsatzZahlen() # Anzeige der Daten self.labelKonto.config(text=str(self.spiel.konto.stand))... Ereignisverarbeitung GUI-Objekte gui_chuckaluck.py Datenmodell- Objekte

38 38 Benutzeroberfläche zum Datenmodell # # Datenmodell # from model_chuckaluck import * spiel = Spiel() # # GUI-Objekt # from gui_chuckaluck import * guichuckaluck = GUIChuckALuck(spiel) guichuckaluck.tkFenster.mainloop() test_gui_chuckaluck.py

39 39 Teil 5 Delphi - chuck a luck

40 40 Beispiel 2: chuck a luck Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

41 41 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. Miniwelt 1$ Einsatz zahlen Spielzahl setzen Würfel werfen Gewinn auszahlen Datenmodell

42 42 Implementierung des Datenmodells unit uKonto; interface type TKonto = class private stand: integer; public constructor create(betrag: integer); procedure einzahlen(betrag: integer); procedure abheben(betrag: integer); function getStand: integer; end; implementation constructor TKonto.create(betrag: integer); begin stand := betrag; end;... Deklaration der Attribute und Methoden uKonto.pas... procedure TKonto.einzahlen(betrag: integer); begin stand := stand + betrag; end; procedure TKonto.abheben(betrag: integer); begin stand := stand - betrag; end; function TKonto.getStand: integer; begin result := stand; end; end. Implementierung der Attribute und Methoden

43 43 Implementierung des Datenmodells unit uSpiel; interface uses uWuerfel, uKonto, uSpielzahl; type TSpiel = class private public spielzahl: TSpielzahl; konto: TKonto; wuerfelA: TWuerfel; wuerfelB: TWuerfel; wuerfelC: TWuerfel; constructor create(); procedure einsatzZahlen; procedure spielzahlSetzen(zahl: integer); procedure wuerfelWerfen; procedure gewinnAuszahlen; end;... Deklaration der Attribute und Methoden uSpiel.pas... implementation constructor TSpiel.create(); begin konto := TKonto.create(100); wuerfelA := TWuerfel.create; wuerfelB := TWuerfel.create; wuerfelC := TWuerfel.create; spielzahl := TSpielzahl.create; end; procedure TSpiel.einsatzZahlen(); begin konto.abheben(1); end;... Implementierung der Attribute und Methoden

44 44 Test des Datenmodells program ProjectChuckALuck; {$APPTYPE CONSOLE} uses sysutils, uSpiel in 'uSpiel.pas'; var spiel: TSpiel; begin // Erzeugung der Datenmodell-Objekte spiel := TSpiel.create; // Durchführung eines Spiels spiel.einsatzZahlen; spiel.spielzahlSetzen(5); spiel.wuerfelWerfen; spiel.gewinnAuszahlen; // Ausgabe der Spieldaten writeln('Wuerfel A:', spiel.wuerfelA.getAugen); writeln('Wuerfel B:', spiel.wuerfelB.getAugen); writeln('Wuerfel C:', spiel.wuerfelC.getAugen); writeln('Konto:', spiel.konto.getStand); readln; end. Objekte in Aktion Erzeugung der Objekte ProjectChuckALuck.dpr

45 45 Benutzeroberfläche zum Datenmodell unit uGUI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uSpiel; type TGUI = class(TForm) PTitel: TPanel;... private { Private-Deklarationen } spiel: TSpiel; public { Public-Deklarationen } end; var GUI: TGUI;... Deklaration des Referenzattributs uGUI.pas Einbindung der Datenmodell- Unit

46 46 Benutzeroberfläche zum Datenmodell... implementation {$R *.DFM} procedure TGUI.FormCreate(Sender: TObject); begin spiel := TSpiel.create; labelKonto.Caption := IntToStr(spiel.konto.getStand) end; procedure TGUI.ButtonEinsatzClick(Sender: TObject); begin spiel.einsatzZahlen; labelKonto.Caption := IntToStr(spiel.konto.getStand); end;... end. Erzeugung der Datenmodell-Objekte uGUI.pas Implementierung der Ereignisverarbeitung

47 47 Teil 6 Java - chuck a luck

48 48 Beispiel 2: chuck a luck Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

49 49 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. Miniwelt 1$ Einsatz zahlen Spielzahl setzen Würfel werfen Gewinn auszahlen Datenmodell

50 50 Implementierung des Datenmodells public class Konto { // Anfang Attribute private int stand = 0; // Ende Attribute public Konto(int betrag) { stand = betrag; } … Konto.java... // Anfang Methoden public void einzahlen(int betrag) { stand = stand + betrag; } public void abheben(int betrag) { stand = stand - betrag; } public int getStand() { return stand; } // Ende Methoden }

51 51 Implementierung des Datenmodells public class Spiel { // Anfang Attribute public Wuerfel wuerfelA, wuerfelB, wuerfelC; public Konto konto; public Spielzahl spielzahl; // Ende Attribute public Spiel() { wuerfelA = new Wuerfel(); wuerfelB = new Wuerfel(); wuerfelC = new Wuerfel(); konto = new Konto(100); spielzahl = new Spielzahl(); } … Spiel.java... // Anfang Methoden public void einsatzZahlen() { konto.abheben(1); }...

52 52 Test des Datenmodells public class TestCuckALuck { public static void main(String[] args) { // Erzeugung der Datenmodell-Objekte Spiel spiel = new Spiel(); // Durchführung eines Spiels spiel.einsatzZahlen(); spiel.spielzahlSetzen(5); spiel.wuerfelWerfen(); spiel.gewinnAuszahlen(); // Ausgabe der Spieldaten System.out.println("Würfel A: " + Integer.toString(spiel.wuerfelA.getAugen())); System.out.println("Würfel B: " + Integer.toString(spiel.wuerfelB.getAugen())); System.out.println("Würfel C: " + Integer.toString(spiel.wuerfelC.getAugen())); System.out.println("Konto: " + Integer.toString(spiel.konto.getStand())); } Objekte in Aktion Erzeugung der Objekte TestChuckALuck.java

53 53 Benutzeroberfläche zum Datenmodell import java.awt.*; import java.awt.event.*; public class GUI extends Frame { // Anfang Attribute private Label labelUeberschrift = new Label(); private Panel panelKonto = new Panel(null); private Label labelUeberschriftKonto = new Label(); private Button buttonEinsatz = new Button(); private Label labelKonto = new Label(); private Panel panelZahl = new Panel(null); private CheckboxGroup checkboxGroup1 = new CheckboxGroup(); … private Panel panelWuerfel = new Panel(null); private Label labelUeberschriftWuerfel = new Label(); private Button buttonWuerfel = new Button(); private Label labelWuerfelA = new Label(); private Label labelWuerfelB = new Label(); private Label labelWuerfelC = new Label(); private Spiel spiel = new Spiel(); // Ende Attribute … GUI.java Erzeugung der Datenmodell-Objekte Erzeugung der GUI- Objekte

54 54 Benutzeroberfläche zum Datenmodell … // Anfang Methoden public String getSelectedRadioButton(CheckboxGroup cg) { return cg.getSelectedCheckbox().getLabel(); } public void buttonGewinnAuszahlen_ActionPerformed(ActionEvent evt) { int gewaehltezahl = Integer.parseInt(this.getSelectedRadioButton(this.checkboxGroup1)); spiel.spielzahlSetzen(gewaehltezahl); spiel.gewinnAuszahlen(); labelKonto.setText(Integer.toString(spiel.konto.getStand())); } … // Ende Methoden public static void main(String[] args) { new GUI("GUI"); } Erzeugung des GUI- Verwaltungsobjekts GUI.java Datenmodell-Objekt in Aktion

55 55 Teil 7 Python - Bank

56 56 Beispiel 3: Bank Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.

57 57 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. Miniwelt Datenmodell S Konto-Nr Blatt 342

58 58 Implementierung des Datenmodells class Konto(object): def __init__(self, nummer): self.nr = nummer self.stand = 0.0 def einzahlen(self, betrag): self.stand = self.stand + betrag def auszahlen(self, betrag): self.stand = self.stand - betrag def getNr(self): return self.nr def getStand(self): return self.stand... datenmodell_bank.py... class Bank(object): def __init__(self): self.maxKontoNr = -1 self.konten = [] def kontoErzeugen(self, nummer): self.maxKontoNr = self.maxKontoNr + 1 konto = Konto(self.maxKontoNr) self.konten = self.konten + [konto] def getKonto(self, nummer): return self.konten[nummer] datenmodell_bank.py

59 59 Test des Datenmodells from datenmodell_bank import * bank = Bank() # Konten erzeugen for i in range(10): bank.kontoErzeugen(i) # Einzahlungen und Auszahlungen bank.getKonto(4).einzahlen(100.0) bank.getKonto(4).auszahlen(40.0) bank.getKonto(7).einzahlen(40.0) # Ausgabe von Daten for i in range(10): print('Konto mit Nummer' + str(i) + ': ' + str(bank.getKonto(i).getStand())) Objekte in Aktion Erzeugung der Objekte ProjectBank.dpr

60 60 Benutzeroberfläche zum Datenmodell from tkinter import * class GUIBank(): def __init__(self, bank): # Referenzattribute zum Datenmodell self.bank = bank # Erzeugung des Fensters self.fenster = Tk() self.fenster.title("Bank") self.fenster.geometry('240x165') # Rahmen PIN self.rahmenKonto = Frame(master=self.fenster, background="#BDE2F3") self.rahmenKonto.place(x=10, y=40, width=220, height=85) # Label mit Aufschrift Konto self.labelKonto = Label(master=self.rahmenKonto, background="gray", text="Konto") self.labelKonto.place(x=0, y=0, width=220, height=20)... Ereignisverarbeitung GUI-Objekte gui_chuckaluck.py Datenmodell- Objekte

61 61 Benutzeroberfläche zum Datenmodell... def Button_Anzeigen_Click(self): kontonummer = int(self.entryNummer.get()) self.labelStand.config(text=float(self.bank.getKonto(kontonummer).getStand())) def Button_Einzahlen_Click(self): kontonummer = int(self.entryNummer.get()) betrag = float(self.entryBetrag.get()) self.bank.getKonto(kontonummer).einzahlen(betrag) self.labelStand.config(text=float(self.bank.getKonto(kontonummer).getStand())) self.entryBetrag.delete(0, END) def Button_Auszahlen_Click(self): kontonummer = int(self.entryNummer.get()) betrag = float(self.entryBetrag.get()) self.bank.getKonto(kontonummer).auszahlen(betrag) self.labelStand.config(text=float(self.bank.getKonto(kontonummer).getStand())) self.entryBetrag.delete(0, END)... Ereignisverarbeitung GUI-Objekte gui_chuckaluck.py Datenmodell- Objekte

62 62 Benutzeroberfläche zum Datenmodell # # Datenmodell # from datenmodell_bank import * bank = Bank() # Konten erzeugen for i in range(10): bank.kontoErzeugen(i) # # GUI-Objekt # from gui_bank import * guibank = GUIBank(bank) guibank.fenster.mainloop() test_gui_bank.py

63 63 Teil 5 Delphi - Bank

64 64 Beispiel 3: Bank Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.

65 65 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. Miniwelt Datenmodell S Konto-Nr Blatt 342

66 66 Implementierung des Datenmodells unit uKonto; interface type TKonto = class private nr: integer; stand: real; public constructor create(nummer: integer); procedure einzahlen(betrag: real); procedure auszahlen(betrag: real); function getStand: real; function getNr: integer; end; implementation constructor TKonto.create(nummer: integer); begin nr := nummer; end;... uKonto.pas... procedure TKonto.einzahlen(betrag: real); begin stand := stand + betrag; end; procedure TKonto.auszahlen(betrag: real); begin stand := stand - betrag; end; function TKonto.getStand: real; begin result := stand; end; function TKonto.getNr: integer; begin result := nr; end; end.

67 67 Implementierung des Datenmodells unit uBank; interface uses uKonto, classes; {TList} type TBank = class private maxKontoNr: integer; konten: TList; public constructor create; procedure kontoErzeugen; function getKonto(nummer: integer): TKonto; end; implementation... uBank.pas... constructor TBank.create; begin maxKontoNr := -1; konten := TList.create; end; procedure TBank.kontoErzeugen; var konto: TKonto; begin maxKontoNr := maxKontoNr + 1; konto := TKonto.create(maxKontoNr); konten.insert(maxKontoNr, konto); end; function TBank.getKonto(nummer: integer): TKonto; begin result := konten[nummer]; end; end.

68 68 Test des Datenmodells program ProjectBank; {$APPTYPE CONSOLE} uses sysutils, uBank in 'uBank.pas'; var bank: TBank; i: integer; begin // Erzeugung der Datenmodell-Objekte bank := TBank.create; for i := 0 to 9 do bank.kontoErzeugen; // Einzahlungen und Auszahlungen bank.getKonto(4).einzahlen(100.0); bank.getKonto(4).auszahlen(40.0); bank.getKonto(7).einzahlen(40.0); // Ausgabe von Daten for i := 0 to 9 do writeln('Konto mit Nummer' + IntToStr(i) + ': ' + FloatToStr(bank.getKonto(i).getStand)); readln; end. Objekte in Aktion Erzeugung der Objekte ProjectBank.dpr

69 69 Benutzeroberfläche zum Datenmodell unit uGUI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uBank; type TGUI = class(TForm) PKonto: TPanel;... private { Private-Deklarationen } bank: TBank; public { Public-Deklarationen } end; var GUI: TGUI;... Deklaration des Referenzattributs Einbindung der Datenmodell- Unit uGUI.pas

70 70 Benutzeroberfläche zum Datenmodell... procedure TGUI.FormCreate(Sender: TObject); var i: integer; begin bank := TBank.create; for i := 0 to 9 do bank.kontoErzeugen; end; procedure TGUI.BEinzahlenClick(Sender: TObject); var betrag: real; kontonummer: integer; begin kontonummer := StrToInt(ENummer.text); betrag := StrToFloat(EBetrag.Text); bank.getKonto(kontonummer).einzahlen(betrag); LStand.Caption := FloatToStr(bank.getKonto(kontonummer).getStand); EBetrag.Text := ''; end;... uGUI.pas

71 71 Benutzeroberfläche zum Datenmodell... procedure TGUI.BAuszahlenClick(Sender: TObject); var betrag: real; kontonummer: integer; begin kontonummer := StrToInt(ENummer.text); betrag := StrToFloat(EBetrag.Text); bank.getKonto(kontonummer).auszahlen(betrag); LStand.Caption := FloatToStr(bank.getKonto(kontonummer).getStand); EBetrag.Text := ''; end; procedure TGUI.BKontoAnzeigenClick(Sender: TObject); var kontonummer: integer; begin kontonummer := StrToInt(ENummer.text); LStand.Caption := FloatToStr(bank.getKonto(kontonummer).getStand); end;... uGUI.pas

72 72 Teil 6 Java - Bank

73 73 Beispiel 3: Bank Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.

74 74 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. Miniwelt Datenmodell S Konto-Nr Blatt 342

75 75 Implementierung des Datenmodells public class Konto { // Anfang Attribute private int nr; private float stand; // Ende Attribute public Konto(int nummer) { nr = nummer; } // Anfang Methoden public void einzahlen(float betrag) { stand = stand + betrag; }... Alternativ: double stand Konto.java... public void auszahlen(float betrag) { stand = stand - betrag; } public int getNr() { return nr; } public float getStand() { return stand; } // Ende Methoden }

76 76 Implementierung des Datenmodells import java.util.ArrayList; public class Bank { // Anfang Attribute private int maxKontoNr; private ArrayList konten; // Ende Attribute public Bank() { maxKontoNr = -1; konten = new ArrayList(); }... Bank.java... // Anfang Methoden public void kontoErzeugen() { maxKontoNr = maxKontoNr + 1; Konto konto = new Konto(maxKontoNr); konten.add(konto); } public Konto getKonto(int nummer) { return (Konto) konten.get(nummer); } // Ende Methoden }

77 77 Test des Datenmodells public class TestBank { public static void main(String[] args) { // Erzeugung der Objekte Bank bank = new Bank(); for (int i = 0; i < 10; i = i + 1) { bank.kontoErzeugen(); }; // Einzahlungen und Auszahlungen bank.getKonto(4).einzahlen(100.0f); bank.getKonto(4).auszahlen(40.0f); bank.getKonto(7).einzahlen(40.0f); // Ausgabe der Daten for (int i = 0; i < 10; i = i + 1) { System.out.println("Konto mit Numer" + Integer.toString(i) + "i: " + Float.toString(bank.getKonto(i).getStand())); } Objekte in Aktion Erzeugung der Objekte TestBank.java

78 78 Benutzeroberfläche zum Datenmodell import java.awt.*; import java.awt.event.*; public class GUI extends Frame { // Anfang Attribute private Panel pKonto = new Panel(null); private Label lNummerText = new Label(); private TextField tfNummer = new TextField(); private Label lStandText = new Label(); private Label lStand = new Label(); private Label lKonto = new Label(); private Button bKontoAnzeigen = new Button(); private Button bKontenErzeugen = new Button(); private Button bEinzahlen = new Button(); private Button bAuszahlen = new Button(); private TextField tfBetrag = new TextField(); private Bank bank = new Bank(); // Ende Attribute … GUI.java Erzeugung der Datenmodell-Objekte Erzeugung der GUI- Objekte

79 79 Benutzeroberfläche zum Datenmodell … public void bKontenErzeugen_ActionPerformed(ActionEvent evt) { for (int i = 0; i < 10; i = i + 1) {bank.kontoErzeugen();}; } public void bKontoAnzeigen_ActionPerformed(ActionEvent evt) { int kontonummer = Integer.parseInt(tfNummer.getText()); lStand.setText(Float.toString(bank.getKonto(kontonummer).getStand())); } public void bEinzahlen_ActionPerformed(ActionEvent evt) { int kontonummer = Integer.parseInt(tfNummer.getText()); float betrag = Float.parseFloat(tfBetrag.getText()); bank.getKonto(kontonummer).einzahlen(betrag); lStand.setText(Float.toString(bank.getKonto(kontonummer).getStand())); tfBetrag.setText(""); } … public static void main(String[] args) { new GUI("GUI"); } GUI.java


Herunterladen ppt "Implementierung objektorientierter Modelle Klaus Becker 2009."

Ähnliche Präsentationen


Google-Anzeigen