Wann ist OOP besser geeignet? [geschlossen]

  • Seit ich anfing, objektorientierte Programmierung zu studieren, lese ich häufig Artikel / Blogs, die besagen, dass Funktionen besser sind oder nicht alle Probleme als Objekte modelliert werden sollten. Wann glauben Sie, dass durch Ihre persönlichen Programmierabenteuer ein Problem durch OOP besser gelöst wird?

    06 November 2010
    Henrik P. Hessel
16 answers
  • Es gibt keine feste Regel. Ein Problem lässt sich mit OOP besser lösen, wenn Sie Probleme lösen und in einer OO-Mentalität denken. Die Objektorientierung ist nur ein weiteres Werkzeug, das durch das Bestreben entwickelt wurde, das Berechnen zu einem besseren Werkzeug für die Problemlösung zu machen.

    Dies ermöglicht jedoch eine bessere Wiederverwendung von Code und kann auch zu ordentlichem Code führen. Häufig sind diese hoch gelobten Qualitäten jedoch von geringem Wert. Die Anwendung von OO-Techniken auf eine vorhandene funktionale Anwendung kann sehr viele Probleme verursachen. Die Fähigkeit liegt darin, viele verschiedene Techniken zu erlernen und die für das jeweilige Problem am besten geeignete anzuwenden.

    OO wird oft als Nirvana-ähnliche Lösung für die Softwareentwicklung zitiert, wie auch immer oft, wenn es nicht angebracht ist, auf die vorliegende Ausgabe angewendet zu werden. Häufig kann es zu einer Überentwicklung eines Problems kommen, um die perfekte Lösung zu finden, wenn es oft nicht wirklich notwendig ist.

    Im Wesentlichen ist OOP nicht wirklich objektorientiert Programmieren, aber objektorientiertes Denken einer Programmiersprache zuordnen, die OO-Techniken unterstützt. OO-Techniken können von Sprachen unterstützt werden, die nicht von Natur aus OO sind, und es gibt Techniken, die Sie in funktionalen Sprachen verwenden können, um die Vorteile zu nutzen.

    Als Beispiel habe ich das schon getan Ich entwickle seit ungefähr 20 Jahren OO-Software, daher neige ich bei der Lösung von Problemen zu OO-Begriffen, unabhängig von der Sprache, in der ich schreibe. Derzeit verwende ich Polymorphismus mit Perl 5.6, der dies nicht nativ unterstützt. Ich habe mich dazu entschieden, da dies die Wartung und Erweiterung des Codes zu einer einfachen Konfigurationsaufgabe und nicht zu einem Entwicklungsproblem macht.

    Nicht sicher, ob dies klar ist. Es gibt Menschen, die hart vor dem OO-Gericht stehen, und es gibt Menschen, die hart vor dem Funktionsgericht stehen. Und dann gibt es Leute, die beides versucht haben und versuchen, jeweils das Beste herauszuholen. Weder ist perfekt, aber

    06 July 2018
    eriegzXetius
  • Ich bin ein alter Timer, habe aber auch lange Zeit OOP programmiert. Ich bin persönlich gegen die Verwendung von OOP, nur um es zu benutzen. Ich ziehe es vor, dass Objekte bestimmte Gründe für das Bestehen haben, dass sie etwas Konkretes modellieren und dass sie einen Sinn ergeben.

    Das Problem, das ich mit vielen neueren Entwicklern habe, ist, dass sie es sind haben keine Vorstellung von den Ressourcen, die sie mit dem von ihnen erstellten Code verbrauchen. Beim Umgang mit einer großen Datenmenge und beim Zugriff auf Datenbanken ist das "perfekte" Objektmodell möglicherweise das Schlimmste, was Sie für Leistung und Ressourcen tun können.

    Meine untere Zeile macht es aus Als Objekt erfassen, dann als Objekt programmieren, solange Sie die Auswirkungen auf die Leistung / Ressource der Implementierung Ihres Objektmodells berücksichtigen.

    19 September 2008
    bruceatk
  • Ich denke, es passt am besten, wenn Sie etwas modellieren, das mit dem Zustand und den damit verbundenen Aktionen in Zusammenhang steht. Ich denke, das ist ziemlich vage, aber ich bin mir nicht sicher, ob es hier eine perfekte Antwort gibt.

    Die Sache mit OOP ist, dass Sie Daten und Informationen kapseln und abstrahieren können. Das ist ein wahrer Segen beim Bau eines großen Systems. Sie können dasselbe mit anderen Paradigmen machen, aber OOP scheint in dieser Kategorie besonders hilfreich zu sein.

    Es hängt auch von der verwendeten Sprache ab. Wenn es sich um eine Sprache mit reichhaltiger OOP-Unterstützung handelt, sollten Sie diese wahrscheinlich zu Ihrem Vorteil nutzen. Wenn dies nicht der Fall ist, müssen Sie möglicherweise andere Mechanismen finden, um das Problem in kleinere, leicht überprüfbare Teile aufzuteilen.

    09 August 2008
    Mike Stone
  • Ich bin an OOP verkauft.

    Jedes Mal, wenn Sie ein Konzept für ein Problem definieren können, kann es wahrscheinlich in ein Objekt eingeschlossen werden.

    Das Problem mit OOP ist, dass einige Leute es überlasteten und ihren Code noch schwieriger zu verstehen machten. Wenn Sie vorsichtig sind, was Sie in Objekten einsetzen und was Sie in Services (statische Klassen) einsetzen, werden Sie von der Verwendung von Objekten profitieren.

    Fügen Sie einfach nichts hinzu, was nicht der Fall ist Gehören zu einem Objekt im Objekt, weil Sie benötigen, dass Ihr Objekt etwas Neues tut, an das Sie anfangs nicht gedacht haben, umgestalten und den besten Weg finden, diese Funktionalität hinzuzufügen.

    09 August 2008
    mbillard
  • Es gibt 5 Kriterien, ob Sie objektorientierten gegenüber objektbasiertem, funktionalem oder prozeduralem Code bevorzugen. Denken Sie daran, dass alle diese Stile in allen Sprachen verfügbar sind, sie sind Stile . Alle diese sind im Stil von "Soll ich OO in dieser Situation bevorzugen?" Geschrieben.

    Das System ist sehr komplex und hat etwa 9.000 LOC (nur eine beliebige Ebene). - Da Systeme immer komplexer werden, steigen die Vorteile, die durch die Verkapselung der Komplexität erzielt werden, beträchtlich. Mit OO kapseln Sie im Gegensatz zu den anderen Techniken immer mehr der Komplexität, die auf dieser Ebene sehr wertvoll ist. Object Based oder prozedural sollte vorher bevorzugt werden. (Dies spricht nicht für eine bestimmte Sprache, sondern für Sie. OO C passt mehr zu diesen Funktionen als OO C ++ in meinem Kopf, eine Sprache mit einem berüchtigten Ruf für undichte Abstraktionen und der Fähigkeit, Läden mit nur einem mittelmäßigen / hartnäckigen Programmierer zu Mittag zu essen.)

    Ihr Code ist nicht Operationen mit Daten (dh datenbankbasiert oder mathematisch / analysebasiert). Datenbankbasierter Code wird oft einfacher durch prozedurale Darstellungen dargestellt. Analysebasierter Code wird oft einfacher in einem funktionalen Stil dargestellt.

    Ihr Modell ist eine Simulation von etwas (OO ist bei Simulationen hervorragend).

    Sie tun etwas, für das der objektbasierte Subtyp-Versand von OO wertvoll ist (alias, Sie müssen eine Nachricht an alle Objekte eines bestimmten Typs und verschiedener Subtypen senden und erhalten eine angemessene, aber unterschiedliche Reaktion von allen sie).

    Ihre App ist kein Multithreading, insbesondere in einer Codebase, die nicht zu einem Worker-Typ gehört. OO ist in Programmen, die multithreading sind und unterschiedliche Threads erfordern, um verschiedene Aufgaben zu erledigen, ziemlich problematisch. Wenn Ihr Programm mit einem oder zwei Haupt-Threads strukturiert ist und viele Worker-Threads dasselbe tun, ist der durcheinander geratene Steuerungsfluss von OO-Programmen einfacher zu handhaben, als alle Worker-Threads

    06 November 2010
    Michael Langford
  • Der Schlüssel zum Lernen objektorientierter Programmierung ist das Erlernen von Design Pattern. Durch das Lernen über Entwurfsmuster können Sie besser sehen, wann Klassen benötigt werden und wann nicht. Wie bei allen anderen Programmierfunktionen hängt die Verwendung von Klassen und anderen Funktionen von OOP-Sprachen von Ihrem Design und Ihren Anforderungen ab. Wie Algorithmen sind Designmuster ein übergeordnetes Konzept.

    Ein Entwurfsmuster spielt eine ähnliche Rolle wie Algorithmen für traditionelle Programmiersprachen. Ein Entwurfsmuster zeigt Ihnen, wie Sie ein Objekt erstellen und kombinieren, um eine nützliche Aufgabe auszuführen. Wie die besten Algorithmen sind die besten Entwurfsmuster allgemein genug, um auf eine Vielzahl allgemeiner Probleme angewendet zu werden.

    19 September 2008
    RS Conley
  • Objektorientierter Code und prozeduraler Code weisen unterschiedliche Erweiterungspunkte auf. Objektorientierte Lösungen erleichtern das Hinzufügen neuer Klassen, ohne dass vorhandene Funktionen geändert werden müssen (siehe Open-Closed-Prinzip). Mit prozeduralem Code können Sie Funktionen hinzufügen, ohne vorhandene Datenstrukturen zu ändern. Häufig erfordern unterschiedliche Teile eines Systems unterschiedliche Ansätze, abhängig von der Art der erwarteten Änderung.

    28 April 2009
    Rob Scott
  • An einigen Stellen, an denen OO nicht so gut ist, handelt es sich um "Sets" von Daten wie in SQL. OO neigt dazu, set-basierte Operationen schwieriger zu gestalten, da es nicht wirklich darauf ausgelegt ist, die Schnittmenge von zwei Sätzen oder die Obermenge von zwei Sätzen optimal zu übernehmen.

    Außerdem gibt es Zeiten, zu denen Ein funktionaler Ansatz wäre sinnvoller, wie dieses Beispiel aus MSDN

    Erwägen Sie beispielsweise das Schreiben eines Programms zum Konvertieren eines XML-Dokuments in eine andere Datenform. Zwar wäre es sicherlich möglich, ein C # -Programm zu schreiben, das das XML-Dokument analysiert und eine Vielzahl von if-Anweisungen anwendet, um zu bestimmen, welche Aktionen an verschiedenen Stellen im Dokument ausgeführt werden sollen. Die überlegene Vorgehensweise besteht jedoch darin, die Umwandlung als ein eXtensible Stylesheet zu schreiben Programm zur Sprachumwandlung (XSLT). Es überrascht nicht, dass XSLT einen großen Teil des Funktionalismus in sich trägt

    09 August 2008
    lomaxx
  • Ich denke, es ist hilfreich, sich ein bestimmtes Problem als "Dinge" vorzustellen.

    Wenn das Problem als ein oder mehrere "Dinge" angesehen werden kann ', wenn jedes' Ding 'eine Reihe von Attributen oder Informationen enthält, die sich auf seinen Zustand beziehen, und eine Anzahl von Operationen, die darauf ausgeführt werden können - dann ist OOP wahrscheinlich der Weg zu gehen!

    09 August 2008
    Chris Roberts
  • Meiner Meinung nach geht es eher um Sie als Person. Manche Menschen denken funktional besser, andere bevorzugen Klassen und Objekte. Ich würde sagen, dass OOP besser geeignet ist, wenn es Ihrem inneren (subjektiven) mentalen Modell der Welt entspricht

    13 October 2008
    fluffels