Ich schreibe viele Skripte in Python, um experimentelle Daten zu analysieren und zu plotten sowie einfache Simulationen zu schreiben, um zu testen, wie Theorien zu den Daten passen. Die Skripte sind sehr prozedural; eine Eigenschaft berechnen, eine andere Eigenschaft berechnen, Eigenschaften plotten, Grundstück analysieren ...
Anstatt nur eine Prozedur zu schreiben, würde es Vorteile geben, eine Klasse zu benutzen? Ich kann die eigentliche Analyse in Funktionen vergraben, so dass ich die Daten an die Funktion übergeben kann und sie es tun lassen kann, aber die Funktionen sind nicht in einer Klasse enthalten.
Welche Art von Nachteilen würde eine Klasse überkommen und was wäre der Zweck der Verwendung einer Klasse, wenn sie prozedural geschrieben werden kann?
Wenn dies vor meiner Entschuldigung veröffentlicht wurde, zeigen Sie mich einfach in diese Richtung.
Durch Verwendung der objektorientierten Programmierung haben Sie Objekte, denen Funktionen zugeordnet sind, die die einzige Möglichkeit sind, ihre Eigenschaften (interne Variablen) zu modifizieren (sollten).
Es war üblich, Funktionen namens trim_string(string)
zu haben, während man mit string
Klasse string.trim()
machen konnte. Der Unterschied macht sich hauptsächlich bei großen komplexen Modulen bemerkbar, bei denen Sie alles tun müssen, um die Kopplung zwischen einzelnen Komponenten zu minimieren.
Es gibt andere Konzepte, die OOP umfassen, wie die Vererbung, aber das wirklich Wichtige ist, dass OOP dazu dient, Sie über Objekte nachzudenken, die Operationen und Nachrichtenübergaben (Methoden / Verben) haben. , anstatt in Begriffen von Operationen (Funktionen / Verben) und Grundelementen (Variablen) zu denken.
Sehen Sie sich auch an diese Frage .
Es gibt nichts inhärent falsch über das Strukturierte Programmieren, es ist nur so, dass einige Probleme besser zu einem objektorientierten Design passen.
Zum Beispiel könnten Sie in einer SP Sprache haben:
%Vor%Wenn Sie auf einem OOP sind, haben Sie:
%Vor% Sie können sehen, dass bei SP jedes Tier, das Sie hinzufügen, ein weiteres if
zu talk
hinzugefügt werden muss, eine weitere Variable hinzugefügt werden muss, um den Namen des Tieres zu speichern, potenziell jede Funktion im Modul zu berühren, Während der OOP können Sie Ihre Klasse als unabhängig vom Rest betrachten. Wenn es eine globale Änderung gibt, ändern Sie die Animal
, wenn es eine enge Änderung ist, müssen Sie nur die Klassendefinition betrachten.
Für einfachen, sequenziellen und möglicherweise wegwerfbaren Code ist es in Ordnung, strukturierte Programmierung zu verwenden.
Sie brauchen nicht, um Klassen in Python zu verwenden - es zwingt Sie nicht, OOP zu machen. Wenn Sie mit dem funktionalen Stil mehr zufrieden sind, ist das in Ordnung. Ich benutze Klassen, wenn ich eine Abstraktion modellieren will, die Variationen hat, und ich möchte diese Variationen mit Klassen modellieren. Wie das Wort "Klasse" impliziert, sind sie hauptsächlich nützlich, wenn die Dinge, mit denen Sie arbeiten, natürlich in verschiedene Klassen fallen. Wenn ich nur große Datenmengen manipuliere, habe ich keine übergeordnete Notwendigkeit gefunden, einem OOP-Paradigma nur zuliebe zu folgen.
OOP eignet sich gut für komplexe Programme. Es ist großartig, um den Zustand und das Verhalten von realen Weltkonzepten einzufangen und das Zusammenspiel zwischen ihnen zu koordinieren. Guter OO-Code ist einfach zu lesen / zu verstehen, schützt die Integrität Ihrer Daten und maximiert die Wiederverwendung von Code. Ich würde sagen, die Wiederverwendung von Code ist ein großer Vorteil, um Ihre häufig verwendeten Berechnungen in einer Klasse zu halten.
Objektorientierte Programmierung ist nicht die Lösung für jedes Codierungsproblem.
In Python sind Funktionen Objekte. Sie können beliebig viele Objekte und Funktionen mischen.
Module mit Funktionen sind bereits Objekte mit Eigenschaften.
Wenn Sie feststellen, dass Sie viele der gleichen Variablen - state - passieren, ist ein Objekt wahrscheinlich besser geeignet. Wenn Sie viele Klassen mit Klassenmethoden oder Methoden haben, die self
nicht sehr verwenden, dann sind Funktionen wahrscheinlich besser.
Tags und Links python oop class-design procedural-programming