Post on 05-Apr-2015
Implementierung objektorientierter Modelle
Klaus Becker
2009
2 mit Python, Delphi, Java
3 Teil 1
Python - Würfel
4 Beispiel 1: Würfel
Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
5 Datenmodell
Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel.
Klasse
Objekt
Datenmodell
Miniwelt
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
Methode
wuerfel.py
7 Test des Datenmodells
# Datenmodellfrom wuerfel import *wuerfel = Wuerfel()
# Testfor i in range(10): wuerfel.werfen() print(wuerfel.getAugen())
Objekte in Aktion
Erzeugung der Objekte
test_wuerfel.py
Datenmodell
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
Benutzeroberfläche zum Datenmodell
# Datenmodellfrom wuerfel import *wuerfel = Wuerfel()
# GUIfrom guiwuerfel import *guiwuerfel = GUIWuerfel(wuerfel)guiwuerfel.fenster.mainloop()
GUI-Verwaltungsobjekt
test_guiwuerfel.py
Datenmodell-Objekte
10 Teil 2
Delphi - Würfel
11 Beispiel 1: Würfel
Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
12 Datenmodell
Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel.
Klasse
Objekt
Datenmodell
Miniwelt
13
Implementierung des Datenmodells
Vorbereitung:
Neuer Ordner (z.B. "WuerfelOhneGUI")
Datei -> Neu -> Unit
Unit im neuen Ordner abspeichern (z.B. "uWuerfel.pas")
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 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 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
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
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
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
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 Teil 3
Java - Würfel
22 Beispiel 1: Würfel
Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
23 Datenmodell
Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel.
Klasse
Objekt
Datenmodell
Miniwelt
24
Implementierung des Datenmodells
Vorbereitung:
Neuer Ordner (z.B. "WuerfelOhneGUI")
Datei -> Neu -> Java
Datei im neuen Ordner abspeichern: "Wuerfel.java"
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 Test des Datenmodells
Vorbereitung:
Datei -> Neu -> Console
Datei im bereits bestehenden ("WuerfelOhneGUI") abspeichern (z.B. "TestWuerfel.java")
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
Benutzeroberfläche zum Datenmodell
Vorbereitung:
Neuer Ordner (z.B. "WuerfelMitGUI")
Datei -> Neu -> Frame
Datei im neuen Ordner ("WuerfelMitGUI") abspeichern (z.B. „GUI.java")
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
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
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 Teil 4
Python - chuck a luck
33 Beispiel 2: chuck a luck
Ziel ist es, ein System zur Simulation des Spiels "chuck a luck" zu entwickeln.
34 Datenmodell
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
Miniwelt
1$ 1$ 1$ 1$1$ 1$ 1$1$ 1$
1
2
3
4
5
631$31$
Einsatz zahlen
Spielzahl setzen
Würfel werfen
Gewinn auszahlen
Datenmodell
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 Test des Datenmodells
#-----------------------------------------------------------# Datenmodell#-----------------------------------------------------------
from model_chuckaluck import *spiel = Spiel()
#-----------------------------------------------------------# Test#-----------------------------------------------------------
# Durchführung eines Spielsspiel.einsatzZahlen()spiel.spielzahlSetzen(5)spiel.wuerfelWerfen()spiel.gewinnAuszahlen()# Ausgabe der Spielprint("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
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
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 Teil 5
Delphi - chuck a luck
40 Beispiel 2: chuck a luck
Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
41 Datenmodell
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
Miniwelt
1$ 1$ 1$ 1$1$ 1$ 1$1$ 1$
1
2
3
4
5
631$31$
Einsatz zahlen
Spielzahl setzen
Würfel werfen
Gewinn auszahlen
Datenmodell
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);beginstand := betrag;end;
...
Deklaration der Attribute
und Methoden
uKonto.pas
...
procedure TKonto.einzahlen(betrag: integer);beginstand := stand + betrag;end;
procedure TKonto.abheben(betrag: integer);beginstand := stand - betrag;end;
function TKonto.getStand: integer;beginresult := stand;end;
end.
Implementierung der Attribute und Methoden
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 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
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
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 Teil 6
Java - chuck a luck
48 Beispiel 2: chuck a luck
Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
49 Datenmodell
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
Miniwelt
1$ 1$ 1$ 1$1$ 1$ 1$1$ 1$
1
2
3
4
5
631$31$
Einsatz zahlen
Spielzahl setzen
Würfel werfen
Gewinn auszahlen
Datenmodell
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
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 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
Benutzeroberfläche zum Datenmodell
import java.awt.*;import java.awt.event.*;
public class GUI extends Frame { 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
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 Teil 7
Python - Bank
56 Beispiel 3: Bank
Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.
57 Datenmodell
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
Miniwelt
Datenmodell
SKonto-Nr.234126
Blatt 342
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 Test des Datenmodells
from datenmodell_bank import *bank = Bank()# Konten erzeugenfor i in range(10): bank.kontoErzeugen(i)# Einzahlungen und Auszahlungenbank.getKonto(4).einzahlen(100.0)bank.getKonto(4).auszahlen(40.0)bank.getKonto(7).einzahlen(40.0)# Ausgabe von Datenfor i in range(10): print('Konto mit Nummer' + str(i) + ': ' + str(bank.getKonto(i).getStand()))
Objekte in Aktion
Erzeugung der Objekte
ProjectBank.dpr
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
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
Benutzeroberfläche zum Datenmodell
#-----------------------------------------------------------# Datenmodell#-----------------------------------------------------------
from datenmodell_bank import *bank = Bank()# Konten erzeugenfor i in range(10): bank.kontoErzeugen(i) #-----------------------------------------------------------# GUI-Objekt#-----------------------------------------------------------
from gui_bank import *guibank = GUIBank(bank)guibank.fenster.mainloop()
test_gui_bank.py
63 Teil 5
Delphi - Bank
64 Beispiel 3: Bank
Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.
65 Datenmodell
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
Miniwelt
Datenmodell
SKonto-Nr.234126
Blatt 342
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
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 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
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
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
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 Teil 6
Java - Bank
73 Beispiel 3: Bank
Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.
74 Datenmodell
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
Miniwelt
Datenmodell
SKonto-Nr.234126
Blatt 342
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
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 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
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.javaErzeugung der Datenmodell-
Objekte
Erzeugung der GUI-Objekte
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