Perguntas sobre OOP em MQL5 - página 32

 
Vladimir Tkach:
Ultimamente, comecei a ver algum tipo de "coleta de lixo" nas funções de vários compiladores. O que é isso?
Se você quer dizer coleta de lixo, é a coisa que apaga ao invés de você, mas não quando a variável deixa o escopo, mas quando quer. A propósito, não o fato de você mesmo poder chamar o destruidor, dependerá da linguagem, em Sharp, pois entendo que é impossível.
 
Vladimir Simakov:
Aqui dependerá do idioma, em Sharp, como eu entendo ser impossível.

É, tudo o que pode ser feito é atribuir um objeto não utilizado à NULL, existem manuais no site da Microsoft sobre como forçar a chamar o coletor de lixo, mas parece que li no hubra que não é o fato de que o coletor será lançado nesta chamada como esperado

isto é, em Sharp eles tiraram a maior parte da gestão da memória do programador - tudo está à mercê do sistema operacional e do compilador

 
Igor Makanu:

É, tudo o que pode ser feito é atribuir um objeto não utilizado à NULL, existem manuais no site da Microsoft sobre como forçar a chamar o coletor de lixo, mas parece que li na hubra que não é o fato de que o coletor será lançado nesta chamada como esperado

isto é, em Sharp eles tiraram a maior parte da gestão da memória do programador - tudo está à mercê do sistema operacional e do compilador

Aí está. Estou escrevendo minha primeira tarefa Sharp agora mesmo e, depois de novo no método, me sinto horrível por causa da ausência de apagar em código))))))
 
Vladimir Simakov:
Aí está. Atualmente estou escrevendo meu primeiro livro didático Sharp e estou assustado com a ausência de apagar em código depois de novo no método)))))

em vez de excluir MyObj; escrever MyObj = nulo; - isto funcionará

e depois usar ??? - foi um pouco embaraçoso no início, depois funciona automaticamente

mas não é a maior diferença do C++, em C# todos os objetos são referências e se você definir MyObj_1=MyObj_2; você não recebe uma cópia, você recebe um ponteiro... Estou prestes a confundir você, aqui está um tutorial rápido, só estou olhando para o caso de eu ter esquecido alguma coisa

https://metanit.com/sharp/tutorial/2.16.php


Типы значений и ссылочные типы | C#
  • metanit.com
Ранее мы рассматривали следующие элементарные типы данных: int, byte, double, string, object и др. Также есть сложные типы: структуры, перечисления, классы. Все эти типы данных можно разделить на типы значений, еще называемые значимыми типами, (value types) и ссылочные типы (reference types). Важно понимать между ними различия. Ссылочные типы...
 

Acho que estou começando a entender a necessidade e a utilidade do OOP, mas estou tendo problemas para implementá-lo.

Eu tenho uma classe que deve ser usada com três conjuntos diferentes de variáveis. Mas ele realiza uma tarefa. Em termos simples, podemos inserir 3 construtores, declarar 3 variáveis e referir-nos a elas. Mas, do meu ponto de vista, isso não é totalmente correto. Além disso, há uma variável do tipo string em duas variantes, mas é diferente no nome e é usada em diferentes partes do código. É claro que você pode mudar a seqüência de variáveis, mas acho que isto também não é muito correto.

Eu li a documentação sobre o novo operador, mas não entendo como isso pode ajudar. Não vejo a diferença entre três variáveis de objeto diferentes e três ponteiros para os mesmos objetos. Talvez seja rentável quando você cria um ponteiro uma vez, use este objeto e o apague quando não for necessário. Mas se você precisa do objeto regularmente, é absolutamente bobo criar um ponteiro para ele cada vez e apagá-lo.

Portanto, por favor, me ajude. Li algumas explicações sobre o OOP em C++, mas elas são descritas lá de forma pior do que na documentação em mql5. Por favor, não peça aos impacientes que se juntem a mim, eu farei muitas perguntas. Também não estou interessado em código pronto sem explicações, quero entendê-lo e não repetir estupidamente "Faça conosco, faça como nós fazemos...".

 
Alexey Viktorov:

Acho que estou começando a entender a necessidade e a utilidade do OOP, mas estou tendo problemas para implementá-lo.

Eu tenho uma classe que deve ser usada com três conjuntos diferentes de variáveis. Mas ele realiza uma tarefa. Em termos simples, podemos inserir 3 construtores, declarar 3 variáveis e referir-nos a elas. Mas, do meu ponto de vista, isso não é totalmente correto. Além disso, há uma variável do tipo string em duas variantes, mas é diferente no nome e é usada em diferentes partes do código. É claro que você pode mudar a seqüência de variáveis, mas acho que isto também não é muito correto.

Eu li a documentação sobre o novo operador, mas não entendo como isso pode ajudar. Não vejo a diferença entre três variáveis de objeto diferentes e três ponteiros para os mesmos objetos. Talvez seja rentável quando você cria um ponteiro uma vez, use este objeto e o apague quando não for necessário. Mas se você precisa do objeto regularmente, é bobagem criar um ponteiro para ele a cada vez e apagá-lo.

Em resumo, por favor, ajude. Li algumas explicações do OOP em C++, mas elas são descritas ali de forma pior do que na documentação em mql5. Por favor, não impacientes, eu farei muitas perguntas. Também não estou interessado em código pronto sem explicações, quero entendê-lo e não repetir estupidamente "Faça conosco, faça como nós fazemos...".

Precisamos de mais detalhes. Que tarefa a classe realiza?

 
Koldun Zloy:

Os detalhes são necessários. Que tarefa a classe realiza?

Não é segredo, uma amostra do calendário de eventos econômicos CalendárioValueHistória(). Em um caso, todas as notícias no intervalo de tempo. Em outro por país e em outro intervalo de tempo. Na terceira, é por um símbolo. Mas existe uma diferença fundamental? As palestras de programação dividem as soluções pelo tipo de tarefas que realizam?

Recentemente conheci alguém que chumbou em um teste de direção e estava indignado, dizendo que não tinha dirigido naquele cruzamento em suas aulas de direção e simplesmente não sabia dirigir naquele cruzamento.

 
Embora agora eu esteja pensando que talvez seja realmente melhor criar um ponteiro, usar o objeto e apagá-lo quando ele não for necessário... Afinal de contas, o intervalo de tempo será diferente a cada vez. Ou é mais fácil usar setters para inserir tempo em um objeto existente?
 
Alexey Viktorov:

Em outro por país e em um intervalo de tempo diferente.

países em enumeração

No construtor, mesmo através da chave usual - caso, faça a inicialização conforme você precisar, eu mostrei acima um modelo com interfaces, eu também inicializo uma das estratégias no construtor, dependendo dos parâmetros, e o resto do trabalho é reduzido a escrever uma estratégia específica

https://www.mql5.com/ru/forum/85652/page24#comment_13054686

 
Igor Makanu:

países em enumeração

No construtor, mesmo através da chave usual - case, faça a inicialização conforme você precisa, eu mostrei acima um modelo com interfaces, eu também inicializo uma das estratégias no construtor dependendo dos parâmetros, e o resto do trabalho se resume a escrever uma estratégia específica

https://www.mql5.com/ru/forum/85652/page24#comment_13054686

Chato... Há modelos e interfaces a serem dominados também????