OOP Technologie Tod [geschlossen]

9

Ich habe schon oft von der aspektorientierten Programmierung gehört, hauptsächlich, dass es sich um die Technologie der "nächsten Generation" in der Programmierung handelt und OOP "töten" wird.

Ist es richtig? Wird OOP sterben oder was kann der Grund dafür sein?

Entmenschlicher
quelle

Antworten:

40

Immer wenn Ihnen jemand sagt, dass eine Softwaretechnologie eine andere tötet oder den gesamten Markt / die Nutzung / das Publikum dominiert, denken Sie daran:

Ein gesundes (dynamisches, aber stabiles) Ökosystem besteht aus einer Vielzahl sehr unterschiedlicher Arten.

Das bedeutet, dass jede neue hyped Technologie die Hype-Kurve durchläuft und am Ende durch Zeit und Erfahrung ihren spezifischen Zweck findet.

Hype-Kurve

Das bedeutet auch, dass ein so extremes Konzept wie die aspektorientierte Programmierung nützlich ist, wenn es benötigt wird, was bedeutet, dass es aufgrund impliziter Kosten nicht immer und nicht sehr oft vorkommt.

Aber es hat bereits seinen Platz, wie OOProgramming, wie generische Programmierung, wie funktionale Programmierung, wie prozedurale Programmierung usw.

Haben Sie bemerkt, dass die Sprachen, die am häufigsten verwendet (und kontrovers populär) und im wirklichen Leben weit verbreitet sind, "nicht rein" sind? Das liegt daran, dass sie durch das Zulassen mehrerer Paradigmen flexibler werden, um den Kontext im Laufe der Zeit zu ändern, und mehr Nutzungsnischen füllen.

Klaim
quelle
1
+1 für 'nicht rein'. Reine OOP - Sprachen sind insbesondere tot, mit Ausnahme sehr Nische Anwendungen / Akademiker.
jv42
Was würden wir als reine OO-Sprache betrachten? Smalltalk?
Zhehao Mao
20

OOP wird nicht wegen AOP sterben. AOP bietet einen gewissen Mehrwert, lebt jedoch in perfekter Koexistenz mit OOP. Ich denke nicht, dass funktionale Programmierung OOP töten wird. OOP ist für viele Arten von Problemdomänen zu gut geeignet. Es wäre nicht sinnvoll, es durch das Funktionsparadigma zu ersetzen.

user281377
quelle
1
Das ist sehr subjektiv. Ich denke nicht, dass OOP gut zu einer bestimmten Problemdomäne passt, sondern gut dazu, wie ein bestimmter Entwickler eine Lösung findet. OOP wird nicht sterben, weil Entwickler keine Paradigmenwechsel vornehmen können.
Raynos
6
Das klassische Beispiel, bei dem OOP gut passt, sind GUIs. Es ist schwer sich eine API für ein GUI-Toolkit vorzustellen, das nicht OO ist, auch wenn die Sprache nicht OO ist. (Zugegeben, so wird der Begriff Problemdomäne normalerweise nicht verwendet.) Um ein Beispiel für eine echte Problemdomäne zu geben, zu der OOP gut passt: Warehouse-Automatisierung. Bei der Modellierung der Lager- und Bergungsfahrzeuge und ihrer Aktivitäten fühlt sich OOP wie eine natürliche Passform an.
user281377
2
@ammoQ, GUIs sind schrecklich, wenn sie in OO ausgedrückt werden. Dies ist der Grund, warum alle APIs in Richtung DSLs (WPF und ähnliche) tendieren. Es ist nicht schwer, sich beispielsweise Tk vorzustellen - keine einzige Spur von OOP, aber dennoch ist es großartig (für die Programmierung, nicht für das Erscheinungsbild), viel besser als jedes der überfüllten Java OO-Toolkits. OOP passt sehr gut in alle agentenbasierten Simulationen (wie die von Ihnen aufgelisteten), ist jedoch nur ein winziger Teil der vorhandenen Probleme.
SK-Logik
6
Wenn ich mir die ersten Beispiele von tk ansehe, die ich finden konnte, wie ist das nicht OO? Aus dem Tutorial: "Widgets sind Objekte, Instanzen von Klassen, die Schaltflächen, Frames usw. darstellen." tkdocs.com/tutorial/concepts.html Darüber hinaus sind DSLs selbst sehr stark von der OO-Programmierung abhängig. Also verstehe ich nicht wirklich, was Sie sagen wollen?
Inka
3
@ Sk-Logik, @ammoQ, @ Raynos, @ jkocking, ich habe es zu einer eigenen Frage gemacht: programmers.stackexchange.com/questions/88385/… Ich wäre sehr interessiert, weitere Erklärungen dazu zu haben, ich bin sehr interessiert zu lernen.
Inka
12

Paradigmen kommen und gehen, aber Legacy-Code ist für immer. Es wird immer C ++ - Code zu warten geben, so dass OOP niemals vollständig aussterben wird.

John Bode
quelle
6
+1 für einen wirklich brillanten Satz: "Paradigmen kommen und gehen, aber Legacy-Code ist für immer"
NoChance
8

Kurze Antwort: Nein, das glaube ich nicht.

Längere Antwort: Soweit ich AOP verstehe, handelt es sich nicht um ein Programmierparadigma an sich (wie in, es ersetzt nicht OOP), sondern eher um eine Ergänzung, ein Toolkit, mit dem Sie kürzere Methoden und einfachere Klassen mit einfacher Verantwortung schreiben können , und so weiter. Aber es ersetzt nicht OOP.

Die Sache , die (zumindest teilweise) ersetzt oder erweitert OOP ist funktionale Programmierung, die eigentlich ist eine andere Programmierparadigma (obwohl es mit OOP gemischt werden kann, beispielsweise in der Scala Programmiersprache ). Es bevorzugt unveränderliche Datenstrukturen und alle Arten von ausgefallenen Funktionen, die OOP-Entwickler eher frustrieren, insbesondere wenn es um Parallelität geht.

Cthulhu
quelle
Funktionaler <-> Imperativ ist die Linie. OOP ist parallel dazu. Ich denke, das Verfahren ist am anderen Ende von OOP, aber ich bin mir nicht sicher. Natürlich ist es amüsant, dass das funktionale Paradigma älter ist als das OOP-Paradigma :)
Raynos
2
@ Raynos, es gibt keine gerade Linie. OOP ist nur eine winzige metalinguistische Abstraktion innerhalb einer riesigen (unendlichen) Menge möglicher abstrakter Sprachen. Und natürlich ist es extrem dumm, sich auf einen von ihnen zu beschränken.
SK-Logik
6

OOP wird heutzutage weniger erwähnt, da es in vielen Situationen als De-facto-Ansatz angenommen wird. AOP kam nie als Massenbewegung auf den Boden.

http://imgur.com/9VmKC


quelle
5

Ich erinnere mich, dass ich zum ersten Mal in einem OOPSLA '97 -Tutorial von aspektorientierter Programmierung gehört habe. Sie sagten, es würde OO schon damals töten. Seitdem ist OO nur über die wildesten Erwartungen hinaus gewachsen. AOP ist noch kaum bekannt und hat im Wesentlichen keine Auswirkungen auf die Computerbranche. Ich denke, die Antwort liegt auf der Hand, dass AOP kein OO-Killer ist.

Dunk
quelle
1

Schauen Sie sich einige vorhandene AOP-Systeme an. Sie hängen davon ab, dass Sie Code in irgendeiner Form geschrieben haben. Spring AOP setzt beispielsweise voraus, dass Sie Ihre Methoden für eine Klasse definiert haben. Castle Windsor unterstützt es in C #, einer objektorientierten Sprache.

Sie könnten theoretisch von OOP zu strukturierter Programmierung wechseln und trotzdem AOP beibehalten, aber in der Praxis wäre das schwierig. Es ist einfach, eine Unterklasse zu erstellen, die entsprechende Methode zu überschreiben, um die entsprechenden Vorher / Nachher-Filter aufzurufen, und diese im Verlauf der Abhängigkeitsinjektion weiterzugeben.

Es ist verdammt schwer im Vergleich zum Umschreiben statischer Methodenaufrufe, um zu einer Trampolinmethode zu gelangen, mit der die benutzerdefinierten Filter aufgerufen werden.

Von einem gemeinsamen Implementierungsstandpunkt aus erfordert AOP OOP.

Dhasenan
quelle
0

Während OOP sicherlich keine Silberkugel ist, kann das gleiche für AOP gesagt werden. Es unterstützt das komponentenbasierte Design. Im größeren Schema sind Ihre Komponenten jedoch die neuen Objekte, und die Komponentenschnittstellen sind im Grunde genommen eine Transaktionsliste von Methoden, was NICHT wahr ist.

Weiteres AOP und komponentenbasiertes Design unterstützen ein anämisches Datenmodell, an dem klügere Leute als ich Kritik üben.

http://martinfowler.com/bliki/AnemicDomainModel.html

(Ich weiß, der obige Artikel ist alt, aber überraschend relevant)

Das Fazit ist, dass AOP-Systeme hier bleiben werden, aber sie sind auch alles andere als perfekt. Kein System ist perfekt.

maple_shaft
quelle