Wann ist OOP sinnvoll ?

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
prof_weirdo
User
Beiträge: 38
Registriert: Donnerstag 2. Februar 2006, 11:27
Wohnort: Bei Osnabrück

Hallo ! Ich bin neu hier im Forum und noch ein relativer Python- Anfänger.
Nachdem ich mich mit der Kernsprache beschäftigt habe wende ich mich gerade der OOP in Python zu.
Bei relativ kleinen, wenig komplexen Programmen fällt es mir auch noch relativ leicht da den Überblick zu bekommen, ganz anders sieht es da aber schon bei komplexeren Geschichten aus.

Mich würde mal interessieren was die erfahrenen Pythonprogrammierer hier im Forum zu der Frage sagen in welchen Fällen OOP mit Python wirklich angebracht ist, in welchen Fällen sie der prozeduralen Programmierung vorzuziehen ist. Mir persönlich erscheint sie im Moment noch unheimlich kompliziert und vor allem Zeitintensiv anzuwenden.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hi, neuer... ;)

Also ich denke ich bin ehr einer der prozeduralen Programmiert... d.h. aber nicht das ich kein OOP nutzte... Das macht man IMHO mit Python automatisch, schließlich ist fast alles in Python ein Objekt ;)

Meist sind die Beispiele in Büchern und Tutorial nicht so super toll...

Ein Tipp: Such im Forum mal nach "OOP" ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Eigentlich immer. Zumindest sind meine Programme und Libs eigentlich rein Objekt Orientiert. :wink:
TUFKAB – the user formerly known as blackbird
prof_weirdo
User
Beiträge: 38
Registriert: Donnerstag 2. Februar 2006, 11:27
Wohnort: Bei Osnabrück

Hi Jens !

Danke für die Antwort.

Habe mich auch schon über die Suchfunktion umgesehen. Ich habe mich halt gefragt ob OOP nicht für kleine Soloprojekte ein wenig "Overkill" ist. Mir scheint da zumindest zum momentanen Zeitpunkt der Aufwand zur Lösung eines Problems wesentlich grösser als auf dem prozeduralen Weg, aber vielleicht liegt das ja auch an der Mangelnden Übung. Vermutlich ist das auch individuell verschieden.

Ich werde mich aber auf jeden Fall weiterhin mit der OOP beschäftigen, gehöre eben nur nicht zu den Leuten die ohne zu hinterfragen alles benutzen wollen nur weil es eben da ist oder weil "man" es sollte.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich denke es kommt halt auf den Fall an und ob man schnell was spezielles machen will oder eine allgemeinere Lösung...

Generell ist es aber so, das ich persönlich auch gern für kleinere Sachen Klassen baue... Nicht weil es zwingend notwendig ist (weil man Instanzen benötigt), sondern weil man damit ganz gut Themen kapseln kann. Außerdem kann man innerhalb dieser Klasse mit globale Variablen (self.variable) arbeiten kann. Das gefällt mir einfach... Hat das jetzt was mit OOP zu tun? Ich weiß nicht...

Mir ist es meist garnicht bewust, das ich nun OOP benutzte... Wahrscheinlich würde es mir erst dann auffallen, wenn ich versuche in anderen Sprachen, die kein OOP können, das selbe zu Lösen...

Lange rede kurzer Sinn: Python ist einfach cool :lol:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
prof_weirdo
User
Beiträge: 38
Registriert: Donnerstag 2. Februar 2006, 11:27
Wohnort: Bei Osnabrück

Na gut, wahrscheinlich wirds mir auch irgendwann gefallen wenn ich das ganze erstmal ein wenig verinnerlicht habe, empfinde es im moment nunmal noch eher als verwirrend... habe die Kernsprache und Konzepte wie Funktionsdefinitionen eigentlich ohne grössere Mühe verstehen können, aber das OOP sieht mir nach etwas mehr Arbeit aus... aber es ist sicher die Mühe Wert.

Python gefällt mir auch super, hatte davor Standard C++ gelernt, dagegen ist dies hier der Himmel :wink: .
Kompottkin
User
Beiträge: 21
Registriert: Sonntag 26. Februar 2006, 03:09
Wohnort: Penzberg
Kontaktdaten:

Außerdem kann man innerhalb dieser Klasse mit globale Variablen (self.variable) arbeiten kann. Das gefällt mir einfach... Hat das jetzt was mit OOP zu tun? Ich weiß nicht...
Das kommt dem Kern der Objektorientierung schon sehr nahe.

Objektorientierte Programmierung ist nämlich genau dann sinnvoll, wenn es darum geht, ein System zu modellieren, das aus mehreren mehr oder weniger unabhängigen Objekten besteht (daher der Name), die miteinander kommunizieren. Der entscheidende Punkt dabei ist, daß jedes Objekt über einen eigenen lokalen Zustand verfügt.

Möchte man hingegen ein System modellieren, das vor allem über seinen globalen Zustand definiert wird (d.h. die Teile des Systems, soweit man überhaupt welche benennen kann, sind in hohem Maße voneinander abhängig), ist objektorientierte Programmierung nicht angebracht. In diesem Fall eignen sich rein prozedurale und funktionale Programmierung besser.

Sehr kleine Programme und Skripte bestehen in der Regel nicht aus klar trennbaren, unabhängigen Komponenten. OOP ist in solchen Fällen einfach Zeitverschwendung. Andererseits muß man natürlich bedenken, daß viele kleine Skripte irgendwann zu großen Systemen heranwachsen. Es ist daher auch nicht sinnvoll, sich einen eventuell vorhandenen Weg hin zur Objektorientierung künstlich zu verbauen (denn dort, wo sie sinnvoll ist, erhöht die objektiorientierte Programmierung die Wartbarkeit eines Systems enorm). In anderen Worten: bevor man die Regeln bricht, sollte man sie gut kennen :)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ab damit in's Wiki! Vielleicht unter http://wiki.python.de/Tutorial mit einem neuen Unterpunkt OOP? Man könnte auch die Seiten von dookie übernehmen und vervollständigen: http://de.wikibooks.org/wiki/Python-Pro ... nd_Klassen

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Das hängt vom jeweiligen problem ab.

Brauchst du gemeingültige funktionen, ist OO sinnlos.

Hast du mehrere geräte o.ä. desselben typs ist OO praktisch ein muss.


Funktion sinnvoll :

Code: Alles auswählen

def calc_blah(a,b,c):
    return a *c /(b*a)**c

OO zum beispiel wäre sinnvoll wenn du viele arten von bällen hast und diese gleich behandeln willst:

Code: Alles auswählen

baelle = [ball('federball'), ball('tennisball'), ball('baseball'), ball('fussball')]

for ball in  baelle:
    ball.setcolor("blue")
    ball.throw()
BlackJack

Wenn man von einer prozeduralen Sprache kommt, die so etwas wie structs in C oder RECORDs in Pascal kennt, dann ergibt sich "OOP" oft recht natürlich, wenn man eine Klasse als so eine struct/RECORD Definition sieht und alle Funktionen die hauptsächlich den Inhalt der Struktur ändern als Methoden schreibt.

Vererbung kann man sich dann immer noch für später aufheben, aber dieses Bündeln von zusammengehörigen Daten und Funktionen/Methoden ist ein erster Schritt, der gar nicht so verschieden vom prozeduralen Blickwinkel ist.

Umgekehrt kann man so auch "quasi-objektorientierte", d.h. recht sauber aufgebaute Programme in prozeduralen Sprachen schreiben. Also die Daten in Strukturen packen und dann Funktionen schreiben die eine Referenz auf so eine Struktur als ersten Parameter erwarten, was in Python das `self` bei Methoden ist.
prof_weirdo
User
Beiträge: 38
Registriert: Donnerstag 2. Februar 2006, 11:27
Wohnort: Bei Osnabrück

Erstmal danke an euch alle für eure Antworten die mir auf jeden Fall wertvolle Denkanstöße und Blickwinkel geliefert haben.
Habe mich gestern noch nach geeigneter Literatur/ Tutorials umgesehen und werde meine Bemühungen fortsetzen.

Nun ja, werdet wohl noch öfters mal was von mir hören, auch wenn ich es im Moment noch vorziehe in erster Linie zu lesen...
Antworten