Una domanda per gli esperti di OOP. - pagina 41

 
Vladimir Simakov:
Merda. Come vorresti copiare il delegato su mql? Solo per divertimento, per il gusto di alzare il BSD.

analogico non può, l'ha fatto, controllato in MT4 funziona finora, ma in MT5 non funziona più

typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
void OnStart()
{  TFuncvoidPTR arrPTR[3];
   arrPTR[0]=f1;
   arrPTR[1]=f2;
   arrPTR[2]=f3;
   for(int i=0; i<3; i++)
      arrPTR[i]();			// ' ) ' - expression expected

}
//_______________________________________________________________________
void f1() { Print("1"); }
void f2() { Print("2"); }
void f3() { Print("3"); }
//+------------------------------------------------------------------+

2019.10.06 16:22:44.202 tst EURUSD,H1: 3

2019.10.06 16:22:44.202 tst EURUSD,H1: 2

2019.10.06 16:22:44.202 tst EURUSD,H1: 1

 
Igor Makanu:

analogico non può, l'ha fatto, controllato in MT4 funziona finora, ma in MT5 non funziona più

2019.10.06 16:22:44.202 tst EURUSD,H1: 3

2019.10.06 16:22:44.202 tst EURUSD,H1: 2

2019.10.06 16:22:44.202 tst EURUSD,H1: 1

La differenza fondamentale rispetto a c# è questa linea:arrPTR[0]=f1;

Dovrebbe essere qualcosa del genere:arrPTR[0]=new tralala(f1);

O qualcosa del genere. Quello che non capisco è: come si può voler fare una cosa del genere? E parlare dell'adeguatezza del pensiero di qualcun altro.
 
Dmitry Fedoseev:

La differenza fondamentale rispetto a c# è che questa linea:arrPTR[0]=f1;

Dovrebbe essere qualcosa del genere:arrPTR[0]=new tralala(f1);

O qualcosa del genere. È questo che non capisco - come si può riuscire a desiderare una cosa del genere? E parlare dell'adeguatezza del pensiero di qualcun altro.

In Sharpe, il concetto: "prendere il ripieno da tutti i linguaggi esistenti" + aggiungere la magia sotto forma di OOP puro e obbligatorio in ogni caso - si ottiene qualsiasi soluzione fino a

int a = new int();
char b = new Char();
string c = new string(new char[] { });
string d = String.Empty;
String e = String.Empty;


e dopo aver visto questo codice un programmatore C++ inizia a cercare significati nascosti in esso.... ma non ha senso! - l'unico punto è riunire tutti i non programmatori sotto C# imho ))))

 

Si trovano le ragioni per cui l'eredità senza restrizioni porta alla "degenerazione" degli oggetti.

SPIEGAZIONE:

1. Dichiariamo una classe base (astratta) A.

2. costruiamo da esso una lunga catena di eredità. A tal fine creiamo 10 eredi da A e 10 discendenti da ciascuno di essi. Abbiamo 10 catene dirette di eredità, 10 classi in ciascuna.

3. Ogni classe ha 10 proprietà e 10 metodi unici. A causa della loro unicità, le proprietà e i metodi sono incapsulati senza problemi nelle classi e su di essi viene costruita una chiara gerarchia che rappresenta la struttura "elegante" dell'oggetto base.

4. Ma ecco che le proprietà uniche si esauriscono. Appaiono nuovi "oggetti" - "nati" dall'incrocio di proprietà e metodi di diverse classi e diverse catene. Non hanno una catena diretta di eredità da A, ma ereditano le loro proprietà attraverso molte catene che portano all'oggetto base.

Allo stesso tempo, ereditando le loro proprietà dagli oggetti "unici", gli oggetti "misti" ereditano solo alcune proprietà e metodi da essi, lasciando altri non reclamati. Ereditano molte classi, ma dovrebbero prendere solo una parte del loro materiale "ereditato", lasciando il resto intatto. MA QUESTO NON È POSSIBILE. Accedendo alle loro classi, ereditano tutto ciò che è disponibile.

In altre parole, la loro eredità non è chiara. Accedendo ai loro "genitori", questi oggetti acquisiscono proprietà e metodi di cui non hanno bisogno. E non c'è modo di evitare queste "superfluità".

Significa che l'eredità smette di funzionare correttamente quando c'è un gran numero di discendenti. Gli oggetti "degenerano" a causa dell'insieme dei "genitori" e della generalizzazione dell'eccessiva diversità del "materiale ereditato". Gli oggetti cessano di essere concettualmente coerenti.


 
No, non può succedere. Da qualche parte intorno al livello 6-8 dell'eredità avviene una mutazione e una rivolta delle macchine.
 
Реter Konow:

Si trovano le ragioni per cui l'eredità senza restrizioni porta alla "degenerazione" degli oggetti.

SPIEGAZIONE:

1. Dichiariamo una classe base (astratta) A.

2. costruiamo da esso una lunga catena di eredità. A tal fine creiamo 10 eredi da A e 10 discendenti da ciascuno di essi. Abbiamo 10 catene dirette di eredità, 10 classi in ciascuna.

3. Ogni classe ha 10 proprietà e 10 metodi unici. A causa della loro unicità, le proprietà e i metodi sono incapsulati senza problemi nelle classi e su di essi viene costruita una chiara gerarchia che rappresenta la struttura "elegante" dell'oggetto base.

4. Ma ecco che le proprietà uniche si esauriscono. Appaiono nuovi "oggetti" - "nati" dall'incrocio di proprietà e metodi di diverse classi e diverse catene. Non hanno una catena diretta di eredità da A, ma ereditano le loro proprietà attraverso molte catene che portano all'oggetto base.

Allo stesso tempo, ereditando le loro proprietà dagli oggetti "unici", gli oggetti "misti" ereditano solo alcune proprietà e metodi da essi, lasciando altri non reclamati. Ereditano molte classi, ma dovrebbero prendere solo una parte del loro materiale "ereditato", lasciando il resto intatto. MA QUESTO NON È POSSIBILE. Accedendo alle loro classi, ereditano tutto ciò che è disponibile.

In altre parole, la loro eredità non è chiara. Accedendo ai loro "genitori", questi oggetti acquisiscono proprietà e metodi di cui non hanno bisogno. E non c'è modo di evitare queste "superfluità".

Significa che l'eredità smette di funzionare correttamente quando c'è un gran numero di discendenti. Gli oggetti "degenerano" a causa dell'insieme dei "genitori" e della generalizzazione dell'eccessiva diversità del "materiale ereditato". Gli oggetti cessano di essere concettualmente coerenti.


Quindi - viene costruito il concetto sbagliato.
Perché ereditare una carrozzeria e un ritratto da un oggetto "cornice"?
 
Artyom Trishkin:
Quindi - viene costruito il concetto sbagliato.
Perché ereditare il corpo dell'auto e il ritratto dall'oggetto "frame"?

Nell'ambito dei piccoli compiti, non è necessaria un'enorme gerarchia di eredità. Ma la gerarchia della base di conoscenza AI è quasi illimitata. Sono giunto alla conclusione che la gerarchia degli oggetti è conveniente, pratica ed efficace fino a certi limiti, dopo i quali inizia l'eredità "multipla" che porta alla "degenerazione" delle generazioni di oggetti. I nuovi oggetti vengono rimossi dalla base e le loro proprietà sono "secondarie", perché sono raccolte da altri oggetti. Nel processo di "raccolta" delle proprietà, i nuovi oggetti prendono del "materiale ereditato" in più, che si "incastra" nel loro funzionamento.

Non so come risolvere questo problema.

 

nel caso qualcuno lo legga,https://tproger.ru/translations/oop-principles-cheatsheet/

anche se ne dubito, non è compito dei borghesi leggere ciò che scrivono.

 
Igor Makanu:

nel caso qualcuno lo legga,https://tproger.ru/translations/oop-principles-cheatsheet/

anche se ne dubito, non è compito dei borghesi leggere ciò che scrivono.

L'articolo parla di eredità. Leggete.

"L'ereditarietà è la capacità di un oggetto di basarsi sulle proprietà di un altro".

Ma cosa succede se avete un oggetto di 102a generazione che può ereditare SOLO da diversi oggetti invece che da uno? Acquisirà proprietà e metodi extra in proporzione al numero dei suoi "genitori".

 
Реter Konow:

Nell'ambito dei piccoli compiti, non è necessaria un'enorme gerarchia di eredità. Ma la gerarchia della base di conoscenza AI è quasi illimitata. Sono arrivato alla conclusione che la gerarchia degli oggetti è conveniente, pratica ed efficace fino a certi limiti, dopo i quali inizia l'eredità "multipla" che porta alla "degenerazione" delle generazioni di oggetti. I nuovi oggetti vengono rimossi dalla base e le loro proprietà sono "secondarie", perché sono raccolte da altri oggetti. Nel processo di "raccolta" delle proprietà, i nuovi oggetti prendono del "materiale ereditato" in più che si "incastra" nel loro funzionamento.

Non sono sicuro di come risolvere questo problema.

Classificazione chiara. Se vediamo che più oggetti hanno le stesse proprietà, allora è logico descrivere queste proprietà in un oggetto padre.
Se un oggetto figlio sovrascrive una proprietà dell'oggetto padre con lo stesso nome, questa proprietà deve essere virtuale.