In dem einzigen Entwickler-Blog, den ich von diesem Joel-On-Software-Gründer von SO gelesen habe, habe ich vor langer Zeit gelesen, dass OO nicht zu Produktivitätssteigerungen führt. Automatische Speicherverwaltung funktioniert. Cool. Wer kann die Daten ablehnen?
Ich glaube immer noch, dass OO für Nicht-OO ist, was Programmieren mit Funktionen bedeutet, alles inline zu programmieren.
(Und ich sollte wissen, wie ich mit GWBasic angefangen habe.) Wenn Sie Code für die Verwendung von Funktionen umgestalten,
variable2654
wird dies
variable3
zu der Methode, in der Sie sich befinden. Oder, noch besser, es hat einen Namen, den Sie verstehen können,
und wenn die Funktion kurz ist , es heißt
value
und das reicht für das volle Verständnis.
Wenn Code ohne Funktionen zu Code mit Methoden wird, können Sie kilometerlangen Code löschen.
Wenn Sie Code Refactoring wirklich OO, zu sein b
, c
, q
und Z
werden this
, this
, this
und this
. Und da ich nicht daran glaube, das this
Schlüsselwort zu verwenden, können Sie kilometerlangen Code löschen. Eigentlich können Sie das auch tun, wenn Sie es verwenden this
.
Ich denke nicht, dass OO eine natürliche Metapher ist.
Ich denke auch nicht, dass Sprache eine natürliche Metapher ist, und ich denke auch nicht, dass Fowlers "Gerüche" besser sind, als zu sagen "dieser Code schmeckt schlecht". Trotzdem denke ich, dass es bei OO nicht um natürliche Metaphern geht und dass Leute, die denken, dass die
Objekte nur bei Ihnen herausspringen, im Grunde den Punkt verfehlen.
Sie definieren das Objektuniversum, und bessere Objektuniversen führen zu Code, der kürzer, leichter zu verstehen, besser funktioniert oder all dies ist (und einige Kriterien, die ich vergesse). Ich denke, dass Menschen, die die natürlichen Objekte der Kunden / Domain als Programmierobjekte verwenden, die Fähigkeit vermissen, das Universum neu zu definieren.
Wenn Sie beispielsweise ein Flugreservierungssystem durchführen, entspricht das, was Sie als Reservierung bezeichnen, möglicherweise überhaupt keiner rechtlichen / geschäftlichen Reservierung.
Einige der Grundkonzepte sind wirklich coole Werkzeuge
Ich denke, dass die meisten Leute mit dieser ganzen Sache "Wenn Sie einen Hammer haben, sind sie alle Nägel" übertreiben. Ich denke, dass die andere Seite der Münze / des Spiegels genauso wahr ist: Wenn Sie ein Gerät wie Polymorphismus / Vererbung haben, finden Sie Verwendungszwecke, bei denen es wie ein Handschuh / eine Socke / eine Kontaktlinse passt. Die Werkzeuge von OO sind sehr mächtig. Einzelvererbung ist meiner Meinung nach absolut notwendig, damit die Leute nicht mitgerissen werden, da meine eigene
Mehrfachvererbungssoftware nicht standhält.
Was ist der Sinn von OOP?
Ich denke, es ist eine großartige Möglichkeit, mit einer absolut massiven Codebasis umzugehen. Ich denke, es ermöglicht Ihnen, Ihren Code zu organisieren und neu zu organisieren, und gibt Ihnen eine Sprache, in der Sie dies tun können (über die Programmiersprache hinaus, in der Sie arbeiten), und modularisiert Code auf eine ziemlich natürliche und leicht verständliche Weise.
OOP wird von der Mehrheit der Entwickler missverstanden
Dies liegt daran, dass es ein Prozess ist, der die Augen öffnet wie das Leben: Sie verstehen OO immer mehr mit Erfahrung und beginnen, bestimmte Muster zu vermeiden und andere einzusetzen, wenn Sie klüger werden. Eines der besten Beispiele ist, dass Sie die Vererbung für Klassen, die Sie nicht steuern, nicht mehr verwenden und stattdessen das
Fassadenmuster bevorzugen .
In Bezug auf Ihren Mini-Aufsatz / Ihre Frage
Ich wollte erwähnen, dass du recht hast. Wiederverwendbarkeit ist größtenteils ein Wunschtraum. Hier ist ein Zitat von Anders Hejilsberg zu diesem Thema (brillant) von hier :
Wenn Sie Anfänger bitten, ein Kalendersteuerelement zu schreiben, denken sie oft bei sich: "Oh, ich werde das beste Kalendersteuerelement der Welt schreiben! Es wird in Bezug auf die Art des Kalenders polymorph sein. Es wird Anzeigen haben, und Mungers und dies, das und das andere. " Sie müssen eine Kalenderanwendung in zwei Monaten versenden. Sie setzen all diese Infrastruktur in die Steuerung ein und verbringen dann zwei Tage damit, eine beschissene Kalenderanwendung darüber zu schreiben. Sie werden denken: "In der nächsten Version der Anwendung werde ich so viel mehr tun."
Sobald sie darüber nachdenken, wie sie all diese anderen Konkretisierungen ihres abstrakten Designs tatsächlich umsetzen werden, stellt sich jedoch heraus, dass ihr Design völlig falsch ist. Und jetzt haben sie sich selbst in eine Ecke gemalt und müssen das Ganze rauswerfen. Ich habe das immer und immer wieder gesehen. Ich glaube fest daran, minimalistisch zu sein. Versuchen Sie nicht, einen Rahmen für die Lösung eines bestimmten Problems einzurichten, es sei denn, Sie lösen das allgemeine Problem tatsächlich, da Sie nicht wissen, wie dieser Rahmen aussehen soll.