Was kann OOP-Code leisten, was prozeduraler Code nicht kann? - Seite 2

 
Doerk Hilger:
Die Programmierung von GUIs war das, was ich die meiste Zeit meiner Zeit als Programmierer gemacht habe. Es ist nicht möglich, ein komplettes GUI zu programmieren, das in mehrere Richtungen durch if then else kommunizieren muss. Man bräuchte so viele Anweisungen, dass der Code unlesbar und am Ende viel zu langsam werden würde, was dazu führen würde, dass man das Ziel nicht erreicht. Tatsache.

Ich werde kein GUI in einer prozeduralen Sprache bauen, um zu beweisen, dass Sie falsch liegen. Aber ich könnte es ohne jeden Zweifel.

Übrigens ist es auch einfach, unlesbaren und viel langsameren Code in OOP zu programmieren, und wie Sie wissen, ist die Metaquotes Standard Library ein guter Beweis dafür.

 
Doerk Hilger:

...

Da eine CPU keine Ahnung von OOP hat, kann man natürlich auch alles ohne programmieren, indem man einfach Zeiger und komplexe Arrays verwendet. Aber das ist absurd. Ich könnte auch 10000 Leute einstellen, die meinen Bildschirminhalt quasi in Echtzeit auf Film zeichnen und sequentiell per Lichtprojektor an die Wand beamen. Ist das auch zielführend?

Sind Sie der Meinung, dass das Windows-Betriebssystem eine gute Benutzeroberfläche bietet? Soweit ich weiß, ist es in C geschrieben, einer prozeduralen Sprache, nicht OOP.

Du liegst falsch, Dirk, wenn du glaubst, dass ein komplexes Programm nur mit OOP erstellt werden kann. Du solltest lieber erklären, warum es besser ist, es mit OOP zu programmieren.

 
Doerk Hilger:
Ach komm schon ;) Nicht wirklich ;) Wenn etwas natives den Job irgendwie komisch machen könnte, dann seine Zeiger, aber es gibt Einschränkungen in MQL. Wenn dann noch ... der Code würde absurd werden.
Funktionszeiger wurden bereits in MQL5 eingeführt, und MQL4 wird dieses Feature wahrscheinlich auch unterstützen. Der prozedurale Code wird NICHT absurd sein, weil er viele Jahre lang die einzige Art der Programmierung war, bevor OOP zum Mainstream wurde. Der prozedurale Code wird im Allgemeinen komplexer und schwieriger zu verstehen sein im Vergleich zu analogem OOP - das ist alles.
 
Alain Verleyen:
Ich bezweifle stark, dass OOP eine kürzere Art der Kodierung ist.
Natürlich meine ich nicht den trivialen Fall einer Funktion, sondern eine Art von Aufgabe in der realen Welt, die Code-Zerlegung, Abhängigkeitssteuerung und andere ähnliche Mitarbeiter erfordert.
 
Alain Verleyen:

Sind Sie der Meinung, dass das Windows-Betriebssystem eine gute grafische Benutzeroberfläche bietet? Soweit ich weiß, ist es in C geschrieben, einer prozeduralen Sprache, nicht OOP.

Du liegst falsch, Dirk, wenn Du glaubst, dass ein komplexes Programm nur mit OOP erstellt werden kann. Du solltest lieber erklären, warum es besser ist, es mit OOP zu programmieren.

Ich habe GUIs in Assembler programmiert, komplett. Aber in Assembler kann ich mit Zeigern arbeiten, in C kann ich mit Zeigern arbeiten und natürlich ist die Basis von Windows nicht OOP, aber wir reden über MQL, das void-Zeiger nicht nativ unterstützt und deshalb wird man nicht in der Lage sein, komplexe GUIs mit nur if then else zu programmieren, zumindest nicht mit einem Ergebnis, das ohne große Leistungseinbußen verwendet werden kann.

Und diese Antwort beinhaltet bereits die Frage, warum es mit OOP besser ist - wobei "besser" noch der falsche Ausdruck ist. Die OOP-Methode implementiert die Verwendung solcher Zeiger, ohne dass man gezwungen ist, sich mit diesen auseinanderzusetzen. Intern wird OOP mit mehrdimensionalen Arrays für Funktions- und Variablenzeiger realisiert. Der Versuch, so etwas zu programmieren, kommt dem Versuch gleich, ein Rad neu zu erfinden, das niemals so gut rollen wird wie das, das man bereits vor sich hat.

 
Doerk Hilger:

Ich habe GUIs in Assembler programmiert, vollständig. Aber in Assembler kann ich mit Zeigern arbeiten, in C kann ich mit Zeigern arbeiten und natürlich ist die Basis von Windows nicht OOP, aber wir reden hier über MQL, das void-Zeiger nicht nativ unterstützt und daher wird man nicht in der Lage sein, komplexe GUIs mit if then else zu programmieren, zumindest nicht mit einem Ergebnis, das ohne große Performanceeinbußen verwendet werden kann.

Und diese Antwort beinhaltet bereits die Frage, warum es mit OOP besser ist - wobei "besser" noch der falsche Ausdruck ist. Die OOP-Methode implementiert die Verwendung solcher Zeiger, ohne dass man gezwungen ist, sich mit diesen auseinanderzusetzen. Intern wird OOP mit mehrdimensionalen Arrays für Funktions- und Variablenzeiger realisiert. Der Versuch, so etwas zu programmieren, kommt dem Versuch gleich, ein Rad neu zu erfinden, das niemals so gut rollen wird wie das, das man bereits vor sich hat.

Ich bin kein GUI-Spezialist, also werde ich nicht weiter argumentieren. Ich habe Ihren Standpunkt verstanden: OOP erlaubt es, komplexe Software zu erstellen, die sonst weniger effizient wäre oder zu viel Arbeit bedeuten würde.
 

Es ist nur meine persönliche Vorliebe aufgrund meiner geringen(!) Erfahrung!

1) Ich mag z.B. Java nicht, weil ich 99% der Zeit nach einer Funktion suche, ohne zu wissen, wie sie heißt, ob sie existiert oder nicht und ob ich sie überhaupt selbst programmieren muss ...

2) Ich mag C++ nicht, weil ich mehr schreiben muss, als ich es bei einer skriptähnlichen Sprache wie mq4 oder sogar Perl tun würde.

3) Ich mag C++ nicht, weil ich, wenn ich den Code eines anderen verstehe, von Datei zu Datei springen muss, in der ich nur Funktionen mit 2,3 Zeilen finde, was es wirklich schwer macht, herauszufinden, was und wie die s.g. berechnet wird. Natürlich gibt es Erklärungen wie "Berechnung der Haltestelle", aber die Berechnungsprozedur ist auch auf mehrere Funktionen in verschiedenen Dateien aufgeteilt.

4) Ich bin absolut zufrieden mit enum und Arrays von enum-Variablen. Ich muss keine imaginären realen Objekte programmieren. GUIs könnten ein anderes Problem sein, da sie aus vielen anderen Dingen bestehen, die als Objekte codiert werden könnten, um sie einfach wiederverwenden zu können. Aber wie viele verschiedene Objekte braucht ein EA? Eines für die Positionen? Wenn es viele verschiedene "Objekte" (GUI) gäbe, könnte das helfen - aber ich sehe sie hier nicht.

5) Schließlich kann MQ5 seinen Backtest immer noch nicht auf Kunden-Ticks ausführen:( <Edited by moderator as off-topic : dies hat nichts mit mql5 zu tun, sondern mit MT5>

 
ich habe wirklich Respekt vor jemandem, der den Zusammenbau programmiert, man muss ein gutes Wissen darüber haben, wie die Hardware selbst funktioniert, einfach erstaunlich, hart, was heute niemand benutzt
 
coringajoker:
ich habe wirklich Respekt vor jemandem, der Assemble programmiert, man muss ein gutes Wissen darüber haben, wie die Hardware selbst funktioniert, einfach erstaunlich, was heute niemand mehr benutzt

Ich programmiere es nicht mehr, aber in der Vergangenheit wirklich hauptsächlich. Auf Intel 80x86 Chips war es die einzige Chance, einen wirklichen Vorsprung in Bezug auf die visuelle Leistung zu erreichen. Und natürlich ist es ein Basiswissen, das ich nicht mehr missen möchte, auch wenn ich es im Detail nicht mehr brauche, aber man weiß immer, was am Ende mit seinem Code passiert und man weiß, wie man das als Vorteil im Hinblick auf die Ausführungsgeschwindigkeit nutzen kann.

Ja, die "guten" alten Zeiten ;) ... Aber auch verrückt, es gab nicht einmal Variablen, keine echten Funktionen, kein if then else, nur Register, Stacks, Interrupts und Speicheradressen. Verrückte Scheiße :)

 

OOP ist ein Werkzeug zur Aufteilung von Code in kleine wiederverwendbare Teile. Aber der beste Teil sind die Vorlagen. Diese Funktion ermöglicht eine Vereinfachung des Codes. Das beste Beispiel ist die Array-Klasse. In Java müssen Sie eine Klasse für den Typ erstellen. In C++ und Mql5 kann man sie in einer Klasse haben, was redundanten Code reduziert und einige Probleme umgeht, wenn man Primitive und Objekte mischt.

PS: Was ASM betrifft, so ist es eine alte Schule. Ich habe es vor den ersten Protect-Mode-Compilern benutzt und es war lustig, die Beschränkungen zu umgehen. 64K-Segmente mit Selektoren waren der Alptraum der Programmierer in dieser Zeit. Jedes Mal, wenn man an der falschen Stelle geschrieben hat, musste man den Computer neu starten :)