Une question pour les experts de la POO. - page 9

 
Roman:

En C++, la compréhension de la POO ne vient pas tout de suite, j'ai commencé à m'intéresser à la POO environ un an et demi plus tard après avoir compris l'approche procédurale.

Je l'ai fait aussi - petit à petit... et la compréhension totale ne vient qu'après 4-5 ans (et c'est normal pour une personne ordinaire).

 
Igor Makanu:


ZS : comment changer la couleur du bouton ? - tuer l'objet précédent et créer un nouveau bouton d'une couleur différente ? - et comment obtenir l'état des boutons ? - et s'il s'agit d'un schéma de couleurs pour des centaines de boutons - les supprimer tous à nouveau et en créer d'autres ? ;)

Comment cela fonctionne-t-il dans MQ ?

class CButton : public CWndObj :

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

classe CChartObjectText : public CChartObject

classe 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));
  }

classe 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());
  }


Il suffit donc d'ajouter une fonction à la classe CButton:

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

Et comment cela fonctionne-t-il dans MQ ?

class CButton : public CWndObj :

classe CChartObjectText : public CChartObject

classe CChartObject : public CObject :

classe CWndObj : public CWnd :


Il suffit donc d'ajouter une fonction à la classe CButton:

d'accord, toutes les méthodes OOP ressemblent à cela, même en MQL - j'ai vu le code source, même en Delphi, même en VS - la structure du code et la logique sont toujours les mêmes.


Ecoutez, j'ai cette chaîne dans mes abonnements, en général, j'ai une opinion positive de l'auteur, et il y a même une reprise du thème de votre vidéo, qui a déclenché la dispute :



et il y a une autre chaîne que j'aime bien :


le propos de la vidéo est diamétralement opposé en termes de POO


J'ai supprimé mon message, la discussion prendra plus de temps que prévu, je ne pense pas que j'attendrai des détails, et discuter de la "POO sphérique" sans utilité pratique n'est pas la meilleure idée.

 
Igor Makanu:

Toutes les techniques de la POO ressemblent à cela, même dans MQL - j'ai regardé le code source de SB, même dans Delphi, même dans VS - la structure du code et la logique sont toujours les mêmes.


Ecoutez, j'ai cette chaîne dans mes abonnements, en général, j'ai une opinion positive de l'auteur, et il y a même une reprise du thème de votre vidéo, qui a déclenché la dispute :


et il y a une autre chaîne que j'aime bien :


le propos de la vidéo est diamétralement opposé en termes de POO


J'ai supprimé mon message, la discussion va prendre plus de temps que prévu, je ne pense pas que je vais attendre des détails, et discuter de la "POO sphérique" sans utilisation pratique n'est pas la meilleure idée.

Pour être honnête, je commence tout juste à me familiariser avec l'idée de la POO. Je suis d'accord avec Egor Bugaenko de manière plus intuitive et sur la base du peu d'expérience que j'ai déjà.
De plus, je sais, d'un point de vue purement philosophique, que la complexité mène souvent à une impasse. Je pense donc que le schéma "l'ensemble, constitué de composants simples" est plus parfait que "l'ensemble, constitué d'un composant complexe"
.
Donc, après avoir regardé
cettevidéo, je vais essayer de m'en tenir à la logique et au paradigme suivants :
Si, à un moment donné, il semble que la seule façon de résoudre un problème soit de le compliquer, il est alors temps de le décomposer en éléments plus simples. Si cela semble impossible, cela signifie que nous avons choisi un mauvais concept et que nous devons le changer et réécrire l'ensemble du code. Je pense que cela permettra de gagner du temps à l'avenir.

 

Il existe de nombreuses variantes. Tout dépend de ce dont vous avez besoin et de ce pour quoi vous avez de l'imagination. Par exemple ceci.

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:

j'ai supprimé mon message, la discussion va prendre plus de temps que prévu

Les sujets de Peter sont un élément impitoyable qui attire tout sur son passage ;)), ce n'est qu'une introduction, l'avant est la sortie vers le "concept du moteur central" et Peter a plus d'expérience dans ce domaine ;))).

 
Nikolai Semko:

Après avoir regardé cettevidéo, je vais doncessayer de m'en tenir à la logique et au paradigme suivants :
Si, à un moment donné, il semble que la seule façon de résoudre un problème soit de le compliquer, il est alors temps de le décomposer en éléments plus simples. Si cela semble impossible, cela signifie que nous avons choisi un mauvais concept et que nous devons le modifier et réécrire l'ensemble du code. Je pense que cela permettra de gagner du temps à l'avenir.

En théorie, cela fonctionnera, mais en pratique, cela dépend du secteur dans lequel vous travaillerez. À l'exception du développement de jeux, où toute erreur sera compensée par le matériel du joueur, ou des logiciels de bureautique, où les erreurs ne sont pas critiques - nous les corrigerons ou les réécrirons plus tard, il existe des domaines dans lesquels vous n'avez pas le droit à l'erreur. Logiciel et automatisation "un wagon et un wagon" - Rack ACS, ACS, contrôle des vibrations, consoles d'opérateur, et contrôleurs et capteurs d'actionneurs, et tout cela fonctionne simultanément dans un complexe, toute erreur dans le concept - au mieux c'est un arrêt d'urgence, au pire - la destruction de l'équipement et des dommages matériels.

Quel est l'intérêt ? - Parce que le code doit être efficace en premier lieu ! Tout ce qui a été créé depuis des années est écrit sur "l'utilisation incorrecte de la POO", et les innovateurs... on peut s'asseoir avec un verre de bière et rêver à la façon dont l'humanité de Microsoft et de Google s'est égarée - c'est cool ! mais jusqu'à présent, il n'y a aucune responsabilité.

 
A100:

Vous avez été le premier à m'écrire (ce qui signifie que vous êtes concerné), je répondais aux questions d'Alexey Viktorov sur la bibliothèque standard.

La question était rhétorique. Ce n'était pas clair ?

 
Alexey Viktorov:

La question était rhétorique. Ce n'était pas clair ?

La question rhétorique contient une affirmation évidente - je n'ai pas compris de quoi il s'agissait. Pouvez-vous expliquer ?
 
A100:
Une question rhétorique contient une affirmation évidente - je n'ai pas compris quelle était cette affirmation. Pouvez-vous expliquer ?

Une question rhétorique ne peut en aucun cas contenir une affirmation comme n'importe quelle question. Une question reste une question. C'est la même question, mais elle n'exige pas de réponse, n'attend pas de réponse. Une question à nulle part.

Raison: