Kann man das als OOP bezeichnen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Donnerstag 24. Juli 2008, 19:10

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
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 24. Juli 2008, 22:02

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Freitag 25. Juli 2008, 08:20

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
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Samstag 26. Juli 2008, 14:15

Hallo
Danke sma, gut erklärt.

Aber der Programmierstile stimmt doch wenigsten oder ?

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 26. Juli 2008, 23:58

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten