Keine Ahnung von OOP

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
sub_zero
User
Beiträge: 2
Registriert: Freitag 23. Dezember 2005, 00:26

Freitag 23. Dezember 2005, 00:44

Hallo,
ich bin neu hier und arbeite mich gerade in Python ein. Die Grundlagen sind tatsächlich erstaunlich schnell erlernt, mir gefällt Python von mal zu mal besser. Ich habe nur ein Problem: ich komme von rein prozeduralen Programmiersprachen und habe keinen Schimmer von diesen objektorientierten Ansätzen. Daher konnte ich van Rossums Tutorial auch sehr gut folgen. Bis es um OOP ging.

Was ich jetzt suche, sind gute Tutorials, gern auch Bücher zum Thema. Da das ganze wohl ziemlich komplex ist würde ich Infos auf deutsch bevorzugen, englisch geht aber auch.

Gruß,
Andreas
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 23. Dezember 2005, 09:35

sub_zero hat geschrieben:Da das ganze wohl ziemlich komplex ist würde ich Infos auf deutsch bevorzugen, englisch geht aber auch.
Nein, es ist eigentlich keineswegs komplex, zumindest die Basissachen (jetzt mal abgesehen von Metaklassen und MRO, die du aber sowieso meistens nicht brauchst).

Du kannst dir eine Klasse als Container, sozusagen ein (optimalerweise) geschlossenes System vorstellen, welcher Variablen und Funktionen die auf diese Variablen zugreifen beinhaltet. Die wenigen Besonderheiten dieser Container sind, dass diese Container voneinander erben können, so erbt ein Container alle Variablen und Funktionen eines anderen Containers und kann diese auch erweitern, oder anders implementieren.

Was man aber auch beachten sollte: nicht jedes Problem ist mit OOP optimal gelöst! Die Java-leute vergessen das manchmal, aber oft sind Funktionen für ein Problem vollständig ausreichend.

Du könntest dir Wie ein Informatiker denken lernen... anschauen, welches eine Übersetzung von "How to Think Like a Computer Scientist" ist. Über diese Einleitung habe ich schon positives Feedback gehört, also wird es wohl recht gut sein.

Hope that helps.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 23. Dezember 2005, 09:39

Also du kannst auch einfach erstmal ganz normal Programmieren und OOP beiseite lassen. Nach einiger Zeit kommt das Verständniss dafür ganz von alleine ;)
Das ist auch das schöne an Python.

Ansonsten langel dich mal eine wenig durch's Wiki: http://pythonwiki.pocoo.org/Python

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Freitag 23. Dezember 2005, 10:38

Leonidas hat geschrieben:[Du könntest dir Wie ein Informatiker denken lernen... anschauen, welches eine Übersetzung von "How to Think Like a Computer Scientist" ist. Über diese Einleitung habe ich schon positives Feedback gehört, also wird es wohl recht gut sein.

Hope that helps.
Tatsächlich ist das IMHO eines der besten Werke zum Erlernen des Programmierens allgemein und speziell für Python, das ich kenne. Nur in diesem Fall wird es möglicherweise nicht allzuviel helfen, da es in der deutschen Fassung ausgerechnet ab dem Kapitel "Klassen und Methoden" nicht mehr übersetzt ist. :-/ Auf der von Leonidas verlinkten Seite gibt es aber einen Link zum englischen Original.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 23. Dezember 2005, 10:47

N317V hat geschrieben:Tatsächlich ist das IMHO eines der besten Werke zum Erlernen des Programmierens allgemein und speziell für Python, das ich kenne. Nur in diesem Fall wird es möglicherweise nicht allzuviel helfen, da es in der deutschen Fassung ausgerechnet ab dem Kapitel "Klassen und Methoden" nicht mehr übersetzt ist. :-/ Auf der von Leonidas verlinkten Seite gibt es aber einen Link zum englischen Original.
Der Autor hat gemeint, dass er demnächst die restlichen Kapitel auch noch fertigmacht. Die letzen übersetzen Kapitel sind auch erst vor kurzer Zeit dazugekommen. Schade nur, dass die URL so lang und kryptisch ist, vielleicht kann man das ja demnächst auf unserem neuen Server spiegeln.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

Freitag 23. Dezember 2005, 11:33

sub_zero hat geschrieben: Was ich jetzt suche, sind gute Tutorials, gern auch Bücher zum Thema. Da das ganze wohl ziemlich komplex ist würde ich Infos auf deutsch bevorzugen, englisch geht aber auch.
Ich würde dir "Objektorientierte Programmierung mit Python", von Michael Weigend, erschienen bei mitp, empfehlen. Ich halte dieses Buch, zusammen mit "Python ge-packt" vom selben Autor, für sehr empfehlenswert.

Objektorientierung ist eine sehr nützliche Technik, die ich als natürliche Erweiterung der klassischen Programmierung empfinde. Die oft an (Hoch-)Schulen praktizierte Überbewertung der OOP zur alleinigen Glückseligkeit führenden Technik halte ich aber für falsch. Dazu muss man sich nur die unterschiedlichen Implementierungen von OOP in verschiedenen Sprachen betrachten z.B. Python und Ruby. Starke Typisierung (z.B. Java) gegen schwache Typisierung (und duck-typing), Mehrfachvererbung oder Mixins usw. Sehr schade empfinde ich z.B. das Schwinden von Merkmalen funktionaler Sprachen (LISP, Scheme, Haskell -> lambda) in Python in kommenden Versionen.

Da Python durchgehend objektorientiert ist, auch wenn man durchaus in einem prozeduralen Stil programmieren kann, erschließen sich einem gewisse Konzepte nicht unbedingt, wie wenn man z.B. OOP in Perl lernt (wo die objektorientierung aufgepropft ist) - z.B. der Unterschied zwischen call-by-value und call-by-reference. In Python sind sämtliche Variablen Objekte und es findet fast ausschließlich eine Übergabe per Referenz statt - die Dereferenzierung erfolgt immer implizit. Variablen sind in Python Symbole die Objekte referenzieren - die Lebensdauer eines Objektes ist primär davon abhängig wielange Symbole auf sie verweisen (danach schlägt irgendwann die GarbageCollection zu).

Was ich letzten Endes sagen will, schau dir verschiedene Sprachen an - manche Konzepte sind in anderen Sprachen leichter verständlich. Ich programmiere z.B. zumeist Perl, aber eben auch Python. Zunehmend will ich mich mit Ruby beschäftigen weil es - aus meiner Sicht - die Stärken beider Sprachen vereint. Aber natürlich ist das subjektiv - jeder empfindet eine bestimmte Sprache als für ihn am nützlichsten/verständlichsten und jeder sollte die Sprache verwenden die ihm/ihr am besten liegt. Trotzdem bleibe ich bei dem Aufruf ab und an über den Gartenzaun zu schauen ;)
sub_zero
User
Beiträge: 2
Registriert: Freitag 23. Dezember 2005, 00:26

Freitag 23. Dezember 2005, 13:52

Vielen Dank für Eure Infos. "How to think like ..." scheint tatsächlich ganz gut zu sein. Ich werde mich wohl mal eine Weile damit beschäftigen. Das von Ronnie empfohlene Buch muß ich nächstes Jahr mal zur Ansicht bestellen.

Gruß und schöne Feiertage,
Andreas
Antworten