OOP verstehen?

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
ShoxX
User
Beiträge: 24
Registriert: Sonntag 15. April 2012, 22:33

Hallo Python Freunde :roll:

Ich habe mich vor Python nur so larifari mit dem Programmieren auseinander gesetzt,
gelernt habe ich mit PHP und Javascript,
dabei hat das OOP nie eine Rolle gespielt das soll sich jetzt mit Python alles ändern Python soll meine Programmiersprache Nr.1 werden die ich zu 100% verstehe.

Ich habe alle Themen direkt verstanden:
-Wie ich Klassen erstelle
-Wie ich Instanzen von den Klassen erstelle
-Wie ich Klassen vererbe
-Wie ich Operatoren überlade
usw.

Nur was ich nicht verstanden habe ist was mir die OOP bringt und wo ich sie einsetzten kann :shock:

Mal ein Beispiel wo ich sage hier macht das OOP Sinn:
Ich habe ein Rennspiel mit vielen Autos hier würde ich eine Klasse erstellen in denen ich den Autos Methoden und Attribute geben kann,
so das ich später mit jeder Instanz auf dem Spielfeld ein anderes Auto stehen habe,
ohne das OOP müsste ich ja für jedes Auto einmal den ganzen Code schreiben den ich mit der OOP nur einmal geschrieben hab :idea: ,

aber wenn ich jetzt einen User Login habe wo mir ein User seinen Namen und sein Passwort schickt,
warum zum Teufel sollte ich dafür eine Klasse schreiben,
einfach eine Funktion die prüft stimmen die Daten und den Zugriff bestätigen,
also kurz gefasst in so Sachen verstehe ich nicht wo der Vorteil mit dem OOP liegt.

Eine Hilfe wäre spitze sonst grübel ich die ganze Nacht :twisted:
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Du musst anders herum Denken.

Wie repräsentiere ich denn die Autos? Was für Eigenschaften hat es? Und wie kann ich das verhalten implementieren?

Das ist der Ansatz von OOP. Ich versuche mehr oder weniger reale Dinge abzubilden und die Eigenschaften und das Verhalten zu kapseln.

Es macht aber nicht immer Sinn, Code in Klassen zu gießen, das heißt es spricht nichts dagegen einen Userlogin ohne Klassen zu implementieren.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@ShoxX: OOP ist kein Selbstzweck — wenn es keinen Sinn macht, sollte man es auch nicht einsetzen.

Bei Benutzeranmeldungen könnte es unter Umständen Sinn machen, wenn man den Benutzer als Datentyp modelliert, wenn zu einem Benutzer mehr als nur Benutzername und Passwort gehört. Zum Beispiel wenn es noch einen Personennamen und Rechte gibt, und vielleicht einen Avatar oder ähnliche Zusatzdaten.
problembär

Man kommt sowieso nicht drumrum, sobald man GUIs baut.

Und das ist ja wohl fast Standard heute (obwohl's auch tolle Konsolenprogramme gibt wie "wget" z.B. ... obwohl dafür auch schon wieder jemand 'n GUI drumherum geschrieben hat).

Hab' auch mal ein Beispiel für ein Fenster mit der Windows-API in Assembler gesehen, also ganz ohne OOP. Aber das ist heute doch eher weniger üblich.
ShoxX
User
Beiträge: 24
Registriert: Sonntag 15. April 2012, 22:33

Okay ich habe mich jetzt noch einmal in die Thematik eingelesen,
und verstanden das ich mit der OOP meine Variablen und Funktionen nicht wahllos über das Programm verteile sondern in meine Objekte Kapsel,
also so schaffe ich Ordnung und kann den Code nachher leichter wieder verwenden,
soweit so gut das habe ich jetzt verstanden.

Aber ich kann irgendwie nicht OO denken :K :cry:

Sagen wir ich möchte einen Chat programmieren, würde ich das prozedural machen würde ich den ganzen Chat in viele kleine Probleme teilen,
ich würde zuerst einmal einen Registrierung Programmieren, dann einen Login Programmieren,
dann die Chat Funktion zum senden und erhalten von Nachrichten Programmieren und so weiter,
also ich würde alles in viele kleine Schritte Programmieren.

Wie würde das jetzt OO aussehen?

Brauche dringend Hilfe :cry: will endlich OOP und es verstehen :?

Edit:
Mir fällt hier nur ein Objekt ein und das wäre der User mit seinen Eigenschaften Name, Vorname, und so weiter,
und als Methode dann die Daten abzufragen zb. bei der Profil Ausgabe und als größere Methode dann das der User Nachrichten schreiben kann und empfangen kann.
Aber mehr Objekte finde ich nicht bei dem ganzen Chat,
aber das kann ja nicht der Sinn sein nur ein Objekt zuhaben,
ich muss doch viele haben um Sachen auch wiederverwenden zu können.
deets

Na aber sicher kannst du nen Chat OO machen. Da gibt es

- den Chat selbst, ein Objekt, dass zB server-settings und seinen Namen kennt, die Liste der User und die Liste der Messages
- ein User, der eben alles moegliche Eigenschaften wie Name, Avatar usw hat
- eine Message, die in einem Chat ist, und ebenfalls weiss, von welchem User sie kommt, und die hat einen Text
- der Text, der eine Liste von Format-Objekten beinhaltet, die Attribute (fett, kursiv, farbe) und den eigentlichen Text als String enthalten


Und so weiter, und so fort.
BlackJack

@ShoxX: Der Chat selbst könnte ein Objekt sein. Selbst wenn es nur ein 1:1 Chat ist, könnte man zumindest zwei Benutzer und den bisherigen Nachrichtenaustausch in so einem Typen zusammen fassen. Ich persönlich fange gerne mit den „unteren” Typen an, und schaue dann ob und wenn ja, wie man die zu „höheren” Typen zusammen fassen kann. Ein Typ „Nachricht” würde sich für einen Chat auch anbieten. Mit Attributen für Absender, Empfänger, Uhrzeit, Textinhalt.

Du meinst nur eine Klasse statt nur einem Objekt. Denn Objekte hast Du in Python immer ganz viele. Alles was man an einen Namen binden kann, ist in Python ein Objekt. Das schliesst auch die Funktionen in Deinen bisherigen, prozeduralen Programmen ein.

Und warum soll ein Programm mit nur einer Klasse und ansonsten Funktionen nicht sinnvoll sein können? Es kann ja umgekehrt nicht der Sinn sein alles in Klassen zu stecken, nur um dann sagen zu können es wäre OOP. Das wird es dadurch nämlich nicht. Es geht bei OOP IMHO auch nicht primär um die Wiederverwendbarkeit. Das ist „Marketing”-Unsinn. Auch prozedural oder funktional kann man wiederverwendbaren Code schreiben. Das ist kein Alleinstellungsmerkmal von OOP.

Man kann auch erst einmal mit Funktionen anfangen und wenn man dann während des Programmierens feststellt, dass bei einer Gruppe von Funktionen eine Untermenge ihrer Argumente eine Schnittmenge bildet, überlegen, ob da Argumente und Funktionen nicht sinnvoll zu Attributen und Methoden einer Klasse werden könnten.

Auf Biegen und Brechen Daten und Code in Klassen zu stopfen, nur weil man endlich mal OOP machen möchte, ist jedenfalls keine gute Idee.
Antworten