Implementierung objektorientierter Modelle Klaus Becker 2009

Preview:

Citation preview

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

Recommended