Ich habe ein Projekt in PHP mit mehr als 13000 Zeilen im prozeduralen Stil abgeschlossen [weil ich damit sehr vertraut bin, obwohl ich OOP kenne], und das Projekt läuft perfekt.
Aber sollte ich es in OOP konvertieren? [ Weil die Welt mit OOP beschäftigt ist ]
Mein Code benötigt keine der Funktionen von OOP [Kapselung, Vererbung im Grunde ...]!
Also was soll ich tun?
Und welche Hilfe bekomme ich, wenn ich es in OOP konvertiere?
Antworten:
Sie haben Ihre eigene Frage beantwortet. Wenn Sie in diesem Fall kein OOP benötigen und Ihr Projekt funktioniert, konvertieren Sie es nicht.
Sie sollten jedoch versuchen, OOP für Ihr nächstes Projekt zu verwenden - aber nur, wenn dies angemessen ist.
An der prozeduralen Programmierung ist an sich nichts auszusetzen - solange sie an der richtigen Stelle verwendet wird.
quelle
Nein und nicht nur, weil Sie kein OOP benötigen.
Wenn Ihr Programm bereits fertig ist und zufriedenstellend funktioniert, ist es in über 90% der Fälle Zeitverschwendung, den fertigen Code aus irgendeinem Grund neu zu schreiben.
OOP ist nicht alles Mächtige Es gibt viele Orte, an denen OOP nicht verwendet werden sollte. Verwenden Sie es also nicht nur, weil OOP der Trend ist.
quelle
Meine allgemeine Auffassung von Paradigmen (und warum keines der drei Hauptparadigmen der richtige oder der falsche Weg ist, um zu programmieren):
Prozedurale Programmierung ist gut, wenn Sie ein Problem haben, das auf hoher Ebene einfach ist (obwohl es auf niedriger Ebene komplex sein kann) und entsprechend einfachen, linearen Code schreiben möchten. Es ist wohl einfacher zu schreiben und zu verstehen als OO und funktioniert, wenn das Problem nirgendwo stark entkoppelt werden muss. Beispiele: Numerischer Code, die meisten kleinen Skripte, die meisten kleinen Unterprobleme, wenn Sie die Dinge mit OO oder funktional aufgeschlüsselt haben.
Objektorientierter Code ist gut, wenn Sie Bedenken stark entkoppeln müssen, da Sie möglicherweise mehr als eine Implementierung einiger Bedenken haben. Beispiel: Die meisten großen Unternehmenssoftware. Möglicherweise möchten Sie die Geschäftslogik stark von der Präsentationslogik entkoppeln, da sie sich möglicherweise unabhängig voneinander ändern müssen.
Funktionales Programmieren ist gut, wenn Sie den Mechanismus stark von der Richtlinie trennen müssen. Eine Mechanismusfunktion zu haben, die eine Richtlinienfunktion akzeptiert, ist ein gutes Muster. (Ich habe es anhand des std.algorithm-Moduls der Programmiersprache D gelernt .) Wenn man den veränderlichen Zustand an der Grenze zwischen Richtlinien- und Mechanismuscode entfernt, ist die API im Allgemeinen einfacher zu überlegen . Wenn der veränderbare Zustand in beiden Fällen privat verwendet wird, handelt es sich um ein Implementierungsdetail. Die andere Stärke der funktionalen Programmierung ist aus offensichtlichen Gründen die Parallelität.
quelle
Code "braucht nie OOP". Es sind Programmierer, soweit sie in der Lage sind, in verschiedenen Modi zu denken, die sich vorstellen, dass dieses oder jenes bestimmte Problem $ PARADIGM "benötigt" oder am besten auf diese Weise gelöst wird.
Häufig denken Programmierer, die nur ein Paradigma kennen, dass ihr Paradigma das größte ist. Eine Größe passt für alle, und wir müssen alle im Bett von Procrustes schlafen, wenn dies oder das derzeit in Mode ist.
quelle
Sie sollten Ihr Projekt nur dann in OOP konvertieren, wenn ein eindeutiger Hinweis auf die Notwendigkeit von OOP vorliegt. Mögliche Szenarien, in denen dies auftreten kann, sind (unter anderem):
und selbst in diesen Szenarien ist es möglicherweise nicht erforderlich, Ihr Projekt in OOP zu konvertieren.
quelle
Beides kann gut sein, beides kann schlecht sein. Aber eine Nachrüstung, um wie die andere auszusehen, ist niemals eine gute Idee.
quelle
Wenn Sie zurückdenken, warum OO erfunden wurde, werden Sie feststellen, dass Sie OOP überhaupt nicht brauchen , aber manchmal macht es Ihr Leben viel einfacher.
In den Tagen der C-Codierung konnte ein sehr umfangreiches Programm ziemlich unübersichtlich und schwierig werden, weiterzuarbeiten. Also erfanden sie Möglichkeiten, es in modulare Blöcke aufzuteilen. OOP verfolgt diesen Ansatz und macht ihn noch modularer, indem es die Daten mit diesen Programmlogikblöcken kombiniert, um sie noch weiter vom Rest des Codes zu trennen.
Auf diese Weise können Sie immer größere Programme schreiben und sicher sein, dass Sie Ihren riesigen Elefanten von einer Aufgabe in eine Aufgabe von 100 Mäusen verwandelt haben. Der zusätzliche Bonus ist, dass Sie einige dieser "Mäuse" nehmen und sie in anderen Programmen wiederverwenden können!
Natürlich ist die reale Welt nicht ganz so, und die Wiederverwendung von Objekten hat sich nie in der beabsichtigten Weise durchgesetzt, aber das bedeutet nicht, dass es ein nutzloses Paradigma ist.
Was unbrauchbar ist, ist eine zu starke Abhängigkeit von beiden Codierungsarten. Jeder, der OO mit tausend winzigen, unbedeutenden Klassen durchführt, macht es nicht richtig - er macht für sich selbst (oder für jemanden anderen) einen Wartungs-Albtraum. Wer eine prozedurale Anwendung mit nur drei Funktionen schreibt, macht auch das Leben schwer. Der beste Weg sind die mittelgroßen, großformatigen Objekte (manchmal auch als Komponenten bezeichnet), die eine Menge eigenständigen Codes und Daten liefern können, die mit größerer Wahrscheinlichkeit wiederverwendet werden isoliert von dem Rest Ihrer App.
Mein Rat für das nächste Mal: Versuchen Sie, Ihren üblichen Prozedurcode zu schreiben, aber erstellen Sie ein einzelnes Objekt Ihrer Hauptdatenstruktur. Sehen Sie, wie Sie feststellen, dass es einfacher ist, damit zu arbeiten, als Daten von Funktion zu Funktion weiterzugeben.
quelle
Wie kannst du das Wissen?
Müssen Sie dieses Projekt pflegen? Sind neue Funktionen geplant? Wird es andere Menschen geben, die sich mit Ihnen entwickeln? Hast du dich wiederholt? Ist der Code schwer zu verstehen?
Wenn die Antwort "Ja" lautet, sollten Sie vielleicht darüber nachdenken, ein OOP-Skelett einzurichten und auf diese Weise vorzugehen.
quelle