Domande su OOP in MQL5 - pagina 2

 
Yuriy Asaulenko:
Beh, questo è un po' troppo. L'uomo è tutto OOP fin dall'inizio. Almeno solo facendo una tazza di caffè. Perché ci sono delle interruzioni del modello? IMHO, assurdità di insegnanti inetti che spostano i loro problemi sugli studenti.
Leggete attentamente. È quello che sto dicendo: una persona inizialmente imposta e risolve i suoi problemi in uno stile che si avvicina all'OOP. Ma poi gli viene insegnata la programmazione procedurale. Dopo di che i pattern si rompono perché è la programmazione procedurale (non OOP) che differisce molto dal pensiero umano.
 
Vasiliy Sokolov:

La OOP dovrebbe essere spiegata senza alcun codice e tutta quella nomenclatura astrusa come classi, oggetti, puntatori, ecc. ecc.

Come funziona l'educazione classica alla programmazione? All'inizio, uno studente cerca agonizzante di passare dal pensiero umano alle basi della programmazione (cicli, funzioni, variabili e altre cose come quel "bagaglio di conoscenze" necessario). Poi, quando la confusione di funzioni, variabili e if forma una struttura più o meno ordinata, allo studente viene detto: "Guarda: esiste una cosa come l'OOP. Dimentica ciò che ti è stato insegnato prima e ricomincia a pensare come un umano". Ciò che segue è una rottura di modelli, il "bagaglio di conoscenze" appena ottenuto con tanta difficoltà viene gettato sul mucchio della spazzatura, e la persona si trova da qualche parte tra il cielo e la terra. Naturalmente, questo "OLP" viene poi ricordato per diversi anni come un brutto sogno con brividi e dolore nelle parti rimanenti del cervello (le altre sono state bruciate dalla nuova conoscenza).

No, affermo categoricamente che non si dovrebbe imparare la programmazione. Al contrario, è dannoso e pericoloso. Invece è necessario insegnare a pensare. E con questo c'è un completo fallimento del metodo classico di apprendimento.

Scriverebbe un articolo
 
pako:
Scrivere un articolo.
Non
 
pako:
Scrivere un articolo

Forse. Ma Alexei potrebbe essere ancora meglio in grado di spiegare l'OLP.

 
Комбинатор:
Non farlo.
Stai già scrivendo?
 
no )
 
Комбинатор:
no )
E non scrivere :)
 
Vasiliy Sokolov:
Leggere attentamente. È quello che sto dicendo: una persona inizialmente imposta e risolve i suoi compiti in uno stile che si avvicina all'OOP. Ma poi gli viene insegnata la programmazione procedurale. Dopo di che la rottura dei pattern avviene perché si tratta di programmazione procedurale (non OOP) che differisce molto dal pensiero umano.

Non vedo nulla di male nell'imparare prima la programmazione procedurale. Per imparare a scrivere romanzi, è una buona idea iniziare imparando l'alfabeto regolare e la sintassi e imparare a leggere e scrivere.

In realtà, anche solo programmando in C/Pascal ecc, stiamo già manipolando oggetti senza conoscere la loro struttura interna e il loro funzionamento. Resta da spiegare che è un oggetto, e poi insegnare a costruire questi oggetti.

 
Alexey Volchanskiy:

....

Domanda:

Suggerisci un argomento su OOP in MQL5 per 10 minuti, lo metterò su youtube, cioè sarà utile per tutti

------------------

Scrivete tutto ciò che è interessante, lo sistemerò, cercherò di soddisfare le vostre richieste nel mio tempo libero

Buona fortuna ))

Illumina il tuo lavoro con gli oggetti.
 

Aiutami a risolvere un problema. Ci sono due pulsanti e una linea. Un pulsante, quando viene premuto, mette la linea in modalità di modifica, e quando viene rilasciato, cancella la linea. Il secondo pulsante, quando viene cliccato, fissa la linea, e quando viene cliccato, la rimette in modalità di modifica. Ogni pulsante può cambiare il colore e alcune altre proprietà dell'oggetto Line. L'oggetto "Linea" è definito globalmente. È possibile passare un riferimento all'oggetto "Linea" ad ogni pulsante subito dopo aver creato i pulsanti in modo che quando si manipola la variabile di riferimento all'interno degli oggetti "Button", tutti i cambiamenti sono ricordati nell'oggetto globale "Linea".

Ho abbozzato uno script semplificato qui sotto, invece di premere un pulsante, è una funzione addition() che incrementa il contatore dell'oggetto "Line". Capisco che si possa passare l'oggetto "Line" come argomento di una funzione per riferimento, ma proprio nella versione di lavoro, ci sono diverse funzioni di questo tipo, quindi vorrei passare il riferimento all'inizio una sola volta. Cioè è possibile fare in modo che Btn1.addition() o Btn2.addition() aumentino il gLine.count?

class CLine
{
    public:
          int   count;
                CLine(void){count=0;};
               ~CLine(void){};
};


class CMyButton
{
    private:   
    public:
                CLine m_Line;
                CMyButton(void){};
               ~CMyButton(void){};
              
                void bind(CLine &aLine) {m_Line = aLine;}
                void addition() {++m_Line.count;}
};




CMyButton  Btn1;
CMyButton  Btn2;

CLine gLine;

void OnStart()
{
   Btn1.bind(gLine);
   Btn2.bind(gLine);
   
   Print("Line.count=", gLine.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
}

Questo è quello che ho in corso in questo momento: