OOP vs programmazione procedurale

 
I commenti non relativi al "progetto EA" sono stati spostati in questo argomento.
 

Non voglio creare un coro qui, ma mi chiedo se i sostenitori dell'OOP possono presentare del codice che risolva un problema, che mostri chiaramente che questa soluzione è più efficiente di una soluzione senza OOP?


Sono un maestro nel risolvere i problemi senza OOP e vorrei combattere con un maestro nel risolvere i problemi con OOP.

 
Реter Konow:

Non voglio creare un coro qui, ma mi chiedo se i sostenitori dell'OOP possono presentare del codice che risolva un problema, che mostri chiaramente che questa soluzione è più efficiente di una soluzione senza OOP?

Sono un problem solver senza OOP e vorrei combattere un problem solver con OOP.

Questa non è una piattaforma dove si può riprodurre il confronto - il programma è a pagina singola (single-file). Qui potete scrivere come volete e le prestazioni e l'accesso al programma rimarranno quasi allo stesso livello. Anche se è possibile sbagliare in qualsiasi stile di scrittura, procedurale o OOP.

 
Vitaly Muzichenko:

Questa non è una piattaforma dove si può riprodurre il confronto - il programma è a pagina singola (single-file). Qui potete scrivere come volete, e le prestazioni e l'accesso al programma rimarranno quasi allo stesso livello. Anche se si può sbagliare in qualsiasi stile di programmazione - procedurale o OOP.

Non ti capisco bene. Cosa intende per "un programma di una pagina"? Si possono semplicemente confrontare due approcci diversi per risolvere un compito. Quando si confronta, si dovrebbe valutare ogni soluzione secondo i criteri principali: la soluzione stessa, la compattezza del codice e la leggibilità del codice.


Questi sono i criteri principali nella programmazione.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым...
 
Реter Konow:

Scrivere enormi blocchi di codice che occupano centinaia di righe. Quasi nessun commento. Nessun OOP. Codice in russo. Tutto funziona in modo molto efficiente. Non ho problemi di orientamento nel programma, anche se ci sono circa 100 file collegati. Probabilmente perché mi sono abituato e mi sono ricordato tutto molto tempo fa. La cosa principale è conoscere e capire il tuo programma, tutto il resto è secondario. Imho.

Possiamo discutere sull'"efficienza" del lavoro.

Lo stesso vale per la modificabilità - se il vostro codice sarà usato su citazioni di diversa precisione - avrà bisogno di essere modificato, e sarà facile farle?

Il problema principale in questi progetti è solo fare cambiamenti. Come dimostra la pratica, più grandi sono i blocchi, più è probabile che vengano introdotti errori durante la modifica. La mancanza di commenti è uno svantaggio, non un vantaggio. Per questo bisogna ricordare molte cose.

 
Реter Konow:

Non voglio creare un coro qui, ma mi chiedo se i sostenitori dell'OOP possono presentare del codice che risolva un problema, dove sia chiaramente visibile che questa soluzione è più efficiente di una soluzione senza OOP?

Sono un maestro nel risolvere i problemi senza OOP e vorrei combattere un maestro nel risolvere i problemi con OOP.

Ho già presentato tale codice sopra. C'è un'interfaccia completamente virtuale all'interno della quale viene gestita la storia del commercio. Lo stesso sistema è usato nel mio lavoro con la posizione attuale e in altri posti simili.

È a causa di OOP che abbiamo la piena unità di MT4 e MT5, e in MT5 funziona indipendentemente dal fatto che si tratti di hedging o netting.

Inoltre, proprio a causa dell'OOP che ho, all'interno di un EA posso facilmente utilizzare diversi TS, diversi nelle loro magie.

In effetti, la OOP è stata inventata per semplificare il supporto del codice. Allo stesso tempo si deve pagare un grande costo durante la scrittura. Se scrivi del codice, lo usi senza modifiche e poi lo rimuovi, non ha senso preoccuparsi di OOP. OOP dà un vantaggio proprio quando lo stesso codice è richiesto in molti posti e periodicamente deve essere modificato.

Corrispondentemente, l'ambito dell'applicazione e della non applicazione OOP è determinato dalla necessità di manutenzione e modifiche del codice.

 
George Merts:

Si potrebbe discutere di "efficienza".

Lo stesso vale per la modificabilità - se il vostro codice deve essere usato su quotazioni di diversa precisione - richiederà modifiche e sarà facile farle?

Il problema principale in questi progetti è solo fare cambiamenti. Come dimostra la pratica, più grandi sono i blocchi, più è probabile che vengano introdotti errori durante la modifica. La mancanza di commenti è uno svantaggio, non un vantaggio. Per questo bisogna ricordare molte cose.

La versatilità dei blocchi è un altro criterio di valutazione. Naturalmente, un blocco deve essere utilizzabile per una vasta gamma di compiti e facilmente adattabile a condizioni mutevoli. Questo è esattamente quello che ho. Per esempio, io uso la cosiddetta tecnologia "focus". Cioè, i valori dei parametri principali sono fissati in variabili globali per tutto il tempo, e queste variabili e messe in tutti i blocchi.

 
Abbiamo bisogno di confrontare nella pratica. Altrimenti è una discussione inutile.
 
Реter Konow:

La versatilità dei blocchi è un altro criterio di valutazione. Certamente, un blocco dovrebbe essere utilizzabile per una vasta gamma di compiti e facilmente adattabile a condizioni mutevoli. Questo è esattamente quello che ho. Per esempio, io uso la cosiddetta tecnologia "focus". Cioè, i valori dei parametri principali sono fissati in variabili globali per tutto il tempo, e queste variabili e messe in tutti i blocchi.

Temo che anche le variabili globali siano uno svantaggio. Ci dovrebbe essere il minor numero possibile di variabili globali disponibili in tutti i blocchi. Solo per assicurarsi che ogni blocco riceva solo i dati di cui ha bisogno, e dove possibile - solo in forma costante, in modo che non ci sia modo di cambiare qualcosa che non dovrebbe cambiare.

Le uniche due variabili globali nei miei progetti sono l'oggetto di classe CExpert, le cui funzioni incapsulano la funzionalità di Init(), OnTick() e altri eventi, e l'oggetto CLogFile - un file di log, che emette il tracciamento, perché le macro di tracciamento devono lavorare da qualsiasi punto del programma.

A mio avviso, affidarsi alla memoria non è la soluzione migliore, almeno, perché come disse Sherlock Holmes - ad un certo momento la conoscenza necessaria verrà sepolta sotto il cumulo di spazzatura inutile. E anche la memoria può fallire.

 
George Merts:

Temo che anche le variabili globali siano uno svantaggio. Ci dovrebbe essere il minor numero possibile di variabili globali disponibili in tutti i blocchi. Solo per assicurarsi che ogni blocco riceva solo i dati di cui ha bisogno, e dove possibile - solo in forma costante, in modo che non ci sia modo di cambiare qualcosa che non dovrebbe cambiare.

Le uniche due variabili globali nei miei progetti sono l'oggetto di classe CExpert, le cui funzioni incapsulano le funzionalità di Init(), OnTick() e altri eventi, e l'oggetto CLogFile - un file di log che emette il tracciamento, perché le macro di tracciamento devono lavorare da qualsiasi posto in un programma.

Affidarsi alla memoria non è la soluzione migliore, almeno perché, come diceva Sherlock Holmes, a un certo momento la conoscenza richiesta verrà sepolta sotto un mucchio di roba inutile. E anche la memoria può fallire.

Sai, dietro tutti questi termini e codice OOP non riesco a vedere il compito che stavi risolvendo. Qual era la sua essenza? Per favore, descrivetelo e vi offrirò la mia soluzione. Poi possiamo confrontarli con tutti i criteri possibili.
 
Реter Konow:
Deve essere confrontato nella pratica. Altrimenti questa è una discussione inutile.

Perché "inutile"? Molto utile.

Ma come possiamo paragonare la "facilità di supporto" nella pratica?

Diciamo, un codice scritto come un blocco enorme e un codice diviso in parti funzionali - l'introduzione di modifiche in entrambi i casi è assolutamente la stessa. L'unica differenza è che nel primo caso si dovrebbero ricordare tutti i collegamenti che saranno interessati dalla modifica e tenerne conto. Nel secondo caso, poiché l'unità ha accesso solo ai collegamenti di cui ha bisogno per lavorare - la modifica interesserà tutti i collegamenti disponibili. Non c'è bisogno di ricordare nulla - regolare coerentemente tutto ciò che è disponibile per il blocco che si vuole modificare.

È come valutare la differenza qui? La quantità di lavoro è esattamente la stessa!