Wurden Objekte in Bezug auf die Wiederverwendung von Code geliefert?

17

Ich habe oft gehört, dass Objekte im Hinblick auf die Wiederverwendung von Code nicht geliefert wurden. Sind Sie einverstanden? Wenn Sie glauben, dass sie nicht haben, warum nicht?

Casebash
quelle
4
Ich habe noch nie jemanden sagen hören ...
TheLQ
2
@the Ich glaube nicht, dass ich jemanden gehört habe , der es sagt, aber ich habe es gelesen.
George Marian
Die Wiederverwendbarkeit ist nicht der einzige Vorteil von OOP.
Niemand
2
Msgstr "Wurden Objekte im Sinne der Wiederverwendung von Code geliefert?" -> Nur wenn Sie den OOP-Verkäufern von damals geglaubt haben (war das die 60er Jahre? Ich vergesse)
Steven Evers
Meine Antwort auf eine ähnliche Frage: programmers.stackexchange.com/questions/53521/…
Kevin Cline

Antworten:

18

Nein, nicht unbedingt.

Objekte liefern eine bessere Semantik, Organisation von Code / Funktionalität und möglicherweise eine einfachere Verwendung.

Gut gestaltete Bibliotheken erfüllen das Versprechen der Wiederverwendung von Code, nicht von Objekten an sich.

George Marian
quelle
Nun ja. Aber haben Objekte den Bibliotheksdesignern geholfen, indem sie ihnen Optionen zur Verfügung gestellt haben, die die Wiederverwendung ihrer Bibliotheken erleichtern? Ich würde behaupten, sie haben, und daher haben Objekte eine verbesserte Wiederverwendung geliefert.
Jules
@Jules Auch ich diskutiere gerne, nur um zu debattieren. Ich würde nicht argumentieren, dass Objekte das Entwerfen von Bibliotheken nicht einfacher gemacht haben. Ich behaupte, dass die richtige Verwendung Ihrer Werkzeuge zu richtigen Ergebnissen führt.
George Marian
7

Ehrlich gesagt bin ich mir nicht sicher, ob "Code-Wiederverwendung" wirklich das ist, wonach jemand strebt (oder zumindest danach sein sollte). Meine Philosophie ist "Softwarekomponenten", dh bessere Wartbarkeit durch gute Schnittstellen und Vermeidung unnötiger Kopplungen. "Wiederverwendung von Code" ist eines der Dinge, die manchmal herausfallen - unnötig duplizierter Code ist ein Zeichen dafür, dass Sie die Dinge falsch organisiert haben, und es ist natürlich mühsam, sie beizubehalten.

Um die Frage ein wenig direkter zu beantworten, gibt es eine Reihe ziemlich guter Werkzeuge, um Wiederholungen zu vermeiden: Vererbung, Merkmale, Delegierung, Funktionen höherer Ordnung usw. Von diesen neigen die Leute dazu, Vererbung mit OO als Ganzem zu verwechseln - und Sie neigen auch dazu, es ein bisschen zu überbeanspruchen, wenn Sie mich fragen. Vielleicht ist das, woher einige der "OO Sucks" -Vibes kommen: Vererbung stecken zu finden, wo es kein natürliches Recht hat zu sein :)

hobbs
quelle
Die Wiederverwendung von Code ist auf jeden Fall ein Ziel, wenn Sie vermeiden können, die Codequalität zu beeinträchtigen
Casebash
1
Die Wiederverwendung von Code ist jedoch kein Selbstzweck. Wiederverwendung ist ein anderes Wort für Kopplung. Daher müssen Sie die Wiederverwendung sorgfältig angehen. Viele Entwickler scheinen das zu vergessen. Sie wollen entkoppelte Systeme, drehen sich aber um und versuchen, überall vorhandene Klassen zu verwenden.
Andy
5

Nein, "Objekte" haben die Wiederverwendung von Code nicht einfacher oder üblicher gemacht. Dieselben Bedenken, die die Wiederverwendung von Code in einem modularen Programm verhindern (das Entwerfen, Testen und Dokumentieren einer Allzweck-API erfordert im Vorfeld erheblich mehr Aufwand als das Schreiben einer einmaligen Routine master of none - Logik, die für die Wiederverwendung vorgesehen ist, ist möglicherweise nicht optimal für die Verwendungszwecke, für die sie tatsächlich verwendet wird Code.

OO ist eine handliche Abstraktion für eine ganze Reihe von Problemen, aber hüten Sie sich vor dem Hype der 80er und 90er Jahre: Es löst die grundlegenden Probleme unseres Handels nicht auf magische Weise mehr, als dass es Ihnen Waffeln macht, während Sie schlafen.

Shog9
quelle
5

Ich erwarte nicht, dass ALLE Objekte wiederverwendet werden, aber wir haben viele Objekte, die wir für viele verschiedene Projekte wiederverwenden. Wir haben auch Objekte, die nur für ein Projekt wiederverwendet werden. Wir verwenden häufig dieselben Geschäftsobjekte (oder Datenübertragungsobjekte) sowie Geschäftslogikobjekte aus einer Click-Once-Desktop-App, einer Web-App und einer Telefon-App für dasselbe Projekt.

Wo haben Sie gehört, dass OO bei Wiederverwendung nicht liefert? Und was war die Begründung? Vielleicht hat sie das Design ihrer Objekte in diese Situation gezwungen ...

Walter
quelle
4
Verschiedene Artikel. Und aus persönlicher Erfahrung ist es gar nicht so einfach, ein Objekt wiederverwendbar zu machen
Casebash,
3

Einige Programmierer kopieren und fügen sie in jeder Sprache und in jedem Stil ein.

Wirklich gute Programmierer können das Kopieren und Einfügen in fast jeder Sprache vermeiden.

Ich finde, dass OO-Muster dazu neigen, die Wiederverwendung zu fördern. Ich habe Java-Code gesehen, der in einem Nicht-OO-Stil geschrieben wurde (bei dem die Daten aufgrund von beschissenem ORM vom Code getrennt wurden), und die Wiederverwendung war wirklich miserabel - aber in OO haben dieselben Programmierer beim Design bessere Arbeit geleistet ( und wiederverwenden).

Auch in Fällen, in denen wir Nicht-OO-Muster oder OO-Anti-Muster wie Setter / Getters, Switch-Anweisungen, anonyme innere Klassen, riesige Funktionen und dergleichen verwenden, ist die Wiederverwendung von Code gesunken, und der Boilerplate-Wert ist erheblich gestiegen.

ps. Ich weiß, dass die Leute Probleme mit dem vorherigen Absatz haben werden, deshalb erkläre ich es ein bisschen.

Setter und Getter verursachen OO-Probleme, weil sie es Ihnen ermöglichen, auf die Mitglieder eines Objekts zuzugreifen (ein Objekt sollte seine EIGENEN Mitglieder manipulieren). Dadurch wird der Code, der auf Ihre Klasse angewendet wird, auf andere Klassen verteilt, sodass Sie die Funktionalität um den Setter / Getter herum kopieren müssen . Dies gilt auch für Eigenschaften - nur weil Eigenschaften einfacher sind, sind sie nicht in allen Situationen "gut".

Der Code in anonymen inneren Klassen kann überhaupt nicht wiederverwendet werden und die Leute vergessen, dass viele Dinge (wie Zuhörer) vollwertige Klassen sein können und sollten - dies gilt auch für Abschlüsse! Wenn Sie eine anonyme innere Klasse verwendet haben, um so etwas wie einen Listener zu implementieren, ist es viel wahrscheinlicher, dass Sie Ihre Implementierung einfach kopieren und einfügen, als den Code in eine Methode oder eine eigene Klasse zu extrahieren und stattdessen aufzurufen. Verschlüsse können auch die Wiederverwendbarkeit verbessern - hängt nur davon ab, wie Sie sie verwenden.

In vielen Fällen bestimmen die verfügbaren Funktionen die Struktur Ihres Codes. OO ist noch leistungsfähiger, wenn es darum geht, Ihnen zu helfen, Ihren gesamten Code zu visualisieren und wie er interagiert, aber das ist eine andere Frage.

Bill K
quelle
2

Objekte können nicht mehr Code wiederverwenden, als ein Treppensteiger oder ein anderes Fitnessgerät zur Gewichtsreduktion beitragen kann. Entwickler müssen motiviert sein, Werkzeuge richtig einzusetzen.

Sobald Softwareteams der Wiederverwendung von getestetem Code einen höheren Stellenwert beimessen als der Beibehaltung aller Details im Kopf, sehen Sie weitaus feinkörnigere Objekte und Methoden und damit eine stärkere Wiederverwendung von Code.

Huperniketes
quelle
2

Ja

OOP bietet Ihnen mehr Möglichkeiten, Code wiederzuverwenden

Nein

es gibt keine silberne Kugel

Es hängt davon ab, ob

auf das, was Sie hineingesteckt haben und was Sie als Gegenleistung erwartet haben!

Steven A. Lowe
quelle
1

Ja. Gute objektorientierte Programmierung fördert die Trennung von Bedenken, geringe Kopplung, hohe Kohäsion und das Verbergen von Informationen. Diese Dinge sind für wiederverwendbaren Code von entscheidender Bedeutung.

Ich würde argumentieren, dass der Hauptvorteil von OOP Modularität und Modifizierbarkeit ist und nicht die Wiederverwendung, aber das ist eine andere Frage.

Fischtoaster
quelle
4
Ich bin damit einverstanden, dass Objekte den Code schöner machen, aber leider ist ein so großer Teil meiner Objekte nicht wiederverwendbar. Ein Objekt wiederverwendbar zu machen bedeutet zu oft, die Situation zu vereinfachen
Casebash,
2
@casebase +1 Ich würde jedoch sagen, dass das Wiederverwenden von Objekten eine Überkomplizierung der Situation (Objekt) bedeutet.
George Marian
Nicht alles wird wiederverwendbar sein. Die meisten Dinge werden nicht. Geringe Kopplung, Ausblenden von Informationen usw. sind jedoch alle Voraussetzungen für die Wiederverwendung, und das Objekt fördert dies.
Fishtoaster
2
@Fishtoaster: Sie können genauso gut sagen, dass Ihr Auto eine Vorbedingung für die Arbeit ist, und eine Auffahrt mit Gefälle fördert dies. Es ist technisch wahr, aber es ist unwahrscheinlich, dass es außerhalb von Randfällen einen Unterschied macht: Wenn Sie eine Wiederverwendung benötigen und wünschen, werden Sie es bekommen, OO oder nein; Wenn Sie dies nicht tun, werden die Voraussetzungen nicht dazu führen, dass es versehentlich passiert.
Shog9
@Herr. C- Ich bin mir nicht sicher, ob ich deinem Standpunkt folge. Ich habe nur gesagt, dass die Dinge, die OOP fördert (Modularität usw.), es einfacher machen, Dinge wie Bibliotheken zu machen. Es gibt viele Möglichkeiten, Code wiederverwendbar zu machen, indem Bedenken getrennt werden. OOP ist eine, gutes Methodendesign ist eine andere, richtige Problemzerlegung ist noch eine andere.
Fishtoaster
1

Objekte ermöglichen eine erneute Code-Ausgabe, sind aber als solche nicht die gängigste Technik. Ich denke, die Wiederverwendung von Code wird durch objektbezogene Techniken wie Vererbung, Polymorphismus, Überladung und Vorlagen gefördert.

Gaurav
quelle
1

Ja, sie tun es. Die Fähigkeit, von einer Superklasse zu erben, trägt zur Wiederverwendung von Code bei. Ich bin mir nicht sicher, wie jemand anders argumentieren könnte. Sie können einfach eine Klasse erweitern und eine Methode überschreiben, während Sie den Rest der Superklasse verwenden. Wenn dies nicht zur Wiederverwendung von Code beiträgt, weiß ich nicht, was das ist

programmx10
quelle
0

Wenn ja, haben sie ihr Versprechen zur Wiederverwendung von Code bereits eingelöst? Ja, wenn die mit OOP geschriebenen Programme Designmuster mit Bedacht anwenden. Ansonsten meistens nein. Angesichts der Popularität von nicht-trivialen Großprogrammen, die Adobe-Systeme, Google und andere mit C ++ oder Java oder anderen OOP-Sprachen schreiben, würde ich jedoch sagen, dass OOP noch einen langen Weg vor sich hat, bevor es ausläuft. Diese Zeit wird weitaus besser geeignet sein, diese Frage zu stellen, und könnte dazu beitragen, die Grundlagen für ein neues Paradigma zu schaffen.

vpit3833
quelle