800 likes | 1.07k Vues
Implementierung objektorientierter Modelle. Klaus Becker 2009. mit Python, Delphi, Java. Teil 1. Python - Würfel. Beispiel 1: Würfel. Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln. Datenmodell.
E N D
Implementierung objektorientierter Modelle Klaus Becker 2009
Teil 1 Python - Würfel
Beispiel 1: Würfel Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
Datenmodell Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel. Klasse Objekt Miniwelt Datenmodell
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 wuerfel.py Konstruktor Attribut Methode Methode
Test des Datenmodells # 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
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())) Datenmodell-Objekte GUI-Objekte Ereignisverarbeitung guiwuerfel.py
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
Teil 2 Delphi - Würfel
Beispiel 1: Würfel Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
Datenmodell Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel. Klasse Objekt Miniwelt Datenmodell
Implementierung des Datenmodells Vorbereitung: Neuer Ordner (z.B. "WuerfelOhneGUI") Datei -> Neu -> Unit Unit im neuen Ordner abspeichern (z.B. "uWuerfel.pas")
Implementierung des Datenmodells unit uWuerfel; interface type TWuerfel = class private augen: integer; public constructor create; procedure werfen; function getAugen: integer; end; ... ... 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; Implementierung der Attribute und Methoden Deklaration der Attribute und Methoden Klassen werden als Module (Programmeinheiten) implementiert, die in Delphi in zwei Teilen beschrieben werden: Schnittstellenvereinbarung: Deklaration der Attribute und Methoden Implementierungsteil: Implementierung der Methoden uWuerfel.pas
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 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. Erzeugung der Objekte Objekte in Aktion Datenmodell ProjectWuerfel.dpr
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"
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; ... Einbindung der Datenmodell-Unit Deklaration des Referenzattributs uGUI.pas
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. Implementierung der Ereignisverarbeitung Erzeugung der Datenmodell-Objekte uGUI.pas
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
Teil 3 Java - Würfel
Beispiel 1: Würfel Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
Datenmodell Das Datenmodell ist hier sehr einfach und besteht nur aus einem Objekt einer Klasse Wuerfel. Klasse Objekt Miniwelt Datenmodell
Implementierung des Datenmodells Vorbereitung: Neuer Ordner (z.B. "WuerfelOhneGUI") Datei -> Neu -> Java Datei im neuen Ordner abspeichern: "Wuerfel.java"
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 } Wuerfel.java Attribute Konstruktor 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.
Test des Datenmodells Vorbereitung: Datei -> Neu -> Console Datei im bereits bestehenden ("WuerfelOhneGUI") abspeichern (z.B. "TestWuerfel.java")
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 } Erzeugung der Objekte Objekte in Aktion Datenmodell TestWuerfel.java
Benutzeroberfläche zum Datenmodell Vorbereitung: Neuer Ordner (z.B. "WuerfelMitGUI") Datei -> Neu -> Frame Datei im neuen Ordner ("WuerfelMitGUI") abspeichern (z.B. „GUI.java")
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; … Erzeugung der GUI-Objekte Erzeugung der Datenmodell-Objekte Konfiguration der GUI-Objekte GUI.java
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"); } } Datenmodell-Objekt in Aktion Erzeugung des GUI-Verwaltungsobjekts GUI.java
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
Teil 4 Python - chuck a luck
Beispiel 2: chuck a luck Ziel ist es, ein System zur Simulation des Spiels "chuck a luck" zu entwickeln.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. 1 4 Einsatz zahlen Spielzahl setzen Würfel werfen Gewinn auszahlen 2 5 3 3 6 Miniwelt Datenmodell
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
Test des Datenmodells #----------------------------------------------------------- # Datenmodell #----------------------------------------------------------- from model_chuckaluck import * spiel = Spiel() #----------------------------------------------------------- # Test #----------------------------------------------------------- # Durchführung eines Spiels spiel.einsatzZahlen() spiel.spielzahlSetzen(5) spiel.wuerfelWerfen() spiel.gewinnAuszahlen() # Ausgabe der Spiel print("Würfel A:", spiel.wuerfelA.augen) print("Würfel B:", spiel.wuerfelB.augen) print("Würfel C:", spiel.wuerfelC.augen) print("Konto:", spiel.konto.stand) Erzeugung der Datenmodell-Objekte Datenmodell Objekte in Aktion test_model_chuckaluck.py
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)) ... Datenmodell-Objekte GUI-Objekte Ereignisverarbeitung gui_chuckaluck.py
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
Teil 5 Delphi - chuck a luck
Beispiel 2: chuck a luck Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. 1 4 Einsatz zahlen Spielzahl setzen Würfel werfen Gewinn auszahlen 2 5 3 3 6 Miniwelt Datenmodell
Implementierung des Datenmodells unit uKonto; interface type TKonto = class private stand: integer; public constructor create(betrag: integer); procedure einzahlen(betrag: integer); procedure abheben(betrag: integer); function getStand: integer; end; implementation constructor TKonto.create(betrag: integer); begin stand := betrag; end; ... ... procedure TKonto.einzahlen(betrag: integer); begin stand := stand + betrag; end; procedure TKonto.abheben(betrag: integer); begin stand := stand - betrag; end; function TKonto.getStand: integer; begin result := stand; end; end. Deklaration der Attribute und Methoden Implementierung der Attribute und Methoden uKonto.pas
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; ... ... 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 Deklaration der Attribute und Methoden uSpiel.pas
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. Erzeugung der Objekte Objekte in Aktion ProjectChuckALuck.dpr
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; ... Einbindung der Datenmodell-Unit Deklaration des Referenzattributs uGUI.pas
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 Implementierung der Ereignisverarbeitung uGUI.pas
Teil 6 Java - chuck a luck
Beispiel 2: chuck a luck Ziel ist es, ein einfaches System zur Simulation eines Würfels zu entwickeln.
1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 1$ 3 Datenmodell Das Datenmodell ist komplexer und besteht aus Objekten, die in Beziehung stehen. 1 4 Einsatz zahlen Spielzahl setzen Würfel werfen Gewinn auszahlen 2 5 3 3 6 Miniwelt Datenmodell
Implementierung des Datenmodells public class Konto { // Anfang Attribute private int stand = 0; // Ende Attribute public Konto(int betrag) { stand = betrag; } … ... // 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 } Konto.java