Programmierparadigmen, OOP-Verwirrung

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. Mai 2007, 15:03

joost hat geschrieben:Und ich wollte einmal bemerkt haben, dass das, was Java erzwingt und Leute in Python auch mit if __name__=='main' machen, kein sauberes OOP ist, und dass, wenn so etwas in Tutorials auftaucht, Anfängern der Zugang zu OOP wesentlich erschwert wird.
Quatsch.

Code: Alles auswählen

class MyStarter(object):
    def __init__(self):
        print "I'm starting"

if __name__ == '__main__':
    MyStarter()
Und wo wird da OOP erwschwert? Es wird nur nicht erzwunden, das ist alles. Aber ich habe das Gefühl, dass du nicht weißt, wozu ``if __name__ == '__main__'`` überhaupt ist.

PS: Stackless ist tot und niemand hat es je empfohlen. Es ist einfach eine Spezialversion von CPython ohne Stack, aber die damaligen Entwickler beschäftigen sich nun mit PyPy.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Freitag 11. Mai 2007, 15:14

Sauberes OOP kann man nicht erzwingen weil das keine Spracheigenschaft sondern eine Denkweise, eine Art zu programmieren ist. Und ich verstehe *immer* noch nicht was Du immer mit dem ``if __name__ == '__main__':`` sagen willst!? Was ist daran unsauber? Warum sollte man diese Standardtechnik nicht in einem Tutorial zeigen? Mich stören im Gegenteil die Tutorials, die bis zum Ende immer Mmdulglobalen Code mitschleppen. Auf Modulebene gehört IMHO nur was beim Import zur Initialisierung des Modul-Objekts gehört. Wenn man das möglichst früh so einführt, merken die Leute zum Beispiel schnell, dass man Werte über die Argumente und Rückgabewerte von Funktionen austauschen muss und man sähe weniger Zugriffe auf Globales. Dieses Idiom fördert also saubere Programmierung sogar.

Alles ist Objekt ist eine Tatsache in Python. Das soll ein Grund für weniger Wiederverwendung von Code sein!? Dann sollte man wohl besser die Finger von Python lassen. ;-)

Hauptgründe gegen Wiederverwendung sind IMHO Linzenzmodelle, Bibliotheken die auf Wiederverwendbarkeit ausgelegt sind und damit so furchtbar generisch und komplex sind, dass sie niemand einsetzen möchte, der Drang etwas eigenes zu schaffen, und Sprachen wie Java, die generisches Programmieren erschweren. Keiner der Gründe ist speziell auf OOP beschränkt. Da wüsste ich nur: OOP als Allheilmittel ansehen. Es gibt einfach Sachen die sich funktional oder deklarativ wesentlich eleganter ausdrücken lassen.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Freitag 11. Mai 2007, 15:33

joost hat geschrieben:Und ich wollte einmal bemerkt haben, dass das, was Java erzwingt und Leute in Python auch mit if __name__=='main' machen, kein sauberes OOP ist, und dass, wenn so etwas in Tutorials auftaucht, Anfängern der Zugang zu OOP wesentlich erschwert wird.
So, und jetzt wird es wirklich lächerlich. Wo erzwingt Java ein Analogon zu "if __name__=='__main__'"? Und was ist daran *kein* OOP?
Und - alle Welt klagt darüber, dass auch unter Einsatz von OOP-Sprachen die Wiederverwendung von Code nicht zugenommen hat. Das kann nur an vermurksten Klassenhierarchien liegen und Sätzen wie (sorry, BlackJack):
Alles ist Objekt
.
Es ist nun mal so, ob es dir passt oder nicht, dass in Python alles ein Objekt ist.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Freitag 11. Mai 2007, 15:58

joost hat geschrieben:blub
ja?

mittlerweile ist mir in einigen threads aufgefallen das es joost scheinbar für unnötig hält die anderen wissen zu lassen was er von sich geben möchte.
joost, ich möchte dich in zukunft bitten, ich denke ich spreche für ein paar weitere user hier, ganze zusammenhängende posts zu liefern damit man wenigstens ansatzweise eine antwort geben kann. auch ist das absichtliche "verkomplizieren" mithilfe von scheinbaren "fachausdrücken" etwas was zumindest mir nicht wirklich hilft.

ich habe bis jetzt noch keinen post von dir entdeckt der nicht im nachhinein von kompetenten user entweder wiederlegt, verbessert oder um es in deiner sprache zu sagen, nullified wurde.

ich ziehe das jetzt ein wenig übertrieben auf, ich glaube auch nicht das du von allem keine ahnung hast, aber bitte lass uns zumindest ein wenig daran teilhaben ;)

lg & nichts für ungut, herby
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 11. Mai 2007, 16:03

thelittlebug hat geschrieben:mittlerweile ist mir in einigen threads aufgefallen das es joost scheinbar für unnötig hält die anderen wissen zu lassen was er von sich geben möchte.
joost, ich möchte dich in zukunft bitten, ich denke ich spreche für ein paar weitere user hier, ganze zusammenhängende posts zu liefern damit man wenigstens ansatzweise eine antwort geben kann. auch ist das absichtliche "verkomplizieren" mithilfe von scheinbaren "fachausdrücken" etwas was zumindest mir nicht wirklich hilft.
Wow. das bringt es auf den Punkt. Da schließe ich mich gleich mal an :D
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Freitag 11. Mai 2007, 16:17

8)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Freitag 11. Mai 2007, 17:04

Es ist nun mal so, ob es dir passt oder nicht, dass in Python alles ein Objekt ist.
Objekt ist für mich 'Instanz einer Klasse' - da verwenden wir Wörter wieder anders, wie es scheint.
mittlerweile ist mir in einigen threads aufgefallen das es joost scheinbar für unnötig hält die anderen wissen zu lassen was er von sich geben möchte.
joost, ich möchte dich in zukunft bitten, ich denke ich spreche für ein paar weitere user hier, ganze zusammenhängende posts zu liefern damit man wenigstens ansatzweise eine antwort geben kann. auch ist das absichtliche "verkomplizieren" mithilfe von scheinbaren "fachausdrücken" etwas was zumindest mir nicht wirklich hilft.
Das hier finde ich unfair. Ich versuche nicht, 'scheinbare Fachausdrücke' zu verwenden. Wenn ich 'Klasse' oder 'property' oder was auch immer schreibe, bemühe ich mich schlicht um Genauigkeit.

Das beruht auch auf schlechten Erfahrungen mit Sätzen wie: 'Python verwendet als Basis Unicode'. Lange habe ich gedacht, dass das unicode-Objekt also vielleicht utf-8 oder irgendeine 32-Bit-Implementierung ist. Wenn hier von codepoints die Rede gewesen wäre, hätte ich das längst früher verstanden. Insofern werde ich dabei bleiben, solche Begriffe einzusetzen. Und das war nicht ungut. Nix mit 'Nix für ungut'.

Und das hier:
ich habe bis jetzt noch keinen post von dir entdeckt der nicht im nachhinein von kompetenten user entweder wiederlegt, verbessert oder um es in deiner sprache zu sagen, nullified wurde.
stimmt einfach nicht.
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Freitag 11. Mai 2007, 17:12

joost hat geschrieben:
Es ist nun mal so, ob es dir passt oder nicht, dass in Python alles ein Objekt ist.
Objekt ist für mich 'Instanz einer Klasse' - da verwenden wir Wörter wieder anders, wie es scheint.
Mir scheint, du verwendest Wörter falsch.
Das beruht auch auf schlechten Erfahrungen mit Sätzen wie: 'Python verwendet als Basis Unicode'. Lange habe ich gedacht, dass das unicode-Objekt also vielleicht utf-8 oder irgendeine 32-Bit-Implementierung ist.
Der Satz ist auch sehr verwirrend, man könnte auch soweit gehen und ihn als falsch bezeichnen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Freitag 11. Mai 2007, 17:17

Ich habe schon in einem anderen Thread darum gebeten, das solch extrem abweichenden, überhaupt nichts bringenden Disskussionen um Dinge, die absolut uns überhaupt nichts mit dem Thema zu tun haben, entweder verschoben werden oder einfach gelöscht.

Nichts desto trotz lasse ich hier noch ein paar Kommentare ab, weil ich hoffe, das ein tüchtiger Moderator mich auch diesmal erhört *grinz*
(nebenbei... dieser Post darf auch einfach gellöscht werden!)
joost hat geschrieben:
mittlerweile ist mir in einigen threads aufgefallen das es joost scheinbar für unnötig hält die anderen wissen zu lassen was er von sich geben möchte.
joost, ich möchte dich in zukunft bitten, ich denke ich spreche für ein paar weitere user hier, ganze zusammenhängende posts zu liefern damit man wenigstens ansatzweise eine antwort geben kann. auch ist das absichtliche "verkomplizieren" mithilfe von scheinbaren "fachausdrücken" etwas was zumindest mir nicht wirklich hilft.
Das hier finde ich unfair.
Die wahrheit ist immer unfair!
Ich versuche nicht, 'scheinbare Fachausdrücke' zu verwenden. Wenn ich 'Klasse' oder 'property' oder was auch immer schreibe, bemühe ich mich schlicht um Genauigkeit.
Oha! Da hast du aber die schlimmsten Beispiele genommen...
Das beruht auch auf schlechten Erfahrungen mit Sätzen wie: 'Python verwendet als Basis Unicode'. Lange habe ich gedacht, dass das unicode-Objekt also vielleicht utf-8 oder irgendeine 32-Bit-Implementierung ist. Wenn hier von codepoints die Rede gewesen wäre, hätte ich das längst früher verstanden. Insofern werde ich dabei bleiben, solche Begriffe einzusetzen. Und das war nicht ungut. Nix mit 'Nix für ungut'.
Wenn du mir eventuell noch erklären könntestm was `codepoints` sind, weiß ich eventuell mal, wovon du redest. Und das ist *kein* getue, um dich zu verarschen. Es ist so! Ich kann damit nichts anfangen und zähle mich mal einfach nicht zu den dümmsten Benutzern auf dieser Welt.
Und das hier:
ich habe bis jetzt noch keinen post von dir entdeckt der nicht im nachhinein von kompetenten user entweder wiederlegt, verbessert oder um es in deiner sprache zu sagen, nullified wurde.
stimmt einfach nicht.
Ohne Beweise glaube ich nichts.

Gut... `keinen` könnte man auch in `kaum einen` bzw. `fast keinen` umwandeln. Ab und zu hat einfach keiner auf deine Posts geantwortet... da müssen wir Fair bleiben.

PS: an den netten Moderator: DANKEE!
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Freitag 11. Mai 2007, 17:48

Wenn du mir eventuell noch erklären könntestm was `codepoints` sind, weiß ich eventuell mal, wovon du redest. Und das ist *kein* getue, um dich zu verarschen. Es ist so! Ich kann damit nichts anfangen und zähle mich mal einfach nicht zu den dümmsten Benutzern auf dieser Welt.
Sehr unterhaltsame Kurzinfo:
http://www.joelonsoftware.com/articles/Unicode.html
Er schreibt 'code point'.
Zuletzt geändert von joost am Freitag 11. Mai 2007, 18:06, insgesamt 1-mal geändert.
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. Mai 2007, 18:03

joost hat geschrieben:Das beruht auch auf schlechten Erfahrungen mit Sätzen wie: 'Python verwendet als Basis Unicode'. Lange habe ich gedacht, dass das unicode-Objekt also vielleicht utf-8 oder irgendeine 32-Bit-Implementierung ist.
Was aber unwahrscheinlich ist, denn UTF-8 ist eben nicht Unicode.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Freitag 11. Mai 2007, 18:13

Ja, ich war hier ziemlich begriffsstutzig. Den Artikel aus obigem Link kenne ich schon lange, kam aber irgendwie nicht auf die Idee, dass diese Codepoints so direkt eingesetzt werden würden wie Python es tut. Finde ich Klasse, das ist praktisch und zukunftssicher. Aber man denkt doch immer irgendwie gleich an encodings.
Zuletzt geändert von joost am Freitag 11. Mai 2007, 18:32, insgesamt 1-mal geändert.
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Freitag 11. Mai 2007, 18:30

Hallo joost,
wir hatten ja gleich zu Anfang mit einenader zu tun gehabt, deshalb kennen wir uns ja schon. :wink:

Ich bitte dich im Zukunft solche Threads wie diese zu unterlassen.

Die Anweisung

Code: Alles auswählen

def _main():
    pass
    
if __name__=='__main__':
    _main
Hat natürlich seinen Sinn! Es kann z.b als Testumgebung für lauffähige Programme dienen. Auch möchte ich erwähnen, dass man nicht immer den Zusammenhang deiner Aussgen nachvollziehen kann. Auch hier bitte ich dich dir ein bisschen mühe zugeben.

Danke&Gruss
pyStyler
BlackJack

Freitag 11. Mai 2007, 19:07

@joost: Ein Objekt im OOP-Sinn als 'Instanz einer Klasse' zu definieren, kann deshalb schon nicht stimmen, weil man für OOP nicht zwingend Klassen braucht. Es gibt auch prototypbasierte Sprachen die nur Objekte haben. Heisst ja auch objektorientierte Programmierung und nicht klassenorientierte Programmierung.

Python geht einen Mittelweg in dem Klassen auch Objekte sind, sich aber trotzdem von ihren Instanzen technisch unterscheiden. Wenn man Klassen als "Bauplan" oder "Blaupause" für Objekte ansieht, dann sind die "Klassen" von Klassen-Objekten in Python Metaklassen.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Freitag 11. Mai 2007, 19:22

Danke BlackJack, das ist erhellend. Von solch prototypbasierten Sprachen hab ich bisher nichts gehört - das vergesse ich aber bestimmt nicht wieder. Und Respekt vor Deinen Codes.

Denn das hier ist mein letzter Post. Ich habe diesen Thread ziemlich provokant gestartet, das war mir klar. Ein Hieb auf eine ganze Menge Leute. Aber was dann passiert ist, geht für mich nicht.

@Leonidas Es tut mir leid, dass jetzt Deine Einhilfsarbeit für die Bedienung von paste.pocoo als für Dich verlorene Zeit zu sehen ist, danke nochmal dafür. Dank an allen Versendern freundlicher Antworten (dabei war auch EnTeQuak heute morgen noch), insofern auch noch einmal an birkenfeld. Macht's gut (Bitte löscht meinen account).
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
Antworten