OOP vs programmazione procedurale - pagina 37

 
Andrei:

Una classe ha solo variabili interne e nessuna variabile di ingresso o uscita... Dove avete visto l'uso nella programmazione di un tale oggetto che non ha contatto con il mondo esterno e bolle nel suo stesso succo?


+100

 

La discussione mi ricorda un video che i ragazzi hanno mostrato recentemente :)


 
Andrei:

La classe ha solo variabili interne e nessun input e output... Dove avete visto l'uso nella programmazione di un tale oggetto, che non ha contatto con il mondo esterno e cuoce nel suo stesso succo?

La classe ha un'interfaccia attraverso la quale interagisce con il mondo esterno. Ci permette di tagliare tutte le cose "inutili" che non sono destinate ai blocchi esterni.

Per esempio, nel mio processore di trading ho delle variabili, alcune delle quali sono destinate a MT4, altre a MT5 e altre ancora a entrambe le piattaforme. Ma tutte queste variabili non sono assolutamente necessarie a nessuna parte del mio TS. Rispettivamente, non hanno accesso ad essi. Tutte le parti del TS ricevono un'interfaccia virtuale del processore commerciale, in cui sono definite solo le funzioni necessarie per il funzionamento del TS, e tutto ciò che è irrilevante, tutto ciò che dipende dalla piattaforma e "specifico per il commercio" viene rimosso.

È lo stesso con una posizione commerciale - le parti di TS non hanno accesso diretto a una posizione commerciale. Possono solo ottenere un'interfaccia virtuale che permette di contare il numero di componenti commerciali aperti, e i dati di ogni componente. Ma il TS non sa nemmeno con cosa ha a che fare - se è un ordine MT4 o una posizione MT5. Tutto questo le è nascosto. Il TS non dovrebbe avere accesso alle variabili usate per trattare gli ordini MT4 o le posizioni MT5, e non lo fa.

 
George Merts:

La classe ha un'interfaccia attraverso la quale interagisce con il mondo esterno. Permette di tagliare tutto il "superfluo" che non è destinato ai blocchi esterni.

Qui, in particolare, nel mio processore di trading - ho delle variabili, alcune delle quali sono per MT4, altre per MT5, altre per entrambe le piattaforme. Ma tutte queste variabili non sono assolutamente necessarie a nessuna parte del mio TS. Rispettivamente, non hanno accesso ad essi. Tutte le parti del TS ricevono un'interfaccia virtuale del processore di trading, in cui sono definite solo le funzioni necessarie per il funzionamento del TS, e tutte le cose non necessarie, tutte le cose dipendenti dalla piattaforma e "specifiche del commercio", sono rimosse.


Siamo molto specifici e facciamo un esempio molto chiaro.

1. cotier all'ingresso

2. c'è un comando di acquisto/vendita in uscita.

3. L'ingresso è convertito in uscita dall'intersezione di due salviette.

Quali sono le OOP tra loro e perché?

 
СанСаныч Фоменко:

Spiegate questo ai meta-citi: perché hanno scritto enormi manuali per il terminale, per il linguaggio e in generale, dove è finita questa montagna di documentazione per i prodotti software su Cp... In effetti, ci sono prodotti software senza documentazione? È strano che non lo vediate.


Sfortunatamente, stai di nuovo confondendo le cose. Il manuale di un programma non è una documentazione. Nel secolo scorso mantenevano la documentazione e obbedivano alle norme statali. Ora non abbiamo bisogno di tutto. Ora abbiamo solo il ToR. La documentazione ora consiste in casi di test e interfacce di classe. Naturalmente, le classi sono nominate in modo tale che il suo nome da solo renda chiaro cosa fa e per quale scopo viene usato.

 
Ihor Herasko:

Sfortunatamente, state ancora una volta confondendo i termini. Un manuale di programma non è una documentazione. Nel secolo scorso, c'era la documentazione, e seguivano i GOST e così via. Ora è tutto inutile. Rimane solo il ToR. La documentazione ora consiste in casi di test e interfacce di classe. E naturalmente le classi sono nominate in modo tale che possiamo capire dai loro nomi cosa fanno e per quale scopo sono usate.

La documentazione è stata tenuta nel secolo scorso, abbiamo obbedito alle norme statali e così via. Ora è tutto inutile.

Sono assolutamente d'accordo con te, perché non scrivono niente di serio.

Ci sono sempre stati i ToR. Ma programmi così semplici, il cui algoritmo può essere completamente definito in TT, non sono stati scritti nel secolo scorso e anche ora non sono scritti da persone serie.

Cosa significa "casi di test e interfacce di classe" quando si sviluppano compilatori? Quando si programmano algoritmi matematici?



PS.

Una volta c'era una rubrica per i perl.

C'è anche questo.

Un manuale di programma non è una documentazione.

 
СанСаныч Фоменко:

Cerchiamo di essere specifici e molto chiari su un esempio.

1. l'input è un quoziente

2. l'output è un comando di acquisto/vendita.

3. L'ingresso è convertito in uscita dall'intersezione di due salviette.

Quali sono le OOP tra loro e perché?

È abbastanza semplice.

C'è un generatore di ingressi. Richiede all'Expert Advisor l'interfaccia del fornitore di dati, l'interfaccia delle posizioni commerciali e l'interfaccia del processore commerciale. Poi le due interfacce di maschere sono richieste dal fornitore di dati.

Quando OnTick() è chiamato - la stessa funzione è chiamata dal generatore di input. Il generatore di input guarda l'interfaccia ondulante, confronta il suo valore passato. Se rileva un crossover, guarda l'interfaccia della posizione commerciale. Se vede che non siamo in posizione - chiama l'interfaccia del processore commerciale per la funzione di acquisto o di vendita. Se vede che c'è una posizione, se la posizione è nella direzione richiesta - non facciamo nulla, se è il contrario - chiamiamo la funzione di chiusura della posizione nell'interfaccia di trading e compriamo o vendiamo.

Dovete notare che il generatore non ha accesso a nessuna variabile, né per il calcolo delle salviette, né per ottenere una posizione di trading, né per aprire ordini in MT4 o posizioni in MT5. Il fornitore di dati conosce solo i panni che sono stati richiesti. Li ricalcola ad ogni tick e li aggiorna. Nessun altro ne è a conoscenza. Un processore commerciale - esegue esclusivamente le istruzioni che gli arrivano attraverso l'interfaccia, e non sa nemmeno da chi provengono. L'Expert Advisor - aggiorna la posizione commerciale su ogni tick e la dà all'interfaccia richiesta, senza studiare chi ne ha bisogno e cosa ha dentro questo blocco. Tutti i blocchi sono separati e comunicano esclusivamente attraverso interfacce predefinite.

 
СанСаныч Фоменко:

Cerchiamo di essere specifici e molto chiari su un esempio.

1. l'input è un quoziente

2. l'output è un comando di acquisto/vendita.

3. L'ingresso è convertito in uscita dall'intersezione di due salviette.

Quali sono le OOP tra loro e perché?

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

Ma è OOP di per sé all'interno delle librerie elaborate - è fatto per scrivere facilmente e semplicemente e allo stesso tempo per rendere tutto debug. Ci sono interfacce "la fonte delle quotazioni" e "l'esecutore degli ordini", "serie temporali", "indicatori" e un sacco di altre cose... Ma questo codice breve è pronto per le condizioni rigorose del mercato reale, con tutti i glitch e gli inconvenienti

Con una semplice mossa puoi prendere un quoziente arbitrario (sintetico) o eseguirlo su un altro simbolo...o semplicemente comandare un altro Expert Advisor (e questo è il vantaggio di OOP, la complessità interna, e il problema applicato richiede poco sforzo).

 
George Merts:

È abbastanza semplice.

C'è un generatore di ingressi. Esso - richiede all'Expert Advisor l'interfaccia del fornitore di dati, l'interfaccia delle posizioni commerciali e l'interfaccia del processore commerciale. Poi, due interfacce di carri sono richieste dal fornitore di dati.

Quando OnTick() è chiamato - la stessa funzione è chiamata dal generatore di input. Il generatore di input guarda l'interfaccia ondulante, confronta il suo valore passato. Se rileva un crossover, guarda l'interfaccia della posizione commerciale. Se vede che non siamo in posizione - chiama l'interfaccia del processore commerciale per la funzione di acquisto o di vendita. Se vede che c'è una posizione, se la posizione è nella direzione richiesta - non facciamo nulla, se è il contrario - chiamiamo la funzione di chiusura della posizione nell'interfaccia di trading e compriamo o vendiamo.

Dovete notare che il generatore non ha accesso a nessuna variabile, né per il calcolo delle salviette, né per ottenere una posizione di trading, né per aprire ordini in MT4 o posizioni in MT5. Il fornitore di dati conosce solo i panni che sono stati richiesti. Li ricalcola ad ogni tick e li aggiorna. Nessun altro ne è a conoscenza. Un processore commerciale - esegue esclusivamente le istruzioni che gli arrivano attraverso l'interfaccia, e non sa nemmeno da chi provengono. L'Expert Advisor - aggiorna la posizione commerciale su ogni tick e la dà all'interfaccia richiesta, senza studiare chi ne ha bisogno e cosa ha dentro questo blocco. Tutti i blocchi sono separati e comunicano solo attraverso interfacce predefinite.


Incredibile!

Mi chiedevo: c'è qualche altra possibilità nella programmazione moderna per confondere più bruscamente il problema del livello delle uova?

 
Maxim Kuznetsov:

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

Ma l'OOP stessa è all'interno delle librerie sviluppate - è fatta per scrivere facilmente e semplicemente e tutto è messo a punto per questo. Ci sono interfacce "sorgente di quotazione" e "esecutore di ordini", "serie temporali", "indicatori" e un sacco di altre cose... Ma questo codice breve è pronto per condizioni di mercato reali e dure, con tutti i difetti e i problemi

Con una semplice mossa puoi prendere un quoziente arbitrario (sintetico) o eseguirlo su un altro simbolo...o semplicemente comandare un altro Expert Advisor (e questo è il vantaggio di OOP, la complessità interna, e il problema applicato richiede poco sforzo).


Il mioOnInit() sembra più o meno lo stesso - una dozzina di linee...

Quindi?

Motivazione: