79
Implementierung objektorientierter Modelle Klaus Becker 2009

Implementierung objektorientierter Modelle Klaus Becker 2009

Embed Size (px)

Citation preview

Page 1: Implementierung objektorientierter Modelle Klaus Becker 2009

Implementierung objektorientierter Modelle

Klaus Becker

2009

Page 2: Implementierung objektorientierter Modelle Klaus Becker 2009

2 mit Python, Delphi, Java

Page 3: Implementierung objektorientierter Modelle Klaus Becker 2009

3 Teil 1

Python - Würfel

Page 4: Implementierung objektorientierter Modelle Klaus Becker 2009

4 Beispiel 1: Würfel

Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

Page 5: Implementierung objektorientierter Modelle Klaus Becker 2009

5 Datenmodell

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

Klasse

Objekt

Datenmodell

Miniwelt

Page 6: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 7: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 8: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 9: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 10: Implementierung objektorientierter Modelle Klaus Becker 2009

10 Teil 2

Delphi - Würfel

Page 11: Implementierung objektorientierter Modelle Klaus Becker 2009

11 Beispiel 1: Würfel

Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

Page 12: Implementierung objektorientierter Modelle Klaus Becker 2009

12 Datenmodell

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

Klasse

Objekt

Datenmodell

Miniwelt

Page 13: Implementierung objektorientierter Modelle Klaus Becker 2009

13

Implementierung des Datenmodells

Vorbereitung:

Neuer Ordner (z.B. "WuerfelOhneGUI")

Datei -> Neu -> Unit

Unit im neuen Ordner abspeichern (z.B. "uWuerfel.pas")

Page 14: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 15: Implementierung objektorientierter Modelle Klaus Becker 2009

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"

Page 16: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 17: Implementierung objektorientierter Modelle Klaus Becker 2009

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"

Page 18: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 19: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 20: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 21: Implementierung objektorientierter Modelle Klaus Becker 2009

21 Teil 3

Java - Würfel

Page 22: Implementierung objektorientierter Modelle Klaus Becker 2009

22 Beispiel 1: Würfel

Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

Page 23: Implementierung objektorientierter Modelle Klaus Becker 2009

23 Datenmodell

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

Klasse

Objekt

Datenmodell

Miniwelt

Page 24: Implementierung objektorientierter Modelle Klaus Becker 2009

24

Implementierung des Datenmodells

Vorbereitung:

Neuer Ordner (z.B. "WuerfelOhneGUI")

Datei -> Neu -> Java

Datei im neuen Ordner abspeichern: "Wuerfel.java"

Page 25: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 26: Implementierung objektorientierter Modelle Klaus Becker 2009

26 Test des Datenmodells

Vorbereitung:

Datei -> Neu -> Console

Datei im bereits bestehenden ("WuerfelOhneGUI") abspeichern (z.B. "TestWuerfel.java")

Page 27: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 28: Implementierung objektorientierter Modelle Klaus Becker 2009

28

Benutzeroberfläche zum Datenmodell

Vorbereitung:

Neuer Ordner (z.B. "WuerfelMitGUI")

Datei -> Neu -> Frame

Datei im neuen Ordner ("WuerfelMitGUI") abspeichern (z.B. „GUI.java")

Page 29: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 30: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 31: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 32: Implementierung objektorientierter Modelle Klaus Becker 2009

32 Teil 4

Python - chuck a luck

Page 33: Implementierung objektorientierter Modelle Klaus Becker 2009

33 Beispiel 2: chuck a luck

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

Page 34: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 35: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 36: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 37: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 38: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 39: Implementierung objektorientierter Modelle Klaus Becker 2009

39 Teil 5

Delphi - chuck a luck

Page 40: Implementierung objektorientierter Modelle Klaus Becker 2009

40 Beispiel 2: chuck a luck

Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

Page 41: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 42: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 43: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 44: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 45: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 46: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 47: Implementierung objektorientierter Modelle Klaus Becker 2009

47 Teil 6

Java - chuck a luck

Page 48: Implementierung objektorientierter Modelle Klaus Becker 2009

48 Beispiel 2: chuck a luck

Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.

Page 49: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 50: Implementierung objektorientierter Modelle Klaus Becker 2009

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}

Page 51: Implementierung objektorientierter Modelle Klaus Becker 2009

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); }

...

Page 52: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 53: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 54: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 55: Implementierung objektorientierter Modelle Klaus Becker 2009

55 Teil 7

Python - Bank

Page 56: Implementierung objektorientierter Modelle Klaus Becker 2009

56 Beispiel 3: Bank

Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.

Page 57: Implementierung objektorientierter Modelle Klaus Becker 2009

57 Datenmodell

Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.

Miniwelt

Datenmodell

SKonto-Nr.234126

Blatt 342

Page 58: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 59: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 60: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 61: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 62: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 63: Implementierung objektorientierter Modelle Klaus Becker 2009

63 Teil 5

Delphi - Bank

Page 64: Implementierung objektorientierter Modelle Klaus Becker 2009

64 Beispiel 3: Bank

Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.

Page 65: Implementierung objektorientierter Modelle Klaus Becker 2009

65 Datenmodell

Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.

Miniwelt

Datenmodell

SKonto-Nr.234126

Blatt 342

Page 66: Implementierung objektorientierter Modelle Klaus Becker 2009

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.

Page 67: Implementierung objektorientierter Modelle Klaus Becker 2009

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.

Page 68: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 69: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 70: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 71: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 72: Implementierung objektorientierter Modelle Klaus Becker 2009

72 Teil 6

Java - Bank

Page 73: Implementierung objektorientierter Modelle Klaus Becker 2009

73 Beispiel 3: Bank

Ziel ist es, ein einfaches System zur Verwaltung von Bankkonten zu entwickeln.

Page 74: Implementierung objektorientierter Modelle Klaus Becker 2009

74 Datenmodell

Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen.

Miniwelt

Datenmodell

SKonto-Nr.234126

Blatt 342

Page 75: Implementierung objektorientierter Modelle Klaus Becker 2009

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

}

Page 76: Implementierung objektorientierter Modelle Klaus Becker 2009

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

}

Page 77: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 78: Implementierung objektorientierter Modelle Klaus Becker 2009

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

Page 79: Implementierung objektorientierter Modelle Klaus Becker 2009

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