MQL5-Schulung - Seite 19

 
papaklass:
Lassen Sie mich Ihnen eine Frage stellen. Was ist der grundlegende Unterschied zwischen prozeduraler Programmierung und OOP? Ein paar Worte, das heißt, die Essenz des Unterschieds.

Zunächst einmal setzt auch der prozedurale Ansatz Strukturen voraus, denn ohne sie ist es schwierig. Dies ist zumindest eine Art der Datenorganisation.

OOP macht es recht einfach, abstrakte Einheiten und die Beziehungen zwischen ihnen in der Entwurfsphase zu identifizieren. Und dann kann man sie einfach kodieren, auch einzeln, ohne sich besonders um die Besonderheiten der Implementierung zu kümmern.

Und das Ganze sieht logischer und lesbarer aus. Und es geht oft schneller. Und die Hauptsache ist, dass sie schneller umgesetzt wird. Trotz der Tatsache, dass wir vielleicht mehr Code haben.

 
papaklass:

Ich wollte, dass Sie Ihr Verständnis des Themas zum Ausdruck bringen und mir keine buchhalterische Formulierung geben. Nein heißt nein. Ich werde Ihnen von mir erzählen.

Nun, ich habe Ihnen keine "Buchformulierung" gegeben :) Ich habe überhaupt nichts formuliert - mit einer Erklärung. Ich habe einfach angenommen, dass es sich um eine Prüfungsfrage handelt, deren Antwort Sie dank der Pille bereits kennen. Und so war es dann auch :) Ich habe mich nicht geweigert, über persönliche Erfahrungen zu sprechen.

Manchmal genügt es, das Phänomen zu "spüren" und ohne philosophische Fragen wie "wie kann das sein" und "was ist der tiefere Sinn" zu stellen, einfach am Beispiel zu verstehen, wie es funktioniert. Der Verweis im Referenzhandbuch auf Tetris hat mir gereicht, und dieses Beispiel hat für den allerersten Anfang gereicht:

Je nachdem,welches Klassenobjekt erstellt wird, wird eine virtuelle Funktion der einen oder anderen abgeleiteten Klasse aufgerufen.

void CTetrisField::NewShape()
  {
//--- случайным образом создаём одну из 7 возможных фигур
   int nshape=rand()%7;
   switch(nshape)
     {
      case 0: m_shape=new CTetrisShape1; break;
      case 1: m_shape=new CTetrisShape2; break;
      case 2: m_shape=new CTetrisShape3; break;
      case 3: m_shape=new CTetrisShape4; break;
      case 4: m_shape=new CTetrisShape5; break;
      case 5: m_shape=new CTetrisShape6; break;
      case 6: m_shape=new CTetrisShape7; break;
     }
//--- отрисовываем
   m_shape.Draw();
//---
  }

Die intuitive Erstellung von Objekten, deren Verhalten sich in Abhängigkeit von den Ausgangsdaten unterscheidet, war ausreichend zu sehen. Als nächstes habe ich die gesamte Tetris-Datei aus dem Forum angefordert, sowie die Materialien der Referenz, Bibliotheken usw. Und dann ging es auch schon los. Im Forum gibt es viele Fragen zu diesem Thema.

papaklass:

Nachdem ich eine Reihe von Informationen auf der Website gelesen habe, verstehe ich immer noch nicht, was OOP ist.

Wir haben einfach einen grundlegend anderen Ansatz. Ich habe mich nicht besonders gefragt, was OOP aus wissenschaftlicher Sicht ist". - Um das Wesentliche nicht hinter einer Fassade aus neuen und unverständlichen Begriffen zu verlieren.

Ich habe mir die vorhandenen Beispiele genau angesehen.

papaklass:

Nachdem ich eine Menge Informationen auf der Website gelesen hatte, verstand ich immer noch nicht, was OOP ist.

Die MQL5-Referenz / Grundlagen / Objektorientiertes Programmieren. Lesen Sie einfach die Seite. Offensichtlich reichte mir das - ohne dass ich weitere Definitionen in Materialien Dritter nachschlagen musste.

 
papaklass:

Die Antwort auf meine Frage:

Bei der produktiven Programmierung liegt der Schwerpunkt auf Aktionen (Verben), während sich die objektorientierte Programmierungauf Objekte oder Entitäten (Substantive) konzentriert. Dies ist der Hauptunterschied.


In Theorie und Praxis ist das so:

Die prozedurale Programmierung beantwortet die Frage, was zu tun ist (Verben) ,
Objektorientierte Programmierung Verben und beschreibt(Adjektive) das Objekt (Substantive).

Das heißt, OOP ist ein verallgemeinernder Überbau von Code zu sinnvollen Sätzen mit vielen Teilen der Sprache.


Wer nur in Verben spricht, darf in Verfahren leben.

Wer seinen Code erzählen will, soll ihn mit OOP schreiben.


PS.

Wie sehr haben wir diese ganzen Programmierer-Theoretiker satt, verdammt noch mal.

Demnächst werde ich das Thema "OOP vs. Prozeduren" gnadenlos niedermachen.
 
sergeev:

PS.

Ich habe die Nase voll von all diesen Programmiertheoretikern, verdammt noch mal.

Bald werde ich die Themen "OOP vs. Prozeduren" gnadenlos niedermachen.
Warum muss man sie auf einmal "töten"? Die meisten Anfänger in MQL5 sind mit der "prozeduralen Programmierung" vertraut. Und wenn sie Fragen zur Notwendigkeit und Bedeutung von OOP haben, müssen diese geduldig erklärt/verstanden werden. Wie ein Lehrer in der Schule - Jahr für Jahr das Gleiche. Erklären Sie geduldig - und sagen Sie ihnen nicht, dass sie sich verpissen sollen, nur weil der Lehrer es leid ist, das Thema zu wiederholen.
 
sergeev:

PS.

Wie sehr haben wir die Nase voll von all diesen Programmiertheoretikern, verdammt noch mal.

Bald wird das Thema "OOP vs. Prozeduren" gnadenlos ausgemerzt werden.

"Anstatt die Interpunktion nach Belieben zu arrangieren, schreiben Sie ein Glossar, und es gibt niemanden, den Sie "erbarmungslos töten" müssen.

Aber wenn Sie "Praktiker" von OOP lesen - das ist wie eine "Kaste" von hochgesinnten Experten in OOP.

MQL5 ist eine Sprache für alle Ebenen des Verständnisses und der Fähigkeiten, nicht nur für die Aussteiger - die Standardbeispiele von Indikatoren und Expert Advisors beweisen dies.

Eine Programmiersprache ist nicht das Ziel, sondern das Mittel. Wenn das PP ausreicht, um den Zweck zu erreichen - dann soll es so sein. Wenn es für jemanden einfacher und klarer ist, OOP zu verwenden, dann soll es so sein. Und um das Ziel zu erreichen - es gibt keinen grundlegenden Unterschied - vor allem in 90% der Low-Code mikrofunktionalen Indikatoren und Expert Advisors, die hauptsächlich geschrieben werden.

 

papaklass:

Wenn man zu Beginn eines Kurses auf einen Satz wie diesen stößt, ist sofort klar, worum es in dem ganzen Buch geht. Und irgendwie passt dann alles zusammen. Sie wissen, dass Attribute Objekteigenschaften sind, dass Implementierungen und Methoden dasselbe sind (Funktionen) und schließlich, dass Klassen aus Objekten bestehen. Objekte haben nicht nur Attribute (Eigenschaften) und Methoden (Funktionen), sondern sie können auch miteinander interagieren. Gleichzeitig brauchen sie (die Objekte) die Attribute und Methoden anderer Objekte nicht zu kennen. So werden aus diesen Bausteinen, die auch untereinander interagieren, Klassen gebildet.

Du hast alles so durcheinander gebracht, dass du nicht mal mehr Brei daraus machen kannst))) Es kann nicht sein, dass es in einem Buch steht.
 
abolk:

Eine Programmiersprache ist kein Zweck, sondern ein Mittel. Wenn PP ausreicht, um das Ziel zu erreichen, dann soll es so sein. Wenn OOP für jemanden klarer und einfacher ist, dann soll es so sein.

Weiser. Nach meiner eigenen Erfahrung werden die Indikatoren für die einzelnen Währungen auf PP geschrieben. Und der Multi-Currency Expert Advisor ist mit OOP geschrieben (denn ohne OOP - in meinem Fall - wäre er gar nicht erschienen).
 

Как уже надоели все эти программистские теоретики, блин. 

Bald werden die "OOP vs. Prozeduren"-Threads gnadenlos gelöscht werden.

Das liegt daran, dass die Menschen die Vor- und Nachteile, die Orte und die Möglichkeiten der Nutzung beider nicht verstehen. Ein Artikel mit solchen einfachen Beispielen: PP wird für diese Aufgabe_1 solche und solche Nachteile bringen, OOP wird für diese Aufgabe_1 solche und solche Nachteile bringen; PP wird für diese Aufgabe_2 solche und solche Nachteile bringen, OOP wird für diese Aufgabe_2 solche und solche Nachteile bringen... Ich denke, es ist wichtig, dem Vergleich von Klassen und Schnittstellen mehr Aufmerksamkeit zu schenken, wenn letztere in five auftauchen, da die Feinheiten und Unterschiede für diejenigen, die neu in OOP sind, kompliziert sein können. Und das alles mit der Tendenz, einfache Probleme zu lösen, und das ist die Schwierigkeit - die Erklärungen und Beispiele müssen so einfach und kurz wie möglich sein, aber die Prinzipien von PP und OOP anwenden.

Dann wäre es möglich, einen Thread zum Absturz zu bringen, indem man ihn an einen Ort schickt, an dem alles in Regalen mit einfachen Anwendungsbeispielen geordnet ist, die nach bestimmten Themen geordnet sind.

Yedelkin:
Weiser. Nach meiner eigenen Erfahrung werden Ein-Währungs-Indikatoren auf PP geschrieben. Und der Multi-Currency Expert Advisor ist mit OOP geschrieben (ohne OOP wäre er gar nicht erschienen).
Lieber Yedelkin! Ich kann Ihnen den prozedural entworfenen Multicurrency-Kernel zusenden, wenn Sie daran interessiert sind (er funktioniert per Open Bar). Der Code ist für 4 geschrieben, aber er funktioniert auch auf 5 - Sie können die Leistung beider Varianten damit vergleichen.
 
-Alexey-: Lieber Yedelkin! Ich kann Ihnen einen prozedural entwickelten Multicurrency-Kernel schicken, wenn Sie daran interessiert sind (funktioniert mit Open Bar). Der Code ist für 4 geschrieben.
Ich bin dafür, dass alle so weit wie möglich in Frieden und Harmonie leben. Was meine Beiträge betrifft, so habe ich lediglich mein Verständnis von OOP beschrieben. Es (das Verständnis) mag dreimal falsch sein - aber es ist "mein" Verständnis. Ich schließe keineswegs aus, dass ein Teil der Probleme, die ich mit Hilfe von OOP lösen konnte, auch im Rahmen von PP gelöst werden können. Die Weisheit von Abolks Aussage ist genau das: "Wenn PP ausreicht, um das Ziel zu erreichen - dann soll esso sein. Wenn es für jemanden klarer und einfacher ist, OOP zu verwenden, dann soll esso sein". Ich habe einen Zusatz zu meinem Beitrag hinzugefügt.
 
Yedelkin:
Ich bin dafür, dass möglichst alle zusammen und in gegenseitigem Verständnis leben. Was meine Nachrichten betrifft, so habe ich ausschließlich mein Verständnis von OOP beschrieben. Es (das Verständnis) mag dreimal falsch sein - aber es ist "mein" Verständnis. Ich schließe keineswegs aus, dass ein Teil der Probleme, die ich mit Hilfe von OOP lösen konnte, auch im Rahmen von PP gelöst werden können. Die Weisheit von Abolks Aussage ist genau das: "Wenn PP ausreicht, um das Ziel zu erreichen - dann soll esso sein. Wenn es für jemanden einfacher und klarer ist, OOP zu verwenden, dann soll es so sein".
Ich stimme zu. Und um in der Stimmung für die eine oder andere Vorliebe zu kämpfen, ist es am besten, einen Wettbewerb zwischen den Forumsnutzern zu veranstalten. Es gibt eine solche Aufgabe ...: welcher Ansatz wird genau in Bezug auf Leistung, Speicherverbrauch, Code-Größe, Portabilität gewinnen ...?