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

 
Vladimir Simakov:
Merda. Como você gostaria de criar um delegado mql? Só por diversão, para levantar o BSD.

analógico não pode, fez isso, verificado em MT4 funciona até agora, mas em MT5 não funciona mais

typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
void OnStart()
{  TFuncvoidPTR arrPTR[3];
   arrPTR[0]=f1;
   arrPTR[1]=f2;
   arrPTR[2]=f3;
   for(int i=0; i<3; i++)
      arrPTR[i]();			// ' ) ' - expression expected

}
//_______________________________________________________________________
void f1() { Print("1"); }
void f2() { Print("2"); }
void f3() { Print("3"); }
//+------------------------------------------------------------------+

2019.10.06 16:22:44.202 tst EURUSD,H1: 3

2019.10.06 16:22:44.202 tst EURUSD,H1: 2

2019.10.06 16:22:44.202 tst EURUSD,H1: 1

 
Igor Makanu:

analógico não pode, fez isso, verificado em MT4 funciona até agora, mas em MT5 não funciona mais

2019.10.06 16:22:44.202 tst EURUSD,H1: 3

2019.10.06 16:22:44.202 tst EURUSD,H1: 2

2019.10.06 16:22:44.202 tst EURUSD,H1: 1

A diferença fundamental do c# é esta linha:arrPTR[0]=f1;

Deve se parecer com isto:arrPTR[0]=nova tralala(f1);

Ou algo parecido. O que eu não entendo é: como alguém poderia querer fazer isso? E para falar sobre a adequação do pensamento de outra pessoa.
 
Dmitry Fedoseev:

A diferença fundamental do c# é que esta linha:arrPTR[0]=f1;

Deve se parecer com isto:arrPTR[0]=nova tralala(f1);

Ou algo parecido. É isso que eu não entendo - como se pode querer uma coisa dessas? E para falar sobre a adequação do pensamento de outra pessoa.

Em Sharpe, o conceito: "pegar o recheio de todos os idiomas existentes" + adicionar magia na forma de OOP puro e obrigatório em qualquer caso - você obtém qualquer solução até

int a = new int();
char b = new Char();
string c = new string(new char[] { });
string d = String.Empty;
String e = String.Empty;


e depois de ver este código um programador C++ começa a procurar por significados ocultos nele.... mas não adianta! - o único objetivo é reunir todos os não-programadores em C# imho ))))

 

As razões pelas quais a herança irrestrita leva à "degeneração" dos objetos são encontradas.

EXPLICAÇÃO:

1. declaramos uma base (abstrato) classe A.

2. Construímos uma longa cadeia de herança a partir dela. Para isso, criamos 10 herdeiros de A e 10 descendentes de cada um deles. Temos 10 cadeias de herança direta, 10 classes em cada uma.

3. Cada classe tem 10 propriedades únicas e 10 métodos. Devido a sua singularidade, as propriedades e métodos são encapsulados suavemente em classes e uma hierarquia clara representando a estrutura "elegante" do objeto base é construída sobre eles.

4. Mas eis que as propriedades únicas se esgotam. Aparecem novos "objetos" - "nascidos" pelo cruzamento de propriedades e métodos de diferentes classes e diferentes cadeias. Eles não têm uma cadeia de herança direta de A, mas herdam suas propriedades através de muitas cadeias que levam ao objeto base.

Ao mesmo tempo, herdando suas propriedades de objetos "únicos", os objetos "mistos" herdam apenas algumas propriedades e métodos deles, deixando outros não reclamados. Eles herdaram muitas classes, mas deveriam levar apenas parte de seu material "herdado", deixando o resto intocável. MAS ISTO NÃO É POSSÍVEL. Ao acessar suas classes, eles herdam o que estiver disponível.

Em outras palavras, sua herança não é clara. Ao acessar seus "pais", estes objetos adquirem propriedades e métodos que não precisam. E não há como evitar estas "superfagulhas".

Isso significa que a herança pára para funcionar corretamente quando há um grande número de descendentes. Os objetos "degeneram" devido ao conjunto de "pais" e à generalização da diversidade excessiva de "material herdado". Os objetos deixam de ser conceitualmente coerentes.


 
Não, isso não pode acontecer. Em algum lugar em torno do nível 6-8 da herança ocorre uma mutação e um levante de máquina.
 
Реter Konow:

As razões pelas quais a herança irrestrita leva à "degeneração" dos objetos são encontradas.

EXPLICAÇÃO:

1. declaramos uma base (abstrato) classe A.

2. Construímos uma longa cadeia de herança a partir dela. Para isso, criamos 10 herdeiros de A e 10 descendentes de cada um deles. Temos 10 cadeias de herança direta, 10 classes em cada uma.

3. Cada classe tem 10 propriedades únicas e 10 métodos. Devido a sua singularidade, as propriedades e métodos são encapsulados suavemente em classes e uma hierarquia clara representando a estrutura "elegante" do objeto base é construída sobre eles.

4. Mas eis que as propriedades únicas se esgotam. Aparecem novos "objetos" - "nascidos" pelo cruzamento de propriedades e métodos de diferentes classes e diferentes cadeias. Eles não têm uma cadeia de herança direta de A, mas herdam suas propriedades através de muitas cadeias que levam ao objeto base.

Ao mesmo tempo, herdando suas propriedades de objetos "únicos", os objetos "mistos" herdam apenas algumas propriedades e métodos deles, deixando outros não reclamados. Eles herdaram muitas classes, mas deveriam levar apenas parte de seu material "herdado", deixando o resto intocável. MAS ISTO NÃO É POSSÍVEL. Ao acessar suas classes, eles herdam o que estiver disponível.

Em outras palavras, sua herança não é clara. Ao acessar seus "pais", estes objetos adquirem propriedades e métodos que não precisam. E não há como evitar estas "superfagulhas".

Isso significa que a herança pára para funcionar corretamente quando há um grande número de descendentes. Os objetos "degeneram" devido ao conjunto de "pais" e à generalização da diversidade excessiva de "material herdado". Os objetos deixam de ser conceitualmente coerentes.


Assim - o conceito errado é construído.
Por que herdar uma carroceria de automóvel e um retrato de um objeto "emoldurado"?
 
Artyom Trishkin:
Assim - o conceito errado é construído.
Por que herdar a carroceria e o retrato do objeto "emoldurado"?

Na área de pequenas tarefas, não é necessária uma enorme hierarquia de herança. Mas, a hierarquia da Base de Conhecimento AI, é quase ilimitada. Cheguei à conclusão que a hierarquia dos objetos é conveniente, prática e eficaz até certos limites, após os quais começa a herança "múltipla", levando à "degeneração" das gerações de objetos. Novos objetos são removidos da base e suas propriedades são "secundárias", pois são coletados de outros objetos. No processo de "coleta" de propriedades, os novos objetos assumem um "material herdado" extra, que é "encravado" em sua operação.

Eu não sei como resolver este problema.

 

caso alguém o leia,https://tproger.ru/translations/oop-principles-cheatsheet/

Embora duvide, não é tarefa da burguesia ler o que eles escrevem.

 
Igor Makanu:

caso alguém o leia,https://tproger.ru/translations/oop-principles-cheatsheet/

Embora eu duvide, não cabe à burguesia ler o que eles escrevem.

O artigo fala sobre herança. Leia-o.

"Herança é a capacidade de um objeto de se basear nas propriedades de outro".

Mas e se você tiver um objeto da 102ª geração que possa herdar SOMENTE de vários objetos em vez de um? Ela adquirirá propriedades e métodos extras em proporção ao número de seus "pais".

 
Реter Konow:

Na área de pequenas tarefas, não é necessária uma hierarquia enorme de herança. Mas, a hierarquia da Base de Conhecimento AI é quase ilimitada. Cheguei à conclusão que a hierarquia dos objetos é conveniente, prática e eficaz até certos limites, após os quais começa a herança "múltipla", levando à "degeneração" das gerações de objetos. Novos objetos são distanciados da base e suas propriedades são "secundárias", pois são coletados de outros objetos. No processo de "colheita" de propriedades, os novos objetos adquirem "material herdado" extra que é "encravado" em sua operação.

Não tenho certeza de como resolver este problema.

Classificação clara. Se vemos que vários objetos têm as mesmas propriedades, então é lógico descrever essas propriedades em um único objeto pai.
Se um objeto criança substitui um objeto pai com o mesmo nome, esse objeto deve ser virtual.