Seite 1 von 1

Kann man das als OOP bezeichnen?

Verfasst: Donnerstag 24. Juli 2008, 19:10
von Andyh
Hallo

Habe mal angefangen was ganz einfaches OOP zu Programmieren.

Code: Alles auswählen

# -*- coding: utf-8 -*-

from Tkinter import *
import time
import thread
import os

class starter():
    def __init__(self):
        self.root = Tk()
        self.WMWIDTH, WMHEIGHT, WMLEFT, WMTOP = self.root.winfo_screenwidth(), self.root.winfo_screenheight(), 0, 0
        self.root.overrideredirect(1)
        self.root.title("Hofmannnetz Starter")
        self.root.geometry("%dx%d+%d+%d" % (self.WMWIDTH, WMHEIGHT, WMLEFT, WMTOP))
        self.root.frame1 = Frame(self.root)
        self.canvas=Canvas(width= 20, height= 20, bg='blue')
        self.canvas.pack(expand=YES, fill=BOTH)
        self.canvas.create_oval(-50,-50,300,300, width=2, fill='yellow')
        self.text=self.canvas.create_text(700, 150, fill = "red", text = "Willkommen im Hofmannnetz", font = "Arial 40 bold")
        self.textu=self.canvas.create_text(700, 250, fill = "red", text = "Willkommen im Hofmannnetz", font = "Arial 30 bold")
        
    def text1(self):
        self.canvas.delete(self.text)
        self.text=self.canvas.create_text(700, 150, fill = "red", text = "Willkommen im Hofmannnetz", font = "Arial 40 bold")
        self.root.after(4000, self.text2)
        
    def text2(self):
        self.canvas.delete(self.text)
        self.text=self.canvas.create_text(700, 150, fill = "red", text = "Hofmannnetz Selbsttest", font = "Arial 40 bold")
        self.textu=self.canvas.create_text(700, 250, fill = "red", text = "läuft", font = "Arial 30 bold")
        self.root.after(4000, self.text3)
        
    def text3(self):
        self.canvas.delete(self.text)
        self.canvas.delete(self.textu)
        self.text=self.canvas.create_text(700, 150, fill = "red", text = "Hofmannnetz Selbsttest", font = "Arial 40 bold")
        self.textu=self.canvas.create_text(700, 250, fill = "red", text = "fertig ~~ alles OK", font = "Arial 30 bold")
        self.root.after(4000, self.ende)

    def ende(self):
        self.canvas.delete(self.text)
        self.canvas.delete(self.textu)
        self.text=self.canvas.create_text(700, 150, fill = "red", text = "Ende", font = "Arial 40 bold")

    def gui(self):
        self.canvas.delete(self.text)
        self.canvas.delete(self.textu)
        self.root.after(40, self.text1)
        
starter = starter()
starter.gui()
mainloop()       
Es fehlen noch alles hinter der GUI, mir geht jetzt mal nur ums OOP.

Ist das für den ersten Anfang vertretbar oder was müsste / könnte man noch ändern.

Gruß
Andyh

Verfasst: Donnerstag 24. Juli 2008, 22:02
von DasIch
Wenn du anfängst durchzunummerieren machst du irgendwas falsch ;)
In diesem Fall würde ich dass alles in eine Methode packen und dann den Typ als Argument übergeben, so dass dann etwas wie starter().message('running') bei rumkommt.

Verfasst: Freitag 25. Juli 2008, 08:20
von sma
Objektorientierung ist die Idee, ein Problem in miteinander kollaborierende für Teilprobleme verantwortliche Objekte zu zerlegen, die man dann realisieren kann. Bei einer Klasse, von der es genau ein Exemplar gibt, ist das schwer zu beurteilen, ob das Programm diesem Prinzip folgt. Da du das "class starter" auch ohne Einfluss auf das Programm streichen könntest, würde ich sagen, "nein, dass ist nicht wirklich objektorientiert".

Im übrigen schreien die create_text-Zeilen nach einer eigenen Methode. Warum ist außerdem `WMWIDTH` eine Exemplarvariable, die anderen "WM"-Dinger aber nicht? Du brauchst die Breite doch sonst nirgendwo.

Stefan

Verfasst: Samstag 26. Juli 2008, 14:15
von Andyh
Hallo
Danke sma, gut erklärt.

Aber der Programmierstile stimmt doch wenigsten oder ?

Gruß
Andyh

Verfasst: Samstag 26. Juli 2008, 23:58
von Leonidas
Wenn du damit meinst, dass du gegen PEP 8 verstößt: nein, stimmt so nicht. Also erstmal PEP 8 durchlesen und dann auf den Code anwenden.