Programação OOP vs procedimento

 
Os comentários não relacionados ao "projeto EA" foram movidos para este tópico.
 

Eu não quero criar um coro aqui, mas eu me pergunto se os partidários do OOP podem submeter algum código resolvendo um problema, onde é claramente visível que esta solução é mais eficiente do que uma solução sem OOP?


Sou um mestre em resolver problemas sem OOP e gostaria de lutar com um mestre em resolver problemas com OOP.

 
Реter Konow:

Eu não quero criar um coro aqui, mas eu me pergunto se os partidários do OOP podem apresentar algum código resolvendo um problema, o que mostra claramente que esta solução é mais eficiente do que uma solução sem OOP?

Eu sou um solucionador de problemas sem OOP e gostaria de combater um solucionador de problemas com OOP.

Esta não é uma plataforma onde se possa reproduzir a comparação - o programa é de uma única página (arquivo único). Aqui você pode escrever como quiser e o desempenho e o acesso ao programa permanecerão quase no mesmo nível. Embora seja possível fazer asneira em qualquer estilo de escrita, procedimento ou OOP.

 
Vitaly Muzichenko:

Esta não é uma plataforma onde se possa reproduzir a comparação - o programa é de uma única página (arquivo único). Aqui você pode escrever como quiser, e o desempenho e o acesso ao programa permanecerão quase no mesmo nível. Embora você possa fazer asneira em qualquer estilo de programação - procedural ou OOP.

Eu não o entendo muito bem. O que você quer dizer com "um programa de uma página"? Você pode simplesmente comparar duas abordagens diferentes para resolver uma tarefa. Ao comparar, você deve estimar cada solução pelos critérios principais: a solução em si, a compactação do código e a legibilidade do código.


Estes são os principais critérios na programação.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым...
 
Реter Konow:

Escrevendo enormes blocos de código ocupando centenas de linhas. Quase nenhum comentário. Sem OOP. Código em russo. Tudo funciona muito eficientemente. Não tenho nenhum problema com a orientação no programa, embora existam cerca de 100 arquivos conectados a ele. Provavelmente porque já me acostumei e me lembrei de tudo há muito tempo. O principal é conhecer e entender seu programa, todo o resto é secundário. Imho.

Podemos discutir sobre a "eficiência" do trabalho.

O mesmo se aplica à possibilidade de modificação - se seu código for usado em citações de precisão diferente - ele precisará ser modificado, e será fácil de fazê-las?

O principal problema em tais projetos é apenas fazer mudanças. Como mostra a prática, quanto maiores forem os blocos, maior é a probabilidade de que sejam introduzidos erros durante a modificação. A falta de comentários é uma desvantagem, não uma vantagem. É por isso que você tem que se lembrar de muitas coisas.

 
Реter Konow:

Eu não quero criar um coro aqui, mas eu me pergunto se os partidários do OOP podem apresentar algum código resolvendo um problema, o que mostra claramente que esta solução é mais eficiente do que uma solução sem OOP?

Sou um mestre na resolução de problemas sem OOP e gostaria de lutar contra um mestre na resolução de problemas com OOP.

Eu já apresentei tal código acima. Existe uma interface totalmente virtual dentro da qual o histórico comercial é tratado. O mesmo sistema é usado em meu trabalho com a posição atual e em outros lugares similares.

É por causa da OOP que temos plena unidade de MT4 e MT5, e em MT5 funciona independentemente de ser cobertura ou rede.

Além disso, exatamente devido ao OOP I tenho, dentro de uma EA posso facilmente usar vários TS, diferentes em suas magias.

Na verdade, o OOP foi inventado para simplificar o suporte ao código. Ao mesmo tempo, você tem que pagar um grande custo durante a redação. Se você escrever o código, usá-lo sem modificações e depois removê-lo, não faz sentido se preocupar com o OOP. O OOP dá uma vantagem exatamente quando o mesmo código é necessário em muitos lugares e periodicamente ele precisa ser modificado.

De forma correspondente, o escopo da aplicação e não aplicação do OOP é determinado pela necessidade de manutenção e mudanças no código.

 
George Merts:

Você poderia discutir sobre "eficiência".

O mesmo vale para a modifiabilidade - se seu código for usado em citações de precisão diferente - será necessário fazer alterações, e será que elas serão fáceis de serem feitas?

O principal problema em tais projetos é apenas fazer mudanças. Como mostra a prática, quanto maiores forem os blocos, maior é a probabilidade de que sejam introduzidos erros durante a modificação. A falta de comentários é uma desvantagem, não uma vantagem. É por isso que você tem que se lembrar de muitas coisas.

A versatilidade dos blocos é outro critério de avaliação. Naturalmente, um bloco deve ser utilizável para uma ampla gama de tarefas e facilmente adaptável às condições de mudança. Isto é exatamente o que eu tenho. Por exemplo, eu utilizo a chamada tecnologia "foco". Ou seja, os valores dos parâmetros principais são fixos em variáveis globais o tempo todo, e estas variáveis e colocadas em todos os blocos.

 
Precisamos comparar na prática. Caso contrário, é uma discussão inútil.
 
Реter Konow:

A versatilidade do bloco é outro critério de avaliação. Certamente, um bloco deve ser utilizável para uma ampla gama de tarefas e facilmente adaptável a condições variáveis. Isto é exatamente o que eu tenho. Por exemplo, eu utilizo a chamada tecnologia "foco". Ou seja, os valores dos parâmetros principais são fixos em variáveis globais o tempo todo, e estas variáveis e colocadas em todos os blocos.

Receio que as variáveis globais também sejam uma desvantagem. Deve haver o mínimo possível de variáveis globais disponíveis em todos os blocos. Apenas para garantir que cada bloco receba apenas os dados de que necessita, e sempre que possível - apenas de forma constante, para que não haja como mudar algo que não deveria mudar.

As únicas duas variáveis globais em meus projetos são objeto de classe CExpert, que funciona encapsulando a funcionalidade do Init(), OnTick() e outros eventos, e objeto CLogFile - um arquivo de log, que produz rastreamento, porque as macros de rastreamento devem funcionar de qualquer lugar no programa.

Para mim, confiar na memória não é a melhor solução, pelo menos, porque como disse Sherlock Holmes - em algum momento o conhecimento necessário será enterrado sob o amontoado de lixo desnecessário. E a memória também pode falhar.

 
George Merts:

Receio que as variáveis globais também sejam uma desvantagem. Deve haver o mínimo possível de variáveis globais disponíveis em todos os blocos. Apenas para garantir que cada bloco receba apenas os dados de que necessita, e sempre que possível - apenas de forma constante, para que não haja como mudar algo que não deveria mudar.

As únicas duas variáveis globais em meus projetos são o objeto de classe CExpert, que funciona encapsulando a funcionalidade do Init(), OnTick() e outros eventos, e o objeto CLogFile - um arquivo de log que produz o rastreamento, porque as macros de rastreamento têm que funcionar de qualquer lugar em um programa.

Confiar na memória não é a melhor solução, pelo menos porque, como disse Sherlock Holmes, em algum momento o conhecimento necessário será enterrado sob um amontoado de lixo desnecessário. E a memória também pode falhar.

Por trás de todos estes termos e do código OOP, não consigo ver a tarefa que você estava resolvendo. Qual foi sua essência? Por favor, descreva-o e eu lhe oferecerei minha solução. Então, podemos compará-los por todos os critérios possíveis.
 
Реter Konow:
É preciso compará-lo na prática. Caso contrário, esta é uma discussão inútil.

Por que "inútil"? Muito útil.

Mas como podemos comparar "facilidade de apoio" na prática?

Digamos, um código escrito como um bloco enorme e um código dividido em partes funcionais - a introdução de mudanças em ambos os casos é absolutamente a mesma. A única diferença é que no primeiro caso deve-se lembrar todos os links que serão afetados pela modificação e levá-los em conta. No segundo caso, como a unidade só tem acesso aos links necessários para funcionar - a modificação afetará todos os links disponíveis. Você não precisa se lembrar de nada - ajustar consistentemente tudo o que está disponível para o bloco que você deseja modificar.

É assim que se pode avaliar a diferença aqui ? A quantidade de trabalho é exatamente a mesma!