Eine Frage an die OOP-Experten. - Seite 9

 
Roman:

In C++ kommt das Verständnis von OOP nicht sofort, ich habe etwa anderthalb Jahre später begonnen, mich mit OOP zu beschäftigen, nachdem ich den prozeduralen Ansatz verstanden hatte.

Das tat ich auch - nach und nach... und das volle Verständnis kommt erst nach 4-5 Jahren (und das ist normal für einen normalen Menschen)

 
Igor Makanu:


ZS: Wie kann ich die Farbe der Schaltfläche ändern? - das vorherige Objekt löschen und eine neue Schaltfläche in einer anderen Farbe erstellen? - und wie erhält man den Status der Schaltfläche? - und wenn es sich um ein Farbschema für Hunderte von Schaltflächen handelt - alle wieder löschen und neue erstellen? ;)

Wie funktioniert das in MQ?

class CButton : public CWndObj :

private:
   CChartObjectButton m_button;             // chart object
..
virtual bool      OnSetColor(void)             { return(m_button.Color(m_color));                }

class CChartObjectText : public CChartObject

class CChartObject : public CObject :

bool CChartObject::Color(const color new_color) const
  {
//--- check
   if(m_chart_id==-1)
      return(false);
//--- result
   return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_COLOR,new_color));
  }

class CWndObj : public CWnd :

color             m_color;               // object color
...
bool CWndObj::Color(const color value)
  {
//--- save new value of parameter
   m_color=value;
//--- call virtual event handler
   return(OnSetColor());
  }


Daher genügt es, der Klasse CButton eine Funktion hinzuzufügen:

virtual bool      OnSetColor(uint clr)         { return(m_button.Color(clr));  }
 
Nikolai Semko:

Und wie funktioniert das in MQ?

class CButton : public CWndObj :

class CChartObjectText : public CChartObject

class CChartObject : public CObject :

class CWndObj : public CWnd :


Alles, was Sie tun müssen, ist, der Klasse CButton eine Funktion hinzuzufügen:

In Ordnung, alle OOP-Methoden sehen so aus, sogar in MQL - ich habe den Quellcode gesehen, sogar in Delphi, sogar in VS - die Codestruktur und Logik ist immer die gleiche


Schauen Sie, ich habe diesen Kanal in meinen Abonnements, im Allgemeinen habe ich eine positive Sicht auf den Autor, und es gibt sogar eine Wiederholung des Themas Ihres Videos, das den Streit begann:



und es gibt einen weiteren Kanal, den ich mag:


die Aussage des Videos ist in Bezug auf OOP diametral entgegengesetzt


meinen Beitrag gelöscht, die Diskussion wird länger dauern als geplant, ich bezweifle, dass ich auf Einzelheiten warten werde, und eine Diskussion über "sphärische OOP" ohne praktischen Nutzen ist nicht die beste Idee

 
Igor Makanu:

Alle OOP-Techniken sehen so aus, sogar in MQL - ich habe mir den Quellcode von SB angesehen, sogar in Delphi, sogar in VS - die Codestruktur und Logik ist immer die gleiche


Schauen Sie, ich habe diesen Kanal in meinen Abonnements, im Allgemeinen habe ich eine positive Sicht auf den Autor, und es gibt sogar eine Wiederholung des Themas Ihres Videos, das den Streit begann:


und es gibt einen weiteren Kanal, den ich mag:


die Aussage des Videos ist in Bezug auf OOP diametral entgegengesetzt


ich habe meinen Beitrag gelöscht, die Diskussion wird länger dauern als geplant, ich bezweifle, dass ich auf Einzelheiten warten werde, und die Diskussion über "sphärische OOP" ohne praktischen Nutzen ist nicht die beste Idee

Um ehrlich zu sein, fange ich selbst gerade erst an, mich mit der Idee von OOP zu beschäftigen. Ich stimme Egor Bugaenko eher intuitiv und aufgrund der wenigen Erfahrungen, die ich bereits habe, zu.
Außerdem weiß ich aus rein philosophischer Sicht, dass Kompliziertheit oft in eine Sackgasse führt, daher denke ich, dass das Schema "das Ganze, bestehend aus einfachen Komponenten" perfekter ist als "das Ganze, bestehend aus einer komplexen Komponente"
.
Nachdem
ich diesesVideo gesehen habe, werde ich versuchen, mich an die folgende Logik und das folgende Paradigma zu halten:
Wenn es an einem Punkt so aussieht, als ob der einzige Weg zur Lösung des Problems in einer schwerfälligen Komplikation besteht, dann ist es an der Zeit, es in einfachere Elemente zu zerlegen. Wenn es unmöglich erscheint, bedeutet das, dass wir ein falsches Konzept gewählt haben und es ändern und den gesamten Code neu schreiben müssen. Ich denke, das wird in Zukunft Zeit sparen.

 

Es gibt viele Varianten. Es kommt ganz darauf an, was Sie brauchen und wofür Sie die Phantasie haben. Zum Beispiel dies.

class A
  {
public:
                     A(void)  {    };
                    ~A(void)  {    };
  };
  
class B
  {
public:
                     B(void)  {    };
                    ~B(void)  {    };
  };

class C
  {
public:
                     C(void)  {    };
                    ~C(void)  {    };
  };

struct STest
  {
   A a[];
   B b[];
   C c[];
  } test[];
 
Igor Makanu:

meinen Beitrag gelöscht, die Diskussion wird länger dauern als geplant

Peters Themen sind ein unbarmherziges Element, das alles mit sich reißt, was ihm in den Weg kommt )), dies ist nur eine Einführung, vor uns liegt der Ausgang zum "Core-Engine-Konzept" und Peter hat da mehr Erfahrung ))).

 
Nikolai Semko:

Nachdem ich also diesesVideo gesehen habe, werde ich versuchen, mich an die folgende Logik und das folgende Paradigma zu halten:
Wenn es an einem Punkt so aussieht, als ob der einzige Weg zur Lösung des Problems in einer schwerfälligen Komplikation besteht, dann ist es an der Zeit, es in einfachere Elemente zu zerlegen. Wenn es unmöglich erscheint, bedeutet das, dass wir ein falsches Konzept gewählt haben und es ändern und den gesamten Code neu schreiben müssen. Ich denke, das wird in Zukunft Zeit sparen.

In der Theorie funktioniert das, in der Praxis hängt es von der Branche ab, in der Sie arbeiten, abgesehen von der Spieleentwicklung, wo jeder Fehler durch die Hardware des Spielers kompensiert wird, oder von Bürosoftware, wo Fehler nicht kritisch sind - wir werden sie später beheben oder umschreiben, gibt es Bereiche, in denen Sie keine Fehler machen dürfen, ich habe in der Produktionsautomatisierung gearbeitet, und Automatisierung ist keine Glühbirne, und Energieindustrie - Stromturbinen. Software und Automatisierung "ein Wagen und ein Wagen" - Rack ACS, ACS, Vibrationskontrolle, Bediener-Konsolen, und Steuerungen und Sensoren von Aktoren, und es funktioniert alles gleichzeitig in einem komplexen, jeder Fehler in das Konzept - im besten Fall ist es ein Not-Aus, im schlimmsten Fall - Zerstörung von Anlagen und Sachschäden.

Was ist der Grund? - Denn der Code muss in erster Linie wirksam sein! Alles, was seit Jahren geschaffen wurde, ist auf "falsche Verwendung von OOP" geschrieben, und Innovatoren... Setzen Sie sich mit einem Glas Bier hin und träumen Sie davon, wie die Menschheit Microsoft und Google in die Irre geführt hat - das ist cool, aber bis jetzt gibt es keine Rechenschaft

 
A100:

Sie waren der erste, der mir geschrieben hat (was bedeutet, dass Sie betroffen sind), ich habe Alexey Viktorovs Fragen über die Standardbibliothek beantwortet

Die Frage war rhetorisch. War das nicht klar?

 
Alexey Viktorov:

Die Frage war rhetorisch. War das nicht klar?

Die rhetorische Frage enthält eine offensichtliche Aussage - ich habe nicht verstanden, worum es bei der Aussage ging. Können Sie das erklären?
 
A100:
Eine rhetorische Frage enthält eine offensichtliche Aussage - ich habe nicht verstanden, was die Aussage war. Können Sie das erklären?

Eine rhetorische Frage kann in keiner Weise eine Behauptung enthalten wie jede andere Frage. Eine Frage ist immer noch eine Frage. Es ist dieselbe Frage, aber sie verlangt keine Antwort, erwartet keine Antwort. Eine Frage ins Nirgendwo.