- Encapsulamento e Extensibilidade de Tipo
- Herança
- Polimorfismo
- Sobrecarga (Overload)
- Funções Virtuais
- Membros Estáticos de uma Classe
- Templates de Função
- Modelos de classes
- Classes abstratas
Programação Orientada a Objetos
Programação orientada a objetos (OOP) é programar basicamente focada em dados, enquanto dados e comportamento estão inseparavelmente ligados. Juntos, dados e comportamento, constituem uma classe, enquanto objetos são instâncias de classe.
Os componentes da abordagem orientada a objetos são:
OOP considera computação como modelagem de comportamento. O item modelado é o objeto representado pelas abstrações computacionais. Suponha que nós quiséssemos escrever "Tetris", um jogo bem conhecido. Para fazer isso, nós devemos aprender como modelar a aparência de uma forma aleatórias compostas de quatro quadrados ligados nas bordas. Também nós precisaríamos regular a velocidade de queda das figuras e definir operações de rotação e deslocamento. A movimentação das formas na tela é limitada pelas bordas da peça, este requerimento também deve ser modelado. Além disso, linhas preenchidas de cubos devem ser destruídas e pontos conseguidos devem ser contados.
Assim, este jogo de fácil entendimento requer a criação de vários modelos - modelo de forma, modelo de peça, modelo de movimentação da figura, e assim por diante. Todas estes modelos são abstrações, representadas por cálculos no computador. Para descrever estes modelos, o conceito de Tipo de Dados Abstratos, ADT (tipo de dados complexos), é usado. Estritamente falando, o modelo do movimento das "formas" no jogo não é um tipo de dado, mas é um conjunto de operações sobre o tipo de dado "forma", usando as restrições do tipo de dado "peça".
Objetos são variáveis de classe. A programação orientada a objetos permite a você facilmente criar e usar ADT. A programação orientada a objetos usa o mecanismo de herança. O benefício da herança está no fato de permitir obter tipos derivados a partir de tipos de dados já definidos por um usuário.
Por exemplo, para criar formas Tetris, é conveniente primeiro criar uma classe base Forma. As outras classes representando todos os sete possíveis tipos de forma podem ser derivadas desta base. O comportamento das figuras é definido na classe base, enquanto que a implementação do comportamento de cada figura separada é definida em classes derivadas.
Em OOP, objetos são responsáveis por seu comportamento. O desenvolvedor de ADT deve incluir um código para descrever qualquer comportamento que normalmente seria esperado dos objetos correspondentes. O fato do objeto ser responsável por seu comportamento, simplifica enormemente a tarefa de programação deste objeto pelo usuário.
Se quiséssemos desenhar uma figura na tela, precisaríamos conhecer onde o centro desta figura estaria e como desenhá-la. Se um forma separada sabe como se desenhar, o programador deve enviar uma mensagem de "desenhe" ao usar tal forma.
A linguagem MQL5 é semelhante ao C++, e ela também tem mecanismos de encapsulamento para a implementação de ADT. Por um lado, o encapsulamento esconde os detalhes internos da implementação de um tipo particular, e por outro lado, torna acessível externamente funções que podem influenciar objetos deste tipo. Detalhes de implementação podem ser inacessíveis a um programa que usa este tipo.
O conceito de OOP tem um conjunto de conceitos relacionados, incluindo o seguinte:
- Simulação de ações do mundo real
- Tipos de dados definidos pelo usuário
- Ocultamente de detalhes de implementação
- Possibilidade de reutilização de código através de herança
- Interpretação de chamadas de função durante execução
Alguns destes conceitos são bastante vagos, alguns são abstratos, outros são gerais.