2016-05-24 14 views
-1

Kupplung scheint schlechte Programmierpraxis zu sein. Warum befürworten OOPS dieses Paradigma? Als Beispiel habe ich Java-, .NET- und Android-Rechteckklassen betrachtet. Jeder definiert anders. Außerdem müssen Sie ein Rechteck instanziieren, um es zu zeichnen.oops, kupplung und opengl

Mit OpenGL ist das Zeichnen eines Rechtecks ​​nicht an ein Rechteckobjekt gekoppelt. Diese Entkopplung der Zeichnung eines Rechtecks ​​vom Objekt macht die API robuster. Sie können ein Rechteck als Lambda-ähnliche Funktion zeichnen, ohne ein Rechteckobjekt zu erstellen.

Das Verknüpfen von Aktionen mit Objekten kann eine Möglichkeit sein, Funktionen zu abstrahieren oder Komponenten zu erstellen. Doch scheint es mir die Nutzung zu beschränken und alles oder nichts durchzusetzen. Benutze entweder meine Objekte und Methoden oder nichts. Dann folgte eine Proliferation der gleichen Objekte, die mit unterschiedlichen Methoden unterschiedlich definiert wurden.

Bibliotheken neigen dazu, die Felder des Objekts in die Parameter zu zerlegen, die zur Ausführung einer Aufgabe erforderlich sind. Dies fügt nur dem Funktionsnamen hinzu. Z.B. In oops wird es in opengl "rectangle.draw()" sein: "drawRectangle (x1, y1, x2, Y2)".

Warum verbindet oops Zeichnung mit der Form. Scheint seltsam. Wenn Draw-Methoden auf Hardware zugreifen und eine neue GPU hinzugefügt wurde, muss jedes Objekt geändert werden, anstatt nur die Zeichnungsmethoden zu ändern, wenn sie nicht gekoppelt sind.

Ist Grafik eine Domäne, wo Oops Abstraktion nicht der beste Ansatz ist, ist eine bessere verfeinerte Frage.

Mit oops definieren wir nicht nur ein Objekt wie eine c-Struktur, sondern definieren, was mit dem Objekt gemacht werden kann, was sehr unterschiedlich ist. Dann koppeln wir, was mit dem Objekt zum Objekt gemacht werden kann. Dies führt zu unterschiedlichen Definitionen der gleichen Objekte. Und niemand kann davon ausgehen, alles zu wissen, was einem Objekt angetan werden kann.

Zum Beispiel möchten wir vielleicht ein Rechteck zu halbieren. Fügen Sie einem Rechteckobjekt eine neue Halbierungsmethode hinzu oder erstellen Sie eine Halbierungsfunktion, die eine Rechteckstruktur verwendet. Wenn neue Funktionalität hinzugefügt wird, ändert sich eine Struktur nicht, aber die Methoden des Objekts ändern das Objekt, da sie eng miteinander verbunden sind.

Consensus kann dann auf Struktur erreicht werden. Z.B. Ein Rechteck ist eine Struktur mit einer Länge und Breite, dargestellt als Zahlen. Was Sie mit einem Rechteck tun können, hängt davon ab, welche Bibliothek Sie auswählen.

+0

Was ist "OOPS"? Außerdem hat OpenGL kein 'drawRectangle'. –

+0

Oops ist objektorientierte Programmiersysteme. In opengl ist es etwas wie "glrectf (parameters)", um ein Rechteck zu zeichnen. Nicht rechteckig.gldrawf(). – Daryl

+0

Ich habe betont, dass Opengl scheint einen funktionalen Ansatz wie c, nicht oops Ansatz wie C++ zu nehmen. In dem Sinne, dass opengl-Funktionen nicht explizit an Objekte gebunden sind, möglicherweise implizit an Grafiktreiberobjekte gebunden sind. – Daryl

Antwort

0

Ich werde zuerst antworten. Die Entwicklung von 3-Tier-Systemen mit einem SQL-Backend, Business-Objekten als mittlere Schicht und der GUI als vordere Schicht, macht OOP überflüssig. Mit C#, so viel Wiederholung. Deine definierenden Dinge 3 mal.

Ich meine, SQL ist die ultimative Datenabstraktion. CRUD-Verhalten. Erstellen, lesen. Aktualisieren. Löschen. Behandelt Daten wie die fetch decode exe-Schleife der Interpretation REPL.

Sind diese Operationen an ein Objekt gebunden? Sind Assembly Anweisungen Objekt basiert? Mov Ax, Bx. In OOP wären dies Ax.mov (BX) -Bindungsoperationen an Objekte oder Register.

Nicht schimpfend.