Python lernen - wie wichtig ist oop?

hol

Neu angemeldet
Registriert
20 Dez. 2017
Beiträge
13
Aus Spass habe ich mit Python angefangen. Datentypen, Schleifen, Verzweigungen, Funktionen ...habe ich gelernt. Kein Hexenwerk. Im naechsten Kapitel geht es dann um oop. Mach(lern)bar - bei deutlich zu steigerndem Aufwand.
Gestolpert bin ich dann aber ueber einen Satz: "OOP macht vor allem bei sehr grossen Projekten Sinn".
Meine Ziele mit Python sind jedoch niedriger - wenig "smart home", etwas "raspberry", vlt. mal ein kleines script fuer Foto/bearbeitung/verwaltung, ansonsten - wie gesagt - Spass haben.
Sollte ich mich also durch oop "quaelen"?
Wird das Thema Python und Datenbanken fuer mich wichtig? (oder kann ich diese Frage nur selbst beantworten?)
Danke fuer Anregeungen und Kommentare.
 
Gestolpert bin ich dann aber ueber einen Satz: "OOP macht vor allem bei sehr grossen Projekten Sinn".
Kein Wunder. Das ist ein seltsamer Satz. OOP Ist ein Design-Tool und Programmier-Paradigma. Ob das Sinn macht, hängt von deinem Problem ab, nicht der Projektgröße. Es würde ja auch keiner sagen: »Ein Hammer macht vor allem bei sehr großen Nägeln Sinn.«

wenig "smart home", etwas "raspberry", vlt. mal ein kleines script fuer Foto/bearbeitung/verwaltung
Das klingt recht stark nach »shell scripting on steroids«. Das geht scriptig (prozedural) recht gut. Ich hab mal eine komplette Skriptesammlung rund um Mercurial auf die Art geschrieben, iirc ohne dabei eine einzige Klasse zu verwenden. War erstaunlich schmerzfrei, obwohl ich’s heute sicher anders machen würde.

Quälen macht jedenfalls keinen Sinn. Fang an zu basteln und behalte im Hinterkopf, dass Klassen äußerst praktisch sind, um Daten (Attribute) und zugehörige Funktionalität (Methoden) zusammenzuschnüren. Wenn du nur soweit in die OOP-Welt reinschnupperst, ist das schon ein großer Schritt.

Wird das Thema Python und Datenbanken fuer mich wichtig? (oder kann ich diese Frage nur selbst beantworten?)
Das musst du tatsächlich selbst beantworten. Hängt komplett von deinen Projekten ab. Wenn du zu dem Punkt kommst und eine relationale DB haben willst, schau dir auf jeden Fall an.
 
  • Thread Starter Thread Starter
  • #3
Danke Brother John,
ich interpretiere mal fuer mich:
oop ist ein "nice to have" - deutsch = "gut, wenn man es kann". Ordnung/Uebersichtlichkeit wird durch Klassen unterstuetzt. Ich gehe das Thema oop also an (soweit wie ich komme). Da Python meine erste Programiersprache ist und ich die 60 schon deutlich ueberschritten habe...kann ich zumindest den Faktor "Zeit" einbringen...
 
OOP macht vor allem dann Sinn wenn man richtige Softwareentwicklung lernen will. Sich nur die entsprechenden Sprachkonstrukte anzuschauen, ohne die Hintergründe zu kennen bringt nicht viel. Ich weiß natürlich nicht wie gut dein tutorial/Buch die Konzepte erklärt, aber zumindest die Artikel die ich so gelesen habe gehen oft davon aus dass man weiß was oop ist.
Ich denke fürs erst musst du nicht unbedingt wissen wie man eigene Klassen etc. schreibt, ein paar Grundlagen von oop in Python können aber nicht schaden, denn es gibt sicher genügend Bibliotheken die irgendwelche Objekte als Schnittstelle verwenden. Und wenn ich eines über python gelernt habe, dann ist es dass man andauernd Bibliotheken von anderen einbindet. Dann solltest du zumindest damit klar kommen ein Objekt zu erzeugen und eine Methode aufzurufen die ein Objekt als Parameter bekommt oder ähnliches.
 
Hatte OOP zusammengefasst so in meinem Hinterstübchen abgespeichert:
"Macht Sinn wenn ich mit einer Sache in der Form in der sie das erste mal auftrat oder in leicht abgewandelter Form öfter als 2-3x mal was machen will"

Ich fand "das Auto Beispiel" als Erklärung zu OOP von Anfang an sehr gut verständlich:
Ein Automobil ist je nach Sichtweise ein mehr oder weniger komplexes Objekt, das sich beispielsweise stets durch folgende Ausprägungen (Werte) von Eigenschaften (Attribute) beschreiben lässt:

Hersteller
Typ
Farbe
Zulassungsjahr

Diese Eigenschaften repräsentieren also die Daten des Objekts. Ebenso verfügt ein Auto stets über bestimmte Fähigkeiten, d. h., es kann bestimmte Funktionen/Aufgaben ausführen. Sie werden mit Blick auf die objektorientierte Programmierung als Methoden bezeichnet. Mit Bezug auf das Beispiel sind folgende Fähigkeiten (Methoden) von Interesse:

Beschleunigen
Bremsen

Unter Objekten versteht man nunmehr die Zusammenfassung von Daten und Funktionen. Dabei gehört ein konkretes Objekt zu einer Klasse. Eine Klasse wiederum ist der Bauplan für die Objekte. Mit Blick auf die Abbildung haben wir eine allgemeine (abstrakte) Klasse Auto vorliegen. Konkretisiert man ein bestimmtes Auto anhand seiner spezifischen Werte, so gelangt man zum Objektbegriff. Konkret: Das Fahrzeug mit dem Kennzeichen EF-LN-88 ist ein konkretes Objekt der Klasse Auto. Dabei weist es die folgenden konkreten Werte der o. g. Eigenschaften auf:

Hersteller = Toyota;
Typ = Avensis,
Farbe = grau,…

Gleichwohl verfügt auch dieses konkrete Automobil über die Fähigkeiten (Methoden) zu beschleunigen und zu bremsen. Mittels der objektorientierten Programmierung wird also versucht, die reale Welt – soweit wie das für die Lösung der anstehenden Probleme notwendig ist – möglichst exakt (1:1) abzubilden. Methoden dienen auch gleichzeitig dazu, die Werte bestimmter Eigenschaften bei Bedarf zu modifizieren. So könnte eine Methode lackieren aus dem grauen PKW das farbenfrohe blaue Modell machen (Abb. 2).

Von hier geklaut:
 
Man kann OOP auch gut für eigene Datenstrukturen/Datenklassen hernehmen die aufeinander aufbauen. Beispiel fürs Zeichnen, angefangen mit einer Klasse Punkt die dann weiterverwendet wird um neue Klassen damit aufzubauen.

Die Klasse "Point"/Punkt mit den Attributen:
x + y + color

Die Klasse "Linie" die zwei Typen von Point enthält:
point1 (x,y) + point2 (x,y) (Startpunkt -> Endpunkt) + color (eigenes Attribute unabhängig von Point),
Edit: Oder wahlweise eine Liste von Punkten.

Die Klasse Viereck die die Klasse "Linie" einbindet:
Linie1 (x, y, color), Linie2 (x,y, color..), Linie3, Linie4 +
eigenes Attribut "Füllfarbe"

Um es noch etwas spannender zu machen, die Klasse "Polygon":
Anzahl Linien/Pfade (Beispiel 6 usw...) als Attribut "lineCount".
Linie1, Linie2, Linie3, Linie4, Linie5, Linie6 usw....

Ich hoffe das Beispiel macht Sinn für dich.

Das sind alles Datenstrukturen die mit Klassen arbeiten. Vererbung (inheritance) findet hier noch nicht statt - da finde ich das Auto/PKW Beispiel von Saddy sehr gut.
 
Zuletzt bearbeitet:
Ja, paar OOP Grundlagen sind nicht verkehrt. Aber da brauchst du nicht tiefer einsteigen.
Datenbanken wirst du dich vermutlich schon eher zwangsläufig mit beschäftigen müssen. Ist aber relativ easy. Tipp: SQLite bringt dich sehr, sehr weit, lass dir nicht sofort ein "richtiges" Datenbankmanagement System aufschwatzen weil es schneller sei.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #8
Danke fuer reichlich input.
Was hat's gebracht?
Meine anfaengliche Angst vor oop wandelt sich (langsam) zu "Lust auf oop", oder realistisch formuliert in "Ja, ich will".

Das "Auto-Beispiel" von saddy kannte ich schon aus meinem Lehrbuch (T. Theis - Einstieg in Python), wird dort in aehnlicher Form gebracht. Ich versuche gerade, um es nicht nur schematisch zu lernen, dieses Modell auf "Wohnung" zu uebertragen.
Den Gedanken von BurnerR zu SQLite muss ich noch vertiefen. Bisher hatte ich immer an MariaDB gedacht - und ueberlegt - ob mir Python-Datenbankkenntnisse bei meinem wordpress blog nuetzlich sein koennten.
 
Ich geb mal noch'n Ansatz:

Wenn du eine relationale Datenbank (MySQL, SQLite usw.) hast. dann stell Dir das so vor:

DB <-> OOP-Projekt
Tabelle = Klasse
Spalte = Attribut
Datensatz = Instanz der Klasse mit zugewiesenen Werten
Stored Procedure = Methode

Als ich vor 15 Jahren mal LAMP programmiert hab, hatte ich tatsächlich angefangen, dass auch so umzusetzen, d.h. ich hab die Datenbankstruktur über Klassen auch so im PHP abgebildet. Bei und ist das bereits über das Framework so vorgegeben.

Die o.g. Erklärungen mit dem Auto und dem Kreis sind zwar schön, aber mit dem Ansatz bin ich am Anfang jedesmal auf die Nase gefallen. Die intensive Thematisierung der Vererbung, und genau in diese Richtung gehen die Erklärungen, sind für OOP-Anfänger bzw. Einsteigerprojekte ziemlich irrelevant.
 
Bisher hatte ich immer an MariaDB gedacht - und ueberlegt - ob mir Python-Datenbankkenntnisse bei meinem wordpress blog nuetzlich sein koennten.

MariaDB ist MySql, bringt dir bei Wordpress dann natürlich auch was, da die Befehle die gleichen sind. WP hat viele Helfer für die Datenbank (get_field('..'), get_option('..')) manchmal sind ordentliche Kenntnisse aber nicht verkehrt. Auch SQLite ist schon mal ein super schritt, hat den Vorteil das du weniger einzurichten brauchst, SQLite kann bestimmte Sachen von MySQL/SQL nicht, daran solltest du aber Anfangs nicht scheitern, denke ich.
 
Meine persönliche Meinung zu OOP:
Entweder ist es in erster Linie Spielerei bzw. um sein Programm ein wenig aufzuräumen (was aber auch ohne OOP ginge) oder es hat einen sehr großen Mehraufwand für relativ wenig Nutzen für kleinere Projekte. Ohne weiterführendes Wissen und Erfahrung wie z.B. Prinzip steht OOP schnell mal mehr im Weg als es hilft.
Man sollte den Fokus eher auf das entkoppeln legen (was mit oder ohne OOP geht). Entkoppeln bedeutet, dass verschiedene Programmteile voneinander nichts wissen müssen um zu funktionieren und nur über möglichst kleine Schnittstellen interagieren.
Gerade Vererbung wird bei OOP gerne groß und breit besprochen, aber Vererbung bedingt eine sehr starke Koppelung und ist daher ein problematisches Werkzeug wenn es nicht sehr präzise eingesetzt wird.


btw. geht der Trend seit einigen Jahren auch weg von "OOP everywhere" und mehr hin zu "Data-centric" bzw. Spaghetticode (:D) und ich rechne mit einem weiter steigenden Functional Programming Trend in den nächsten Jahren.
Meine Lieblings-Sprache Julia z.B. unterstützt zwar diverse OOP Mechanismen, aber z.B. keine Klassen.
 
Zuletzt bearbeitet:
Mit den Echtweltbeispielen à la Auto bin ich auch latent unglücklich. Einerseits sind sie sehr eingängig, andererseits hat das nur bedingt etwas damit zu tun, wie man in einer gesunden Codebasis Klassenhierarchien baut. Dass sich die echte Welt auch nur annähernd 1:1 in Klassen abbildet, habe ich noch nie gesehen. Los geht’s meistens damit, wie man Daten verarbeiten will. Und daraus ergeben sich dann darauf zugeschnittene Klassen.

Sind wir uns eigentlich einig, wo OOP anfängt und aufhört? Ich meine da mehr oder weniger subtile Unterschiede zu erkennen. Quick Google nach Alan Kay:
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.
Hm. Also Methodenaufrufe, private Daten und Polymorphie … so grob. theSplit, du bist raus. :D Das Point/Line-Beipspiel würde ich tatsächlich nicht als OOP ansehen. Eher strukturierte Datenhaltung, Komposition von Produkttypen. Für OOP fehlt imo zumindest noch ein bisschen Verhalten zu den Daten.

Weil Python bleibe ich dabei: »Klassen schnüren Daten und zugehörige Funktionalität zusammen«. Erstmal reicht das nicht nur in Sachen OOP. Dank Duck-Typing ist damit auch Vererbung und Polymorphie abgedeckt. Beispiel:

Code:
Expand Collapse Copy
def foo(some_object):
    some_object.miau(42);

Es ist wurscht, welchen Typ `some_object` hat. Solange das Ding eine Methode namens `miau()` hat, die man mit einer Zahl als einzigem Argument aufrufen kann, passt alles. Gerade als Anfänger oder für kleine Skripte ist das ein gewaltiger Vorteil.

BurneR schrieb:
Gerade Vererbung wird bei OOP gerne groß und breit besprochen, aber Vererbung bedingt eine sehr starke Koppelung
Danke! :) Wie oft ich mir schon den Mund fusselig geredet habe, dass eine Klassenhierarchie keine lose Kopplung ist! …
 
OT: Sehr gute Beiträge von euch beiden.

Ich bin ja eher in der funktionalen Programmierungsecke zu Hause, da erstaunt es mich immer wieder, wie Leute denken, es gelte FP vs OOP, wobei das zwei orthogonale Paradigmen sind. Da wird oft imperative Programmierung reingemischt, vermischt und gleichgesetzt.
 
Das hier geht gerade durch die IT News:

Also wenn Naturwissenschaftler nicht nur ohne Programmieren auskommen für ihre Analysen und Auswertungen, sondern sogar weitesgehend auskommen, ohne Excel vernünftig bedienen zu können, dann bin ich sicher, dass man eine ganze Weil ohne OOP auskommen wird/kann. :-D
 
Zurück
Oben