Powerpoint-Präsentation

Werbung
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.
Datenmodell
5
Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel.
Klasse
Objekt
Miniwelt
Datenmodell
6
Implementierung des Datenmodells
from random import randint
class Wuerfel(object):
def __init__(self):
self.augen = 1
wuerfel.py
Konstruktor
Attribut
def werfen(self):
self.augen = randint(1, 6)
Methode
def getAugen(self):
return self.augen
Methode
Test des Datenmodells
7
# Datenmodell
from wuerfel import *
wuerfel = Wuerfel()
# Test
for i in range(10):
wuerfel.werfen()
print(wuerfel.getAugen())
Erzeugung der Objekte
Objekte in Aktion
test_wuerfel.py
Datenmodell
8
Benutzeroberfläche zum Datenmodell
from tkinter import *
class GUIWuerfel(object):
def __init__(self, wuerfel):
# Referenzattribute zum Datenmodell
Datenmodell-Objekte
self.wuerfel = wuerfel
# Erzeugung des Fensters
self.fenster = Tk()
GUI-Objekte
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):
Ereignisverarbeitung
# Verarbeitung der Daten
self.wuerfel.werfen()
# Anzeige der Daten
self.labelWuerfel.config(text=str(self.wuerfel.getAugen()))
guiwuerfel.py
9
Benutzeroberfläche zum Datenmodell
# Datenmodell
from wuerfel import *
wuerfel = Wuerfel()
# GUI
from guiwuerfel import *
guiwuerfel = GUIWuerfel(wuerfel)
guiwuerfel.fenster.mainloop()
Datenmodell-Objekte
GUI-Verwaltungsobjekt
test_guiwuerfel.py
10
Teil 2
Delphi - Würfel
11
Beispiel 1: Würfel
Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
Datenmodell
12
Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel.
Klasse
Objekt
Miniwelt
Datenmodell
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
implementation
type
TWuerfel = class
private
Deklaration
augen: integer;
der Attribute
public
und Methoden
constructor create;
procedure werfen;
function getAugen: integer;
end;
...
constructor TWuerfel.create;
begin
augen := 1;
randomize;
end;
Klassen werden als Module
(Programmeinheiten) implementiert, die in
Delphi in zwei Teilen beschrieben werden:
function TWuerfel.getAugen: integer;
begin
result := augen;
end;
Schnittstellenvereinbarung: Deklaration der
Attribute und Methoden
Implementierungsteil: Implementierung der
Methoden
Implementierung
der Attribute und
Methoden
procedure TWuerfel.werfen;
begin
augen := random(6)+1;
end;
uWuerfel.pas
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"
Test des Datenmodells
16
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.
ProjectWuerfel.dpr
Erzeugung der Objekte
Objekte in Aktion
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;
Einbindung der Datenmodell-Unit
type
TFGUIWuerfel = class(TForm)
labelWuerfel: TLabel;
buttonWuerfel: TButton;
procedure buttonWuerfelClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
Deklaration des Referenzattributs
wuerfel: TWuerfel;
public
{ Public-Deklarationen }
end;
var
FGUIWuerfel: TFGUIWuerfel;
uGUI.pas
...
19
Benutzeroberfläche zum Datenmodell
...
implementation
{$R *.DFM}
procedure TFGUIWuerfel.buttonWuerfelClick(Sender: TObject);
begin
wuerfel.werfen;
labelWuerfel.Caption := IntToStr(wuerfel.getAugen);
end;
Implementierung der
Ereignisverarbeitung
procedure TFGUIWuerfel.FormCreate(Sender: TObject);
begin
wuerfel := TWuerfel.create;
Erzeugung der
end;
Datenmodell-Objekte
end.
uGUI.pas
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.
Datenmodell
23
Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel.
Klasse
Objekt
Miniwelt
Datenmodell
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
Wuerfel.java
Attribute
Konstruktor
Methoden
public void werfen()
{
augen = (int)(Math.random() * 6 + 1);
}
}
public int getAugen()
{
return augen;
}
// Ende Methoden
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.
26
Test des Datenmodells
Vorbereitung:
Datei -> Neu -> Console
Datei im bereits bestehenden ("WuerfelOhneGUI") abspeichern (z.B. "TestWuerfel.java")
Test des Datenmodells
27
public class TestWuerfel {
// Anfang Attribute
// Ende Attribute
}
// Anfang Methoden
public static void main(String[] args) {
Erzeugung
// Datenmodell
der Objekte
Wuerfel wuerfel = new Wuerfel();
// Test
Objekte in
for (int i = 0; i < 10; i = i + 1) {
Aktion
wuerfel.werfen();
System.out.println(wuerfel.getAugen());
};
}
// Ende Methoden
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.*;
Erzeugung der GUIObjekte
public class GUI extends Frame {
// Anfang Attribute
private Label labelWuerfel = new Label();
private Button buttonWuerfel = new Button();
private Wuerfel wuerfel = new Wuerfel();
// Ende Attribute
Erzeugung der
Datenmodell-Objekte
public GUI(String title) {
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 186;
Konfiguration der GUI-Objekte
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;
GUI.java
…
30
Benutzeroberfläche zum Datenmodell
…
// Anfang Methoden
public void buttonWuerfel_ActionPerformed(ActionEvent evt) {
// Verarbeitung der Daten
Datenmodell-Objekt in Aktion
wuerfel.werfen();
// Anzeige der Daten
labelWuerfel.setText(Integer.toString(wuerfel.getAugen()));
}
// Ende Methoden
}
public static void main(String[] args) {
new GUI("GUI");
Erzeugung des GUIVerwaltungsobjekts
}
GUI.java
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.
Datenmodell
34
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Einsatz zahlen
Spielzahl setzen
Würfel werfen
Gewinn auszahlen
Miniwelt
1
4
2
5
3
1$
6
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
#----------------------------------------------------------Erzeugung der
from model_chuckaluck import * Datenmodell-Objekte
spiel = Spiel()
#----------------------------------------------------------# Test
#----------------------------------------------------------# Durchführung eines Spiels
spiel.einsatzZahlen()
spiel.spielzahlSetzen(5)
spiel.wuerfelWerfen()
Objekte in Aktion
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)
Datenmodell
test_model_chuckaluck.py
Benutzeroberfläche zum Datenmodell
37
from tkinter import *
Datenmodellclass GUIChuckALuck(object):
Objekte
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
...
GUI-Objekte
def Button_Einsatz_Click(self):
Ereignisverarbeitung
# Verarbeitung der Daten
self.spiel.einsatzZahlen()
# Anzeige der Daten
self.labelKonto.config(text=str(self.spiel.konto.stand))
...
gui_chuckaluck.py
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.
Datenmodell
41
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Einsatz zahlen
Spielzahl setzen
Würfel werfen
Gewinn auszahlen
Miniwelt
1
4
2
5
3
1$
6
Datenmodell
42
Implementierung des Datenmodells
unit uKonto;
...
interface
procedure TKonto.einzahlen(betrag: integer);
begin
stand := stand + betrag;
end;
type
Deklaration
TKonto = class
der Attribute
private
und Methoden
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;
...
procedure TKonto.abheben(betrag: integer);
begin
stand := stand - betrag;
end;
function TKonto.getStand: integer;
begin
result := stand;
end;
Implementierung
der Attribute und
end.
Methoden
uKonto.pas
43
Implementierung des Datenmodells
unit uSpiel;
...
interface
implementation
uses uWuerfel, uKonto, uSpielzahl;
constructor TSpiel.create();
begin
konto := TKonto.create(100);
wuerfelA := TWuerfel.create;
wuerfelB := TWuerfel.create;
wuerfelC := TWuerfel.create;
spielzahl := TSpielzahl.create;
end;
type
Deklaration
TSpiel = class
der Attribute
private
und Methoden
public
spielzahl: TSpielzahl;
konto: TKonto;
wuerfelA: TWuerfel;
wuerfelB: TWuerfel;
wuerfelC: TWuerfel;
constructor create();
procedure einsatzZahlen;
procedure spielzahlSetzen(zahl: integer);
procedure wuerfelWerfen;
procedure gewinnAuszahlen;
end;
...
Implementierung
der Attribute und
Methoden
procedure TSpiel.einsatzZahlen();
begin
konto.abheben(1);
end;
...
uSpiel.pas
44
Test des Datenmodells
program ProjectChuckALuck;
{$APPTYPE CONSOLE}
uses
sysutils,
uSpiel in 'uSpiel.pas';
var
spiel: TSpiel;
begin
Erzeugung der Objekte
// Erzeugung der Datenmodell-Objekte
spiel := TSpiel.create;
// Durchführung eines Spiels
Objekte in Aktion
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;
ProjectChuckALuck.dpr
end.
45
Benutzeroberfläche zum Datenmodell
unit uGUI;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, uSpiel;
Einbindung
type
der
TGUI = class(TForm)
DatenmodellPTitel: TPanel;
Unit
...
private
{ Private-Deklarationen }
spiel: TSpiel;
public
{ Public-Deklarationen }
end;
Deklaration des Referenzattributs
var
GUI: TGUI;
...
uGUI.pas
46
Benutzeroberfläche zum Datenmodell
...
implementation
{$R *.DFM}
Erzeugung der
Datenmodell-Objekte
procedure TGUI.FormCreate(Sender: TObject);
begin
spiel := TSpiel.create;
labelKonto.Caption := IntToStr(spiel.konto.getStand)
end;
Implementierung der
Ereignisverarbeitung
procedure TGUI.ButtonEinsatzClick(Sender: TObject);
begin
spiel.einsatzZahlen;
labelKonto.Caption := IntToStr(spiel.konto.getStand);
end;
...
end.
uGUI.pas
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.
Datenmodell
49
Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.
1$ 1$
1$ 1$ 1$
1$ 1$ 1$ 1$
Einsatz zahlen
Spielzahl setzen
Würfel werfen
Gewinn auszahlen
Miniwelt
1
4
2
5
3
1$
6
Datenmodell
50
Implementierung des Datenmodells
public class Konto
{
// Anfang Attribute
private int stand = 0;
// Ende Attribute
...
// Anfang Methoden
public void einzahlen(int betrag)
{
stand = stand + betrag;
}
public Konto(int betrag)
{
stand = betrag;
}
public void abheben(int betrag)
{
stand = stand - betrag;
}
…
public int getStand()
{
return stand;
}
}
// Ende Methoden
Konto.java
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();
}
…
...
// Anfang Methoden
public void einsatzZahlen()
{
konto.abheben(1);
}
...
Spiel.java
52
Test des Datenmodells
public class TestCuckALuck {
}
public static void main(String[] args) {
// Erzeugung der Datenmodell-Objekte
Erzeugung
Spiel spiel = new Spiel();
der Objekte
// Durchführung eines Spiels
spiel.einsatzZahlen();
Objekte in
spiel.spielzahlSetzen(5);
Aktion
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()));
}
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();
Erzeugung der GUIprivate Panel panelKonto = new Panel(null);
Objekte
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();
Erzeugung der
// Ende Attribute
GUI.java
Datenmodell-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);
Datenmodell-Objekt in Aktion
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
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.
S
Konto-Nr.234126
Blatt 342
Miniwelt
Datenmodell
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
...
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
...
datenmodell_bank.py
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
Erzeugung der Objekte
for i in range(10):
print('Konto mit Nummer' + str(i) + ': ' + str(bank.getKonto(i).getStand()))
Objekte in Aktion
ProjectBank.dpr
60
Benutzeroberfläche zum Datenmodell
from tkinter import *
Datenmodellclass GUIBank():
Objekte
def __init__(self, bank):
# Referenzattribute zum Datenmodell
self.bank = bank
# Erzeugung des Fensters
self.fenster = Tk()
self.fenster.title("Bank")
GUI-Objekte
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
Ereignisverarbeitung
self.labelKonto = Label(master=self.rahmenKonto,
background="gray", text="Konto")
self.labelKonto.place(x=0, y=0, width=220, height=20)
...
gui_chuckaluck.py
Benutzeroberfläche zum Datenmodell
61
gui_chuckaluck.py
DatenmodellObjekte
...
def Button_Anzeigen_Click(self):
kontonummer = int(self.entryNummer.get())
self.labelStand.config(text=float(self.bank.getKonto(kontonummer).getStand()))
GUI-Objekte
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()))
Ereignisverarbeitung
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) ...
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
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.
S
Konto-Nr.234126
Blatt 342
Miniwelt
Datenmodell
66
Implementierung des Datenmodells
unit uKonto;
interface
...
uKonto.pas
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; ...
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.
Implementierung des Datenmodells
67
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 Objekte
// Erzeugung der Datenmodell-Objekte
bank := TBank.create;
for i := 0 to 9 do
Objekte in Aktion
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;
ProjectBank.dpr
end.
69
Benutzeroberfläche zum Datenmodell
unit uGUI;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, uBank;
Einbindung
type
der
TGUI = class(TForm)
DatenmodellPKonto: TPanel;
Unit
...
private
{ Private-Deklarationen }
bank: TBank;
public
{ Public-Deklarationen }
end;
Deklaration des Referenzattributs
var
GUI: TGUI;
...
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.
S
Konto-Nr.234126
Blatt 342
Miniwelt
Datenmodell
75
Implementierung des Datenmodells
public class Konto
{
// Anfang Attribute
private int nr;
private float stand;
// Ende Attribute
...
Alternativ:
double stand
public void auszahlen(float betrag)
{
stand = stand - betrag;
}
public Konto(int nummer)
{
nr = nummer;
}
public int getNr()
{
return nr;
}
// Anfang Methoden
public float getStand()
{
return stand;
}
// Ende Methoden
public void einzahlen(float betrag)
{
stand = stand + betrag;
}
...
}
Konto.java
76
Implementierung des Datenmodells
import java.util.ArrayList;
public class Bank
{
...
// Anfang Methoden
// Anfang Attribute
private int maxKontoNr;
private ArrayList konten;
// Ende Attribute
public void kontoErzeugen()
{
maxKontoNr = maxKontoNr + 1;
Konto konto = new Konto(maxKontoNr);
konten.add(konto);
}
public Bank()
{
maxKontoNr = -1;
konten = new ArrayList();
}
public Konto getKonto(int nummer)
{
return (Konto) konten.get(nummer);
}
// Ende Methoden
...
}
Bank.java
77
Test des Datenmodells
public class TestBank {
}
public static void main(String[] args) {
// Erzeugung der Objekte
Bank bank = new Bank();
Erzeugung der Objekte
for (int i = 0; i < 10; i = i + 1) {
bank.kontoErzeugen();
};
// Einzahlungen und Auszahlungen
Objekte in Aktion
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()));
}
}
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
…
Erzeugung der
Datenmodell-Objekte
Erzeugung der GUIObjekte
GUI.java
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