Domande su OOP in MQL5 - pagina 23

 
Vladimir Simakov:
Ve lo mostrerò più tardi stasera. Ora dal mio telefono.

OK

Non è un problema rimuovere l'ereditarietà dall'interfaccia, si può ereditare da una classe base, ma secondo me ci sarà confusione nel codice - sarà più difficile capire quale metodo sarà chiamato, e con questa struttura di codice - "OOP pattern - Patterns of behavior - Strategy".

Ho sempre e comunque un costruttore in ogni strategia, sembra che questi costruttori non siano ancora necessari... ma lascerò questa possibilità, non è superflua

ZS: anche la classe base stessa per tutte le strategie è abbastanza compatta, a proposito:

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

Finora mi piace che la struttura del codice sia leggibile e logica, e la cosa più importante "in tutti questi gesti" è fare una sorta di prototipo, che permetterà di aggiungere rapidamente strategie stesse e testarle.

Avevo già scritto tutto in linea di principio, ma non mi piace il codice - ho scritto funzioni di servizio (per aprire un ordine, calcolare i lotti, ecc.) in stile procedurale e poi ho scritto piccole classi con la logica e le chiamate di queste funzioni di servizio e ho deciso di renderlo il più buono possibile)))

 
Igor Makanu:

OK

Non è un problema rimuovere l'ereditarietà dall'interfaccia, si può ereditare da una classe base, ma secondo me ci sarà confusione nel codice - sarà più difficile capire quale metodo sarà chiamato, e con questa struttura di codice - "OOP pattern - Patterns of behavior - Strategy".

Ho sempre e comunque un costruttore in ogni strategia, sembra che questi costruttori non siano ancora necessari... ma lascerò questa possibilità, non è superflua

ZS: anche la classe base stessa per tutte le strategie è abbastanza compatta, a proposito:

Finora mi piace che la struttura del codice sia leggibile e logica, e la cosa più importante "in tutti questi gesti" è fare una sorta di prototipo, che permetterà di aggiungere rapidamente strategie stesse e testarle.

Avevo già scritto tutto in linea di principio, ma non mi piace il codice - ho scritto funzioni di servizio (per aprire un ordine, calcolare i lotti, ecc.) in stile procedurale e poi ho scritto piccole classi con la logica e le chiamate di queste funzioni di servizio e ho deciso di renderlo il più buono possibile)))

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

Questo mi sembra meglio.

 
Vladimir Simakov:

A me sembra meglio così.

essenzialmente la stessa cosa, ma non secondo le regole! ))))

ZS: Ho comunque scopato sull'interfaccia, lasciate che sia, puramente per spettacolo!

 
Igor Makanu:

essenzialmente la stessa cosa, ma non secondo le regole! ))))

ZS: Ho avvitato l'interfaccia comunque, che sia, puramente per spettacolo!

Proprio nello stile dei professionisti)))
 
Vladimir Simakov:
Proprio nello stile dei plus)))

non molte persone usano C#, o meglio tutti i programmatori di applicazioni si sono spostati su C#, e solo i grandi sviluppatori di software usano C#

tutti gli esempi in C# sono tramite interfacce, quindi è chiaro che sono inutili .... Non voglio entrare in uno sproloquio, ma si può scrivere tutto senza interfacce, il concetto, lo stile... ma il concetto, lo stile e l'altro appannamento del cervello mi dicono che questo è il modo in cui Microsoft scriveva gli esempi in C# - basta sedersi e scriverli anche in quel modo!

)))

 
Igor Makanu:

non molte persone usano C#, o meglio tutti i programmatori di applicazioni si sono spostati su C#, e solo i grandi sviluppatori di software usano C#

tutti gli esempi in C# sono tramite interfacce, quindi è chiaro che sono inutili .... Non voglio entrare in uno sproloquio, ma si può scrivere tutto senza interfacce, il concetto, lo stile... ma il concetto, lo stile e l'altro appannamento del cervello mi dicono che questo è il modo in cui Microsoft scriveva gli esempi in C# - basta sedersi e scrivere anche in questo modo!

)))

Spostato perché è scomodo scrivere sui plus sotto .NET, e Sharp è stato originariamente progettato come un linguaggio per dotnet. Questa è la mia opinione personale, all'inizio ho scritto plus su .NET, mi sembrava goffo.

Anche se... hanno aggiunto molto ai nuovi professionisti, forse è più divertente.

 
Alexey Volchanskiy:

Abbiamo cambiato perché plus è scomodo da scrivere su .NET, e Sharp è stato originariamente sviluppato come un linguaggio per dotnet. Questa è la mia opinione soggettiva, una volta che ho scritto in plus sotto .NET, mi è rimasta un'impressione di goffaggine.

Anche se... hanno aggiunto molto ai nuovi professionisti, forse è più divertente.

Sto scrivendo solo ora windows form per un compito, ho toccato c++/cli e ho deciso di non usarlo e ho stampato c#.
 
Vladimir Simakov:
Sto scrivendo solo ora windows form per un compito, ho toccato c++/cli e ho deciso di lasciar perdere e ho stampato c#.

Sì, è un ordine di grandezza più facile su Sharpe. E la velocità è quasi la stessa, questo senza cli i professionisti vincono di un fattore e mezzo.

 
Vladimir Simakov:
Sto scrivendo solo ora un modulo windows per un compito, ho toccato c++/cli e ho deciso di non usarlo e ho stampato c#.

Ho cercato di toccare cli all'inizio dell'anno ... Sono stato soddisfatto per 2 giorni, la logica disumana di chi ha fatto questo cli - la sintassi è complicata, tutto non è conveniente, c'è pochissima informazione con esempi, imho o C++ puro o C# - google tutto il vuole, la sintassi è chiara - come risultato, si prende e si scrive

 
Igor Makanu:

Ho cercato di toccare cli all'inizio dell'anno ... La sintassi è complicata, tutto non è conveniente, ci sono pochissime informazioni con esempi, imho - o C++ puro o C# - tutti i desideri sono googlati, la sintassi è chiara - infine si ottiene e si scrive

Sharp è nato intorno al 2000 ed era nella sua infanzia, ma i plus hanno regnato, così hanno fatto da ponte tra C++ e Dotnet per la divulgazione. A proposito, Sharp è stato creato da sviluppatori di Delphi e C++Builder, mi sono chiesto all'epoca quanti concetti comuni ci siano. Prendete le stesse proprietà, gli eventi.

Motivazione: