Kann mein Projekt ohne Objektorientierung überleben?


9

Ich schreibe ein kleines MATLAB-Paket, das bestimmte numerische Klassenprobleme löst. Es gibt 3 Stufen des Algorithmus und der Benutzer hat 5 Möglichkeiten für jede Stufe. Ich habe das gesamte Problem mit Funktionen und 3 Schalterfällen implementiert (einer für jede Algorithmusstufe). Es funktioniert gut, aber ich denke darüber nach, mehr Dinge zu tun (mehr als 5 Auswahlmöglichkeiten und eine weitere Stufe) und auch einen Python-Port zu erstellen (einige Leute sind interessiert).20

Ich habe mich gefragt, ob ich zu einem OOP-Framework konvertieren soll (in dem ich überhaupt nicht gut bin) oder ob ich mich an das prozedurale Framework halten soll, das ich habe (in dem ich gut bin). Ich habe in meinem prozeduralen Code sichergestellt, dass keine Funktion zwei Dinge tut und es nur eine minimale Überlappung gibt (2 Codesegmente machen fast nie dasselbe).

Bitte migrieren Sie dies zu SO, wenn Sie der Meinung sind, dass es in ihrer Domäne besser passt.

Antworten:


6

Es ist nicht erforderlich, in ein OOP-Framework zu konvertieren, um von der Objektorientierung zu profitieren, wo dies hilfreich ist. Beachten Sie, dass die Anzahl der Funktionen weniger ein Indikator ist als die Codeduplizierung innerhalb und zwischen diesen Funktionen oder die Länge dieser Funktionen. (Eine Funktion mit mehr als 100 Codezeilen wäre ein typischer Hinweis auf "Verbesserungspotential".)

Wenn Sie die Teile nicht erkennen können, bei denen die Objektorientierung hilfreich ist, ist die Konvertierung in ein OOP-Framework nicht der beste erste Schritt. Fragen Sie lieber jemanden, der mit der Objektorientierung vertraut ist, was vereinfacht oder verbessert werden könnte, und versuchen Sie dann zu verstehen, warum es sich um eine Vereinfachung oder Verbesserung handelt.

Wenn Sie ein Framework wie deal.II oder PETSc verwenden möchten, verwenden Sie diese, wenn die von ihnen angebotenen Funktionen für Sie nützlich sind, und nicht, weil Sie der Meinung sind, dass dadurch Ihr eigener Code besser oder wartbarer wird. Sie befinden sich jedoch bereits im MATLAB-Framework, sodass es unwahrscheinlich ist, dass Sie stattdessen zu einem C ++ OOP-Framework wechseln möchten. (MATLAB bietet volle OOP-Unterstützung, wie Sie wahrscheinlich bereits wissen.)

Führen Sie den Python-Port zunächst auf der Grundlage Ihres aktuellen Wissens aus und starten Sie ihn später erneut, nachdem Sie genug gelernt haben, um ihn deutlich zu verbessern.


Ich stimme Ihnen zu, dass die Konvertierung in ein Framework hier übertrieben ist. Ich denke, ihre APIs und Architektur sind Beispiele für gutes Design und es lohnt sich, sie als Leitfaden zu verwenden.
Geoff Oxberry

3

Diese Frage passt möglicherweise gut zum Stapelüberlauf. Ich denke, es passt auch gut hierher, weil es ein häufiges Problem in der Computerwissenschaft ist.

Ein gutes Beispiel für das Erstellen von Algorithmen ist PETSc, wenn Sie C-Code lesen können. Der objektorientierte Programmierstil kann bei der Kapselung von Daten hilfreich sein. Als einfachen ersten Schritt möchten Sie jedoch möglicherweise jede Auswahl für eine Stufe zu einer Funktion mit einer gemeinsamen Schnittstelle machen. Übergeben Sie dann für Ihren Algorithmus eine Funktion für jede Stufe als Eingabe und lassen Sie den Hauptalgorithmus die Funktion für jede Stufe aufrufen.


Ich bin fasziniert. Schlagen Sie PETSc als eine gute Bibliothek vor, aus der Sie OOP oder prozedurale Codierung lernen können? Kennen Sie eine lesbare Bibliothek, die OOP gut funktioniert?
Anfrage

Ich denke, PETSc ist ein gutes Beispiel für Software im großen Stil und im Allgemeinen sehr gut dokumentiert. In der Computerwissenschaft denke ich, dass PETSc, Trilinos, deal.II und FEniCS gut dokumentiert sind und alle im OOP-Stil geschrieben sind. Ich zögere zu sagen, dass Sie OOP von ihnen lernen sollten; Sie sind wahrscheinlich besser dran, zuerst aus einem Lehrbuch zu lernen und dann den Code der realen Welt zu betrachten.
Geoff Oxberry

2

1+11+1.plus(1)1+1plus(1,1)1plus__plus____rplus__

Denken Sie also nicht, dass Sie den quadratischen Stift in das runde Loch zwingen müssen. Wenn Ihr Algorithmus auf einfache prozedurale Weise gut aussieht, behalten Sie ihn so bei. Wenn es in einem OO-System enthalten sein muss, können Sie Ihrem Nicht-OO-Code jederzeit eine OO-Schnittstelle hinzufügen. C ++ - Codierer tun dies jeden Tag (und werden sogar dafür bezahlt).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.