Uma pergunta para os especialistas do OOP. - página 17

 
Vladimir Simakov:
Refiro-me ao número de aulas. Cada uma tem 200 linhas de comprimento.
Quanto mais difícil seria o acesso? Eu tenho um núcleo global que pode ser visto de todos os lugares. No OOP eu teria que desistir. Como eu trabalharia então com elementos em janelas? Eu fico em coma quando tento imaginar isso)).
 
Реter Konow:
Quanto mais difícil seria o acesso? Eu tenho um núcleo global que é visível de todos os lugares. No OOP eu teria que desistir. Como eu trabalharia então com elementos em janelas? Eu fico em coma quando tento imaginar isso)).

Classe estática.

 

Vladimir Simakov:
А теперь к эффективности. Switch - это что в конечном итоге? Это последовательное сравнение параметра с константами. Внимание Петр, последовательное.

não é de todo necessário.

Isto não significa que Peter esteja certo ou que o interruptor deva ser colocado em todos os lugares, mas mesmo assim.

 
Alexey Navoykov:
Sim, isso mesmo,então em termos de velocidade, é obviamente a opção mais rápida na MQL. Mas o acesso aosobjetos de classe no ambiente administrado é indireto.
Obrigado por esta breve visão geral. Retiro o que disse sobre a troca.
 
Georgiy Merts:

É isso mesmo, mais sobre esta função. Você tem um interruptor de tamanho monstruoso que seleciona uma de uma dúzia de funções necessárias. Em tal mudança, é muito fácil cometer um erro ao escrever acidentalmente o código relativo a uma das filiais no lugar errado.

As coisas são muito mais simples com uma sobrecarga. Temos dez descendentes diferentes, e cada vez que trabalhamos com UMA classe, e ela tem UMA função sobrecarregável. Não podemos escrevê-lo acidentalmente em outra classe, porque temos que abrir um arquivo completamente diferente para ele.

Além disso - a própria análise nesta enorme mudança é, em minha opinião, muito mais estressante do que abrir a única classe que precisamos, e depois analisar apenas uma função.

De fato, em código de montagem, todo o manuseio deste interruptor se resume, de qualquer forma, ao mesmo swich, dependendo deste ponteiro. Mas no caso do OOP, tudo isso é escondido do programador e não interfere em seu trabalho. Sem OOP - você tem que lidar com isso.

Grosso modo, quando você caminha - você acaba enviando sinais aos seus músculos em uma certa seqüência que os move. No entanto, no nível de consciência - basta lembrar qual movimento fazer. Aqui, OOP é exatamente esse tipo de "memória de que movimento fazer". Você "não entende porque precisamos lembrar do movimento quando temos um monte de músculos, e nervos ligados a eles"... bem... Já disse muitas vezes antes, para os titãs de memorização, é realmente suficiente lembrar quais músculos têm que ser tensionados em que seqüência ir. Não vale a pena lembrar de todo o movimento. Para outros, que não conseguem se lembrar de tanto, é muito mais razoável lembrar de todo o movimento, e o que há com os músculos, em que seqüência eles são tensionados e até que ponto - é mais razoável escondê-lo da mente.

As funções sobrecarregadas são apenas funções diferentes das do compilador, e sem interruptores.

 
Реter Konow:
Quanto mais difícil seria o acesso? Eu tenho um núcleo global que é visível de todos os lugares. No OOP eu teria que desistir. Como trabalhar com elementos em janelas então? Eu fico em coma quando tento imaginar isso)).

Por que isso deveria ser?

O kernel global e o OOP não são mutuamente exclusivos.

Apenas os elementos das janelas devem ser encapsulados dentro das classes de janelas, e não "Colocados sobre a vista". Só para que ninguém possa acidentalmente "entrar no lugar errado". Alterar uma variável e cometer um erro sobre sua localização dentro de uma enorme matriz global é muito fácil, enquanto é muito mais difícil consultar a interface correta e depois alterar a mesma variável no objeto certo e cometer um erro.

 
Koldun Zloy:

As funções sobrecarregadas para o compilador são simplesmente funções diferentes, e sem interruptor.

E como é selecionado aquele que é necessário? Estamos falando de funções virtuais e encadernação tardia. Qual função sobrecarregada será chamada ? Isto é determinado por este ponteiro, que é passado implicitamente quando você o chama. E como você acha que essa escolha é feita?

 
Georgiy Merts:

E como é selecionado aquele que queremos? Estamos falando de funções virtuais e encadernação tardia. Qual função sobrecarregada será chamada ? Isto é determinado por este ponteiro, que é implicitamente passado para a chamada. E como você acha que essa escolha é feita?

Na verdade, Peter não estava falando de funções virtuais.

Mas eles também não têm interruptores.

Uma classe que tem funções virtuais tem uma tabela de funções virtuais.

E cada objeto desta classe contém uma variável implícita - um ponteiro para a tabela de funções virtuais.

Se uma ou todas as funções virtuais são anuladas no descendente, uma nova tabela é criada e as instâncias do descendente contêm um ponteiro para ela.

 
Koldun Zloy:

Na verdade, Peter não estava falando de funções virtuais.

Mas eles também não têm interruptores.

Uma classe que tem funções virtuais tem uma tabela de funções virtuais.

E cada objeto desta classe contém uma variável implícita - um ponteiro para a tabela de funções virtuais.

Se uma ou todas as funções virtuais são anuladas no descendente, uma nova tabela é criada e as instâncias do descendente contêm um ponteiro para ela.

Exatamente. Como funciona esta mesma tabela? Em código assembler, é a mesma chave.

E sobre "não falar de funções virtuais" - é como "por que OOP"... Ou seja, trata-se de funções virtuais, e não de simples nomes idênticos de funções com argumentos diferentes.

 
Georgiy Merts:

Exatamente. Então minha pergunta é: como funciona esta mesma tabela? Em código de montador é a mesma chave.

Não. É apenas um conjunto de indicações para uma função.

O código de montagem toma um endereço de tabela do objeto.

Ele toma o endereço da função em uma determinada posição.

E um salto para esse endereço é feito.

Que tal "eu não estava falando de funções virtuais" - era isso que eu queria dizer com "por que OOP"... Ou seja, trata-se de funções virtuais, não apenas nomes de funções idênticas com argumentos diferentes.

Julgando por sua pergunta, ele estava falando de funções com nomes idênticos.

É muito provável que ele não esteja nem mesmo ciente das funções virtuais.

Razão: