Domande su OOP in MQL5 - pagina 33

 
Alexey Viktorov:

Non è un segreto che l'esempio di evento del calendario economico è CalendarValueHistory(). In un caso tutte le notizie in un intervallo di tempo. In un altro per paese e in un altro intervallo di tempo. Nel terzo da un simbolo. Ma c'è una differenza fondamentale? Le lezioni di programmazione dividono le soluzioni in base al tipo di compiti che svolgono?

Recentemente ho incontrato qualcuno che non ha superato il suo esame di guida e si è indignato, dicendo che non hanno guidato su questo incrocio nelle loro lezioni di guida e lui semplicemente non sa guidare su questo incrocio.

Quando si crea una classe, si introduce un nuovo tipo di dati.

Cosa fa esattamente la vostra classe non è così importante.

Ciò che è importante è cosa pensate di fare con gli oggetti della classe come dati?

(Mettere in un array, passare in funzioni, restituire da funzioni, ...).

A questo punto, non sono sicuro che questa classe sia necessaria.

E se lo è, deve necessariamente essere una classe invece di tre?

Forse nel vostro compito potete andare d'accordo con una (o tre) funzioni?

 
Alexey Viktorov:

Noia... Ci sono anche modelli con interfacce per il master?

Le interfacce in quanto tali non esistono in MQL, un paio di pagine fa con una classe astratta sarebbe lo stesso, è più facile per me leggere solo il codice dopo

Le interfacce sono comode da inizializzare con diversi costruttori

l'esempio nell'aiutohttps://www.mql5.com/ru/docs/basis/types/classes per interfaccia parola chiave è uno a uno il mio modello, prova a riprodurre l'esempio nel tuo posto, forse è quello che stai cercando

 
Igor Makanu:

Le interfacce in quanto tali non esistono in MQL, un paio di pagine fa con una classe astratta sarebbe lo stesso, è più facile per me leggere solo il codice dopo

Le interfacce sono comode da inizializzare con diversi costruttori

l'esempio nell'aiutohttps://www.mql5.com/ru/docs/basis/types/classes dalla parola chiave interface - questo è esattamente il mio modello, prova a riprodurre l'esempio nel tuo ambiente, forse questo è quello che stai cercando

Igor, ti ricordi il compito che lo zar diede a Fedot lo Streltsy?

     Cercate di portarmi quel "non posso"! Scrivete il nome, per non dimenticarlo nella fretta!

E quale fu la risposta dei due giovani?

     Se solo avessimo uno schema o un progetto, avremmo un progetto, ma se non c'è, lo cerchiamo e troviamo il diavolo!

Come si può cercare di riprodurre qualcosa se non si conoscono le regole o il risultato finale da ottenere...

 
Alexey Viktorov:

Noioso... Ci sono anche modelli e interfacce da padroneggiare?

Beh, se è noioso, non fa per te.
 
Koldun Zloy:

Quando si crea una classe, si introduce un nuovo tipo di dati.

Non è ancora chiaro se questa classe sia proprio necessaria.

E se lo è, deve essere uno piuttosto che tre?

Forse nel tuo compito puoi cavartela con una (o tre) funzioni?

Può essere possibile, e molto probabilmente è possibile, ma vorrei scrivere una classe che possa essere collegata sia all'indicatore che all'Expert Advisor. E l'indicatore, dal mio punto di vista, è progettato in modo che la funzione debba essere chiamata in diverse varianti.

 
Alexey Viktorov:

Può essere, e molto probabilmente è possibile, ma vorrei scrivere una classe che possa essere chiamata da un indicatore e da un Expert Advisor. E l'indicatore, secondo me, è progettato in modo tale che la funzione dovrebbe essere chiamata in diverse varianti.

La funzione può anche essere chiamata dall'indicatore e dall'Expert Advisor.

 
Alexey Viktorov:

Penso che sto cominciando a capire la necessità e l'utilità dell'OOP, ma sto avendo problemi ad implementarla.

Ho una classe che deve essere usata con tre diversi set di variabili. Ma esegue un compito. In termini semplici, possiamo inserire 3 costruttori, dichiarare 3 variabili e fare riferimento ad esse. Ma per come la vedo io, non è del tutto corretto. Inoltre, c'è una variabile di tipo stringa in due varianti, ma ha un nome diverso ed è usata in diverse parti del codice. Naturalmente, si può cambiare la sequenza delle variabili, ma penso che anche questo non sia del tutto corretto.

Ho letto la documentazione sul nuovo operatore ma non capisco come possa essere utile. Non vedo la differenza tra tre diverse variabili oggetto e tre puntatori agli stessi oggetti. Forse è vantaggioso quando si crea un puntatore una volta, usare questo oggetto e cancellarlo quando non è necessario. Ma se avete bisogno dell'oggetto regolarmente, è assolutamente stupido creare un puntatore ad esso ogni volta e cancellarlo.

Quindi, per favore, datemi una mano. Ho letto alcune spiegazioni di OOP in C++, ma lì sono descritte in modo peggiore che nella documentazione di mql5. Per favore, non chiedete agli impazienti di unirsi a me, farei troppe domande. Non mi interessa nemmeno il codice già pronto senza spiegazioni, voglio capirlo, e non ripetere stupidamente "Fai con noi, fai come noi...".

L'entità più vicina al concetto di "Classe" è la struttura. E una struttura è un insieme di dati collegati. Cioè, è un gruppo di variabili eterogenee che sono collegate tra loro in modo significativo. Una classe aggiunge anche dei metodi che possono essere utilizzati per manipolare questi dati. L'analogo più vicino di un "Metodo" è una funzione. Cioè, una classe è una struttura con un insieme di funzioni incorporate in essa, che possono essere usate per controllare e formare i dati che sono al suo interno. Ci possono essere diversi metodi per diverse situazioni e varianti di formazione dei dati all'interno dell'oggetto classe. Nel vostro caso, avrete bisogno di tre metodi, che formeranno i dati all'interno della classe, di conseguenza per ogni situazione.
Ci deve essere un "costruttore di default" nella classe. Questa cosa viene chiamata quando un nuovo oggetto della classe viene creato usando l'operatore new. Confronterei il costruttore di default con la funzione OnInit in un programma MQL.
Il distruttore è, per continuare l'analogia, un analogo della funzione OnDeinit.
Non dovete "uccidere" l'oggetto subito dopo che è stato creato e ha fatto il suo lavoro. È possibile "uccidere" gli oggetti creati nella funzione OnDeinit dopo che il programma MQL è finito, e mentre il programma è in esecuzione, tutti gli oggetti possono essere in memoria e si può fare riferimento ad essi.
 
Koldun Zloy:

La funzione può anche essere chiamata sia dall'indicatore che dall'EA.

Non ne dubito. Volevo unirmi ai modi di programmazione alla moda, e voi mi date un tale consiglio)))). Si può anche rifiutare da OOP. Già non capisco la necessità di questi espedienti e ora mi convinci a non farlo :)))

 
Alexey Viktorov:

Non ne dubito. Volevo unirmi ai modi di programmazione alla moda, e voi mi date questo tipo di consigli). Tanto vale rifiutarsi di usare l'OOP. Già non capisco la necessità di questi espedienti e ora mi convinci a non farlo :)))

Se stai usando classi per qualcosa che non capisci, non è OOP.

E sì, vi consiglio, finché non capite la necessità di questi espedienti, non usateli.

 
BlackTomcat:
L'entità più vicina al concetto di "Classe" è la struttura. E una struttura è un insieme di dati collegati. Cioè, è un gruppo di variabili eterogenee che sono collegate tra loro in modo significativo. Una classe aggiunge anche dei metodi che possono essere utilizzati per manipolare questi dati. L'analogo più vicino di "Metodo" è una funzione. Cioè, una classe è una struttura con un insieme di funzioni incorporate in essa, che possono essere usate per controllare e formare i dati che sono al suo interno. Ci possono essere diversi metodi per diverse situazioni e varianti di formazione dei dati all'interno dell'oggetto classe. Nel vostro caso, avrete bisogno di tre metodi che genereranno dati all'interno della classe di conseguenza per ogni situazione.
Ci deve essere un "costruttore di default" nella classe. Questa cosa viene chiamata quando un nuovo oggetto della classe viene creato usando l'operatore new. Confronterei il costruttore di default con la funzione OnInit in un programma MQL.
Il distruttore è, per continuare l'analogia, un analogo della funzione OnDeinit.
Non dovete "uccidere" l'oggetto subito dopo che è stato creato e ha fatto il suo lavoro. È possibile "uccidere" gli oggetti creati nella funzione OnDeinit dopo che il programma MQL è finito, e mentre il programma è in esecuzione, tutti gli oggetti possono essere in memoria e si può fare riferimento ad essi.

Quindi, sto cercando di evitare di usare tre metodi simili. Dopo tutto, sono quasi la stessa cosa. Ottengono un array di eventi del calendario e setacciando i record non necessari, forniscono un array per un'ulteriore elaborazione.

Motivazione: