• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

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.
 

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
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 SQLAlchemy an.
 

hol

Neu angemeldet

Registriert
20 Dez. 2017
Beiträge
13
  • 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...
 

exomo

NGBler

Registriert
1 Aug. 2015
Beiträge
129
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.
 

saddy

Bekannter NGBler

Registriert
16 Juli 2013
Beiträge
4.029
Ort
*.*
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: https://entwickler.de/online/develo...ktorientierte-programmentwicklung-197372.html
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
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:

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
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:

hol

Neu angemeldet

Registriert
20 Dez. 2017
Beiträge
13
  • 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.
 

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
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 Ruby on Rails und Hibernate 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.
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
501
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.
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
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. SOLID 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:

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
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: http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
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:
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! …
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
346
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.
 
Oben