Discussão do artigo "Desenvolvendo um agente de Aprendizado por Reforço em MQL5 com Integração RestAPI (Parte 4): Organizando Funções em Classes no MQL5"

 

Novo artigo Desenvolvendo um agente de Aprendizado por Reforço em MQL5 com Integração RestAPI (Parte 4): Organizando Funções em Classes no MQL5 foi publicado:

Este artigo examina a transição da codificação procedural para a Programação Orientada a Objetos (POO) no MQL5, com foco na integração com REST APIs. Discutimos como organizar funções de requisições HTTP (GET e POST) em classes, ressaltando vantagens como encapsulamento, modularidade e facilidade de manutenção. A refatoração de código é detalhada, mostrando a substituição de funções isoladas por métodos de classes. O artigo inclui exemplos práticos e testes.

Neste artigo, vamos dar um passo importante e organizar nossas funções em classes dentro do MQL5. Vamos usar a programação orientada a objetos, que é uma maneira de escrever código que ajuda a manter as coisas organizadas e fáceis de entender. É importante porque torna mais fácil consertar e melhorar o código. Um código bem organizado e modular também pode ser usado em diferentes partes do projeto ou até em projetos futuros.

No restante do artigo, vamos explicar como reestruturar nossas funções MQL5 existentes em classes. Mostraremos como isso pode tornar o código mais legível e eficiente. Vamos dar exemplos práticos de como fazer isso e mostrar como isso pode tornar o código mais fácil de manter e melhorar.

A programação orientada a objetos (POO) é uma maneira poderosa de desenvolver software. No MQL5, usar classes é um grande avanço em relação à maneira procedural de escrever código. Nesta parte, vamos explorar como isso pode melhorar a qualidade do nosso projeto. Vamos olhar para quatro coisas importantes:

  1. Encapsulamento e Modularidade: Classes ajudam a organizar funções relacionadas e variáveis em um único lugar, tornando mais fácil a manutenção e reduzindo erros.

  2. Reutilização de Código: Uma vez que você escreve uma classe, pode usá-la em muitos lugares diferentes, economizando tempo e mantendo o código consistente.

  3. Facilidade de Manutenção e Melhoria: Com funções organizadas em classes, é mais fácil encontrar e corrigir bugs ou fazer melhorias. A estrutura clara torna o código mais acessível.

  4. Abstração e Flexibilidade: Classes facilitam a abstração, escondendo a complexidade e expondo apenas o que é necessário. Isso torna o código mais intuitivo e flexível.

Vamos mostrar que reorganizar nossas funções em classes no MQL5 não é apenas para deixar o código mais bonito. É uma mudança importante que torna o código mais eficiente, fácil de entender e de manter. Vamos explicar como transformar funções isoladas em métodos de classes bem definidas, trazendo benefícios imediatos e a longo prazo. Isso não só aprimora nosso projeto atual, mas também nos ajuda a criar uma base sólida para futuros projetos em MQL5.

Autor: Jonathan Pereira

 

Olá, Jônatas,


Ótimo artigo, mas só para avisá-lo. Quando você usa a palavra-chave "interface", não precisa usar "public:", "virtual" e " = 0;"


Shep

 
Shephard Mukachi #:

Olá, Jônatas,


Ótimo artigo, mas só para avisá-lo. Quando você usa a palavra-chave "interface", não precisa usar "public:", "virtual" e " = 0;"


Shep

Obrigado pelo seu comentário! Fico feliz que tenha gostado do artigo. Gostaria de esclarecer por que optei por usar public: , virtual e = 0; nas interfaces, mesmo que alguns desses elementos possam parecer redundantes:

  1. Clareza e Consistência do Código:

    • Em C++ e, por extensão, em MQL5, deixar explícito public: , virtual e = 0; em interfaces melhora a legibilidade e deixa claro que esses métodos são parte de uma interface que precisa ser implementada. Isso é especialmente útil para desenvolvedores que estão mais acostumados com linguagens como Java, onde essas declarações são obrigatórias.
  2. Compatibilidade com C++:

    • MQL5 se baseia fortemente no C++, onde interfaces são definidas com classes abstratas puras. Explicitamente usar virtual e = 0; garante que o código MQL5 siga as boas práticas do C++, facilitando a vida dos desenvolvedores que trabalham com ambas as linguagens.
  3. Documentação Implícita:

    • Mesmo que os membros de uma interface sejam implicitamente públicos, declarar public: age como uma forma de documentação interna, deixando claro para qualquer um que leia o código que esses métodos são acessíveis publicamente. Virtual e = 0; reforçam que a classe é abstrata e os métodos precisam ser implementados pelas classes derivadas.
  4. Extensibilidade e Manutenção:

    • Manter essas declarações explícitas permite uma maior flexibilidade na evolução do código. Caso seja necessário adicionar métodos não virtuais ou privados no futuro, a estrutura do código já estará preparada para essas modificações, facilitando a manutenção.
  5. Conformidade com Padrões de Codificação:

    • Muitos padrões de codificação em C++ recomendam ou exigem essas declarações explícitas. Seguir esses padrões em MQL5 ajuda a manter um alto nível de rigor e disciplina na codificação.

Embora não seja estritamente necessário usar public: , virtual e = 0; em interfaces MQL5, optar por incluí-los traz benefícios em termos de clareza, consistência e manutenção do código. Espero que essa explicação ajude a esclarecer minha escolha de design.

 
Jonathan Pereira #:

Obrigado por seu comentário! Fico feliz que tenha gostado do artigo. Gostaria de esclarecer por que optei por usar public: , virtual e = 0; nas interfaces, mesmo que alguns desses elementos possam parecer redundantes:

  1. Clareza e consistência do código:

    • Em C++ e, por extensão, em MQL5, explicite public: , virtual and = 0; nas interfaces melhora a legibilidade e deixa claro que esses métodos fazem parte de uma interface que precisa ser implementada. Isso é especialmente útil para desenvolvedores que estão mais acostumados com linguagens como Java, em que essas declarações são obrigatórias.
  2. Compatibilidade com C++:

    • A MQL5 é fortemente baseada em C++, onde as interfaces são definidas com classes abstratas puras. O uso explícito de virtual e = 0; garante que o código MQL5 siga as práticas recomendadas do C++, facilitando a vida dos desenvolvedores que trabalham com ambas as linguagens.
  3. Documentação implícita:

    • Mesmo que os membros de uma interface sejam implicitamente públicos, declarar public: atua como uma forma de documentação interna, deixando claro para qualquer pessoa que esteja lendo o código que esses métodos são acessíveis publicamente. Virtual and = 0; reforçam que a classe é abstrata e que os métodos precisam ser implementados pelas classes derivadas.
  4. Extensibilidade e capacidade de manutenção:

    • Manter essas declarações explícitas permite maior flexibilidade na evolução do código. Se for necessário adicionar métodos não virtuais ou privados no futuro, a estrutura do código já estará preparada para essas alterações, facilitando a manutenção.
  5. Conformidade com os padrões de codificação:

    • Muitos padrões de codificação C++ recomendam ou exigem essas declarações explícitas. Seguir esses padrões na MQL5 ajuda a manter um alto nível de rigor e disciplina na codificação.

Embora não seja estritamente necessário usar public: , virtual e = 0; nas interfaces MQL5, optar por incluí-las traz benefícios em termos de clareza, consistência e facilidade de manutenção do código. Espero que essa explicação ajude a esclarecer minha escolha de design.

Entendi. Eu trabalho muito em C++, então entendi. Ótimo trabalho, ótimo artigo e ótima resposta, obrigado.