Preguntas sobre POO en MQL5 - página 23

 
Vladimir Simakov:
Te lo mostraré más tarde esta noche. Ahora desde mi teléfono.

OK

No es un problema eliminar la herencia de la interfaz, se puede heredar de una clase base, pero en mi opinión habrá confusión en el código - será más difícil entender qué método será llamado, y con esta estructura de código - "Patrón OOP - Patrones de comportamiento - Estrategia".

Siempre y cuando tenga un constructor en cada estrategia, parece que estos constructores no son necesarios todavía... pero dejaré esta posibilidad, no es superflua

ZS: la propia clase base para todas las estrategias es bastante compacta también, sobre eso:

class CStrategy: public IStrategy
{
protected:
   SSettingsForOrder  m_setting;
   COrder *m_order;
   void RunStrategy();
   double CalcLot();
   double GetPrice(); 
};

Hasta ahora me gusta que la estructura del código sea legible y lógica, y lo más importante "en todos estos gestos" es hacer algún tipo de prototipo, que permita añadir rápidamente estrategias propias y probarlas.

Ya había escrito todo en principio, pero no me gusta el código - escribí funciones de servicio (para abrir una orden, calcular lotes, etc.) en estilo procedimental y luego escribí pequeñas clases con lógica y llamadas de estas funciones de servicio y decidí hacerlo lo mejor posible))

 
Igor Makanu:

OK

No es un problema eliminar la herencia de la interfaz, se puede heredar de una clase base, pero en mi opinión habrá confusión en el código - será más difícil entender qué método será llamado, y con esta estructura de código - "Patrón OOP - Patrones de comportamiento - Estrategia".

Siempre y cuando tenga un constructor en cada estrategia, parece que estos constructores no son necesarios todavía... pero dejaré esta posibilidad, no es superflua

ZS: la propia clase base para todas las estrategias es bastante compacta también, sobre eso:

Hasta ahora me gusta que la estructura del código sea legible y lógica, y lo más importante "en todo este asunto" es hacer algún tipo de prototipo, que permita añadir rápidamente estrategias propias y probarlas.

Ya había escrito todo en principio, pero no me gusta el código - escribí funciones de servicio (para abrir una orden, calcular lotes, etc.) en estilo procedimental y luego escribí pequeñas clases con la lógica y las llamadas de estas funciones de servicio y decidí hacerlo lo mejor posible))

//+------------------------------------------------------------------+
class CStrategy
{
protected:
   int x;
public:
   CStrategy(int _x):x(_x){}
   virtual void Algorithm()=0;};
//+------------------------------------------------------------------+
class CStrategy_01:public CStrategy
{
public:
   CStrategy_01():CStrategy(1) {Print(__FUNCTION__);}
   void Algorithm()                 {Print(__FUNCTION__,", x = ",x);       } };
//+------------------------------------------------------------------+
class CStrategy_02:public CStrategy
{
public:
   CStrategy_02():CStrategy(2) {Print(__FUNCTION__);}
   void Algorithm()                 {Print(__FUNCTION__,", x = ",x);       } };
//+------------------------------------------------------------------+
class Context
{
private:
   CStrategy         *s;
public:
   Context(CStrategy* _strategy):s(_strategy) { Print(__FUNCTION__);}
   ~Context()                       { delete s;                            }
   void              GetStrategy()  { s.Algorithm();                       } };
//+------------------------------------------------------------------+
Context c1(new CStrategy_01);
Context c2(new CStrategy_02);
//+------------------------------------------------------------------+
void OnStart()
{  c1.GetStrategy();
   c2.GetStrategy(); }

Eso me parece mejor.

 
Vladimir Simakov:

A mí me parece mejor así.

esencialmente lo mismo, ¡pero no por el libro! ))))

ZS: De todos modos, he jodido la interfaz, ¡dejadlo estar, sólo para que se vea!

 
Igor Makanu:

esencialmente lo mismo, ¡pero no por el libro! ))))

ZS: He atornillado la interfaz de todos modos, ¡que sea, puramente por el espectáculo!

Al estilo de los profesionales)))
 
Vladimir Simakov:
Sólo en el estilo de los pluses)))

no hay mucha gente que utilice C#, o más bien todos los programadores de aplicaciones se han pasado a C#, y sólo los grandes desarrolladores de software utilizan C#

todos los ejemplos en C# son a través de interfaces, por lo que está claro que son inútiles .... No quiero entrar en una discusión, pero se puede escribir todo sin interfaces, el concepto, el estilo... pero el concepto, el estilo y otras nieblas cerebrales me dicen que así es como Microsoft solía escribir los ejemplos en C# - ¡siéntate y escríbelos así también!

)))

 
Igor Makanu:

no hay mucha gente que utilice C#, o más bien todos los programadores de aplicaciones se han pasado a C#, y sólo los grandes desarrolladores de software utilizan C#

todos los ejemplos en C# son a través de interfaces, por lo que está claro que son inútiles .... No quiero entrar en una discusión, pero se puede escribir todo sin interfaces, el concepto, el estilo... pero el concepto, el estilo y otras nieblas cerebrales me dicen que así es como Microsoft solía escribir los ejemplos en C# - ¡siéntate y escríbelo así también!

)))

Se trasladó porque es inconveniente escribir en los pluses bajo .NET, y Sharp fue diseñado originalmente como un lenguaje para dotnet. Esa es mi opinión personal, al principio escribía pluses en .NET, me parecía torpe.

Aunque... han añadido mucho a los nuevos profesionales, quizá sea más divertido.

 
Alexey Volchanskiy:

Cambiamos porque los pluses son inconvenientes para escribir en .NET, y Sharp fue desarrollado originalmente como un lenguaje para dotnet. Esta es mi opinión subjetiva, una vez que escribí en pluses bajo .NET, me quedé con una impresión de torpeza.

Aunque... han añadido mucho a los nuevos profesionales, quizá sea más divertido.

Justo ahora estoy escribiendo el formulario de windows para una tarea, toqué c++/cli y decidí no usarlo e imprimí c#.
 
Vladimir Simakov:
Justo ahora estoy escribiendo el formulario de windows para una tarea, toqué c++/cli y decidí olvidarlo e imprimí c#.

Sí, es más fácil en sharpe por un orden de magnitud. Y la velocidad es casi la misma, eso sin cli los profesionales ganan por un factor y medio.

 
Vladimir Simakov:
Justo ahora estoy escribiendo un formulario de windows para una tarea, toqué c++/cli y decidí no usarlo e imprimí c#.

Traté de tocar cli a principios de año ... Estuve satisfecho durante 2 días, la lógica inhumana de quien hizo este cli - la sintaxis es complicada, todo no es conveniente, hay muy poca información con ejemplos, imho o puro C++ o C# - google todo lo quiere, la sintaxis es clara - como resultado, usted toma y escribe

 
Igor Makanu:

Traté de tocar cli a principios de año ... La sintaxis es complicada, todo no es conveniente, hay muy poca información con ejemplos, imho - ya sea C++ puro o C# - todos los deseos son googleados, la sintaxis es clara - finalmente se obtiene y se escribe

Sharp nació alrededor del año 2000 y estaba en sus inicios, pero los pluses mandaban, así que hicieron un puente entre C++ y Dotnet para su popularización. Por cierto, Sharp fue creado por desarrolladores de Delphi y C++Builder, me preguntaba en ese momento cuántos conceptos comunes hay. Toma las mismas propiedades, eventos.