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

 
Georgiy Merts:

É isso mesmo, mais sobre esta função. Você tem um interruptor de tamanho monstruoso que seleciona uma das dezenas de funções que você precisa. 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 com 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 todo o movimento, e o que acontece com os músculos, em que seqüência eles são tensionados e até que ponto - é mais razoável escondê-lo da mente.

Sim, George, seus argumentos são razoáveis e lógicos. De fato, minha abordagem exige que você se lembre e saiba tudo em seu programa. Isto é tanto bom quanto ruim. Bom, porque o conhecimento assegura o rápido desenvolvimento de código e soluções, pouca sintaxe e muita funcionalidade, e ruim, porque não há previsão de portabilidade de partes de código para outros programas devido à interconexão global de todos os blocos.

Afinal, nossa língua falada também utiliza a memória global. Conhecemos e lembramos todas as palavras e não apenas aquelas que pertencem ao tópico atual da conversa. Tudo está confuso em nossas mentes. É assim que a Mind funciona, e é assim que funciona minha abordagem. Todos os resultados mais importantes dos blocos funcionais estão universalmente disponíveis. E assim, dentro deles está uma terminologia quase humana. Eu falo em código, como uma língua normal. É muito conveniente. Mas, há muito a ser lembrado. É verdade.


ZS. A propósito, o interruptor gigante pode ser decomposto em arquivos e o conteúdo escondido. É apenas conveniente para mim ver tudo isso.

 
Vict:

Tinny, você está fazendo algum tipo de construção de bicicleta sem um estudo adequado da abordagem convencional. Peter, encontre um bom livro, talvez Stroustrup, em algum livro ele escreveu um editor de texto, você aprenderá algo com um problema real, não me lembro do conteúdo, mas é improvável que ele lhe ensine coisas ruins.

Obrigado, é claro. Mas é improvável que tarefas específicas possam abrir meus olhos para algo, pois resolvi uma miríade delas nos últimos 6 anos. Uma verdadeira miríade. Então eu sei do que estou falando.
 
Agora, a eficiência. Mudança é, em última análise, o quê? É uma comparação seqüencial de um parâmetro com constantes. Atenção Peter, seqüencial. Ou seja, se a constante procurada for 100500, então todas estas comparações no processador serão feitas. O que são funções/métodos sobrecarregados - são blocos de código completamente diferentes em código de máquina após a compilação, com seus próprios pontos de entrada. Então, qual é mais eficiente?
 
Реter Konow:
Obrigado, é claro. Mas é pouco provável que tarefas específicas me abram os olhos para nada, pois resolvi uma miríade delas nos últimos 6 anos. Uma verdadeira miríade. Então eu sei do que estou falando.

Há muitas tarefas, e você ainda não entendeu a utilidade da sobrecarga. Imagine que uma função modelo, seus argumentos podem passar por int, duplo ou tipo de usuário, e queremos encontrar um valor absoluto através de abs(), como podemos fazer isso sem sobrecarregar?

Gostaria de ver suas muletas ao redor destas matrizes quando o projeto crescer: simular uma roda de carro -> carro com 4 buggies -> estrada com uma centena de carros.

 
Vladimir Simakov:
E agora a eficiência. Switch é o que no final das contas? É uma comparação seqüencial de um parâmetro com as constantes. Atenção Peter, seqüencial.

Não, o interruptor funciona de forma diferente. É uma tabela na qual o interruptor vai diretamente para a constante desejada. Esta é uma diferença significativa em relação ao bloco de se.

 
Vladimir Simakov:
E agora a eficiência. Switch é o que no final das contas? É uma comparação seqüencial de um parâmetro com constantes. Atenção Peter, seqüencial. Ou seja, se a constante procurada for 100500, então todas estas comparações no processador serão feitas. O que são funções/métodos sobrecarregados - são blocos de código completamente diferentes em código de máquina após a compilação, com seus próprios pontos de entrada. Então, qual é mais eficiente?

Infelizmente, o inevitável excesso de mortes. Nisto eu perco, no outro eu ganho.

Por exemplo, a função com o interruptor gigante realiza o posicionamento de objetos em itens e itens em janelas. Ele calcula seus tamanhos. Eu o chamo uma vez e todos os elementos e todos os objetos são colocados em suas posições de acordo com seus pontos de ancoragem. Calcula seus tamanhos e posição em relação um ao outro. Determina quais elementos devem ser escondidos, qual é o tamanho de kanvas necessário e assim por diante... Uma chamada é um trabalho enorme. O mesmo bloco pode calcular o tamanho ou a posição de um elemento de janela entre milhares. Um bloco. A chamada é Objeto();

Quantas classes e funções eu teria que escrever no OOP para resolver um número tão grande de tarefas? Tenho medo de imaginar.

 
Реter Konow:

Infelizmente, o inevitável excesso de mortes. Nisto eu perco, no outro eu ganho.

Por exemplo: A mesma função com um interruptor gigante realiza o posicionamento de objetos em elementos e elementos em janelas. Eu o chamo uma vez e todos os elementos e todos os objetos são colocados em suas posições de acordo com suas amarrações. Seus tamanhos e posições são calculados. Determina-se quais elementos devem ser escondidos, qual é o tamanho do kanvas necessário e assim por diante... Uma chamada é um trabalho enorme. O mesmo bloco pode calcular tamanhos ou posições de um elemento de janela entre milhares. Um bloco.

Quantas classes e funções eu teria que escrever no OOP para resolver um número tão grande de tarefas? Tenho medo de imaginar.

Cerca de 5-10, com um palpite aproximado. Com uma interface completamente auto-explicativa.
 
Refiro-me ao número de aulas. Cada uma tem 200 linhas de comprimento.
 
Ihor Herasko:

Não, o interruptor funciona de forma diferente. É uma tabela na qual o interruptor vai diretamente para a constante desejada. Esta é uma diferença significativa em relação ao bloco de se.

Portanto, em termos de velocidade, esta é obviamente a opção mais rápida na MQL. Mas o acesso aosobjetos de classe no ambiente administrado é indireto.
 
Реter Konow:

Fazemos uma função sem parâmetros, escrevemos todos os cálculos de funções sobrecarregadas no interior, fazemos variáveis globais e temos acesso aos resultados de qualquer outra função. Bem, é uma beleza, não é?

Sim, tudo bem... Devemos colocá-lo no ramo do "Humor". )