Wird Perl-Code hauptsächlich in objektorientiertem Design geschrieben?

8

Da es für fast alles ein Modul gibt und es immer wieder heißt, dass wir das Rad nicht neu erfinden sollten und da ich keine Module für CPAN schreibe, brauche ich kein OO zu verwenden. Aber meine Frage ist, ist professioneller Perl-Code hauptsächlich im OO-Stil geschrieben?

    
sid_com 04.05.2010, 21:16
quelle

5 Antworten

8

Kurz gesagt, nur wenn Sie Code-Wiederverwendbarkeit und Lesbarkeit wünschen; Zum Schreiben von einfachen Systemskripten oder Code, um eine Aufgabe auszuführen, ist es eine Verschwendung, besonders wenn es sich um Dinge handelt, die nicht gut dokumentiert sind. Wenn man beispielsweise ein komplexes Programm schreibt, hilft es wirklich, seine Gedanken zu ordnen und das Problem zu modularisieren, indem man eine Reihe von Modulen schreibt. Die Vorteile der Verwendung von Objektorientierung steigen exponentiell, wenn an einem Projekt mit mehr als einem Entwickler gearbeitet wird.

    
amphetamachine 04.05.2010 13:21
quelle
5

Ich sehe OOP hauptsächlich als eine Möglichkeit, Verhalten an eine Datenstruktur zu binden und zu setzen. Jedes Mal, wenn meine Datenstrukturen aussehen, als würden sie kompliziert werden, komponiere ich Objekte.

Dies hilft beim Zentralisieren und Abstrahieren des mit der Manipulation der Daten verbundenen Codes. Dies wiederum reduziert doppelten Code und vereinfacht das Refactoring. Die gleichen Dinge könnten mit rein prozeduralem Code erreicht werden. Ich finde, dass OOP die Beziehung explizit macht und es einfacher macht, sie auf intuitive Weise zu konzeptualisieren.

Betrachten Sie diese Struktur:

%Vor%

Wenn ich mit einer solchen Struktur (verschachtelt und uneinheitlich) komme, fange ich an, "Objekt" zu denken. Ich bin sicher, wenn ich viel Code schreibe, um auf Daten in der Struktur zuzugreifen, sie zu modifizieren und zu validieren.

Da die meisten nicht-trivialen Projekte nicht-triviale Datenmanipulationen erfordern, verwende ich Objekte für mindestens einen Teil der meisten Jobs.

Ich kann oder darf nicht ganz in meiner OOP gehen. Normalerweise gibt es ein paar Dinge, die keine Objekte sind. Es kann eine Anwendungsbasisklasse geben oder auch nicht. Einige Elemente können als normaler prozeduraler Code behandelt werden. Einige können funktionelle Ansätze beinhalten. Alles hängt davon ab, was angesichts der Anforderungen des Projekts sinnvoll ist.

Das Wichtigste, an das Sie sich erinnern sollten, ist, dass Ihr Code dem armen Kerl, der damit beauftragt ist, es zu behalten, klar sein muss. (Es könnte sein, dass du in 6 Monaten, aus tiefem Morgenschlaf aufgewacht, geschlafen hast, mit dem Boss deines Bosschefs, der dich anschreie, die verdammte Software zu reparieren, bevor die Firma bankrott ist.)

    
daotoad 04.05.2010 17:04
quelle
3

Der meiste Perl-Code, den ich schreibe, ist kleinformatige Skripte und ich benutze niemals OOP für sie, selbst wenn sie CPAN-Module verwenden, die OOP-entworfen sind. Für die größeren Code-Projekte tendiere ich ungefähr 70% der Zeit zu OOP, aber es hängt davon ab: Wird der Code für eine lange Zeit verwendet werden? Wenn es wahrscheinlich bleibt, und viele Benutzer werden ihre Löffel in den Mix eintauchen, ist OOP wahrscheinlich ein besseres Design.

    
Nick Gotch 04.05.2010 15:02
quelle
2

OO-Design ist keine "Wunderwaffe". Es gibt keinen Schaden beim Schreiben von Code, der nicht-OO ist. Es ist nur die "beliebte" Wahl. Wie jemand sagte (und ich paraphrasiere):

%Vor%

Das liegt nur an der Tatsache, dass die Leute glauben, "der meiste Code" sollte OO sein. Natürlich können Sie den Status "intern in einem Objekt" verfolgen, aber es wird auch dazu führen, dass Leute dumme Dinge innerhalb des Objekts tun, die die Dinge auch komplizierter machen.

Mein Problem ist "der meiste in OO geschriebene Code". Ich glaube, dass es ein gesundes Gleichgewicht zwischen Objekten und Funktionen geben sollte. Funktionen können auf Objekte angewendet werden.

Es gibt viele Dinge, die sich Objekten nicht sehr gut anbieten.

    
dlamotte 04.05.2010 15:07
quelle
1

Wenn Sie ein einfaches Skript schreiben, um eine relativ einfache Verarbeitung, Dateimodifikation usw. durchzuführen, ist es in Ordnung, mit einem Nicht-OO-Design zu arbeiten, aber nach meiner Erfahrung wird Ihr Skript länger dauern und potenziell Dinge tun, die Sie tun Vielleicht möchten Sie eines Tages in einem anderen Skript oder in einem anderen Kontext als dem, was Sie für den OO-Ansatz geplant haben, wiederverwenden. Im Allgemeinen ist es auch viel einfacher, ein OO-basiertes Design zu skalieren und zu verbessern.

Besonders wenn es um die Darstellung von Daten jeglicher Art geht. Sobald Sie eine Klasse zur Darstellung dieser Daten geschrieben haben, ist es sehr praktisch, dieser Datenklasse nützliche Methoden hinzuzufügen (z. B. Anzeigen, Prüfen, Analysieren, Zurücksetzen, Schreiben in Datei, Laden aus Datei usw.).

Dies hat auch einen positiven Nebeneffekt davon, dass Ihre Skripte weniger ausführlich und einfach zu lesen und zu warten sind, da viele Details der Datenverarbeitung den Klassenmethoden überlassen werden. Wenn Sie mit großen Datenmengen zu tun haben, ist es auch viel einfacher, mit Arrays von Objekten umzugehen als mit Hashes, die Sie wahrscheinlich am Ende verwenden werden, wenn Sie kein OO-Design haben.

Wenn Sie in Zukunft ein Skript schreiben müssen, um dieselben Daten auf andere Weise zu verarbeiten, können Sie die Datenklassen einfach in einem anderen Skript wiederverwenden. Wenn Ihre Daten etwas anders sind, müssen Sie mehr Felder oder Methoden hinzufügen. Kein Problem, einfach die ursprüngliche Datenklasse erweitern.

Die beste Referenz zum Lernen von OO Perl, die ich gefunden habe, ist: Objektorientierte Perl: Ein umfassender Leitfaden zu Konzepten und Programmiertechniken von Damian Conway. Eines der Dinge, mit denen ich zu kämpfen hatte, als ich begann, OO Perl zu machen, ist, dass es so viele verschiedene Möglichkeiten gibt, es zu tun. Irgendwann habe ich mich einfach auf eins festgelegt und bin über die Jahre dabei geblieben.

    
yahya 04.05.2010 16:51
quelle

Tags und Links