Perguntas sobre OOP em MQL5 - página 2

 
Yuriy Asaulenko:
Bem, isso é um pouco exagerado. O homem é tudo sobre o OOP desde o início. Pelo menos apenas fazendo uma xícara de café. Por que há quebras de padrão? IMHO, bobagem de professores ineptos transferindo seus problemas para os alunos.
Leia-o com atenção. É isso que estou dizendo, uma pessoa inicialmente estabelece e resolve seus problemas em um estilo aproximado ao OOP. Mas depois ele é ensinado a programação de procedimentos. Depois disso, os padrões são quebrados porque é a programação processual (não o OOP) que difere muito do pensamento humano.
 
Vasiliy Sokolov:

OOP deve ser explicado sem qualquer código e toda aquela nomenclatura abstrusa como classes, objetos, ponteiros, etc. etc.

Como funciona a educação clássica em programação? A princípio, um estudante está tentando agonizantemente passar do pensamento humano para a programação básica (loops, funções, variáveis e outras coisas do tipo "bagagem de conhecimento"). Então, quando a confusão de funções, variáveis e se forma alguma estrutura mais ou menos ordenada, é dito ao estudante: "Veja: existe uma coisa como o OOP. Esqueça o que lhe foi ensinado antes e comece a pensar como um humano novamente". O que se segue é uma ruptura dos modelos, a "bagagem de conhecimento" obtida com tanta dificuldade é jogada na pilha de lixo e a pessoa se encontra em algum lugar entre o céu e a terra. Naturalmente, esta "OLP" é então lembrada por vários anos como um pesadelo com tremores e dor nas partes restantes do cérebro (as outras foram queimadas pelos novos conhecimentos).

Não, eu afirmo categoricamente que não se deve aprender programação. Pelo contrário, é prejudicial e perigoso. Ao invés disso, é necessário ensinar a pensar. E com isso há um completo fracasso do método clássico de aprendizagem.

Você poderia escrever um artigo
 
pako:
Escreva um artigo.
Não faça
 
pako:
Escreva um artigo

Talvez. Mas Alexei talvez seja ainda mais capaz de explicar a OLP.

 
Комбинатор:
Não o faça.
Você já está escrevendo?
 
não )
 
Комбинатор:
não )
E não escreva :)
 
Vasiliy Sokolov:
Leia com atenção. É isso que estou dizendo: uma pessoa inicialmente define e resolve suas tarefas em um estilo aproximado ao OOP. Mas então ele é ensinado a programação de procedimentos. Após essa quebra de padrão ocorre porque é a programação processual (não a OOP) que difere muito do pensamento humano.

Não vejo nada de errado em aprender programação processual de antemão. Para aprender a escrever romances, é uma boa idéia começar aprendendo o alfabeto e a sintaxe regulares e apenas aprender a ler e escrever.

Na verdade, mesmo programando apenas em C/Pascal etc., já estamos manipulando objetos sem saber de sua estrutura interna e funcionamento. Resta explicar que é um objeto, e depois ensinar como construir esses objetos.

 
Alexey Volchanskiy:

....

Pergunta:

Sugira um tópico sobre OOP em MQL5 por 10 minutos, eu o colocarei no youtube, ou seja, será útil para todos

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

Escreva tudo o que for interessante, eu vou resolver isso, vou tentar satisfazer seus pedidos dentro do meu tempo livre

Boa sorte ))

Ilumine seu trabalho com objetos.
 

Ajude-me a resolver um problema. Há dois botões e uma linha. Um botão, quando pressionado, coloca a linha em modo de edição, e quando liberado, apaga a linha. O segundo botão, quando clicado, conserta a linha e, quando clicado, volta a colocá-la no modo de edição. Cada botão pode mudar a cor e algumas outras propriedades do objeto Linha. O objeto "Linha" é definido globalmente. É possível passar uma referência ao objeto "Linha" para cada botão imediatamente após a criação dos botões, para que quando você manipula a variável de referência dentro dos objetos "Botão", todas as mudanças sejam lembradas no objeto global "Linha".

Eu esbocei um script simplificado abaixo, em vez de pressionar um botão, é uma função de adição() que incrementa o contador do objeto "Linha". Entendo que você pode passar o objeto "Linha" como um argumento de função por referência, mas apenas na versão de trabalho, existem várias funções desse tipo, portanto, gostaria de passar a referência logo no início, uma vez. Isto é, é possível fazer o Btn1.addition() ou Btn2.addition() aumentar o 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);
}

Isto é o que estou fazendo neste momento:


Razão: