- Fundamentos de la programación orientada a objetos: Abstracción
- Fundamentos de la programación orientada a objetos: Encapsulación
- Fundamentos de la programación orientada a objetos: Herencia
- Fundamentos de la programación orientada a objetos: Polimorfismo
- Fundamentos de la programación orientada a objetos: Composición (diseño)
- Definición de clases
- Derechos de acceso
- Constructores: por defecto, paramétricos y de copia
- Destructores
- Autorreferencia: esto
- Herencia
- Creación dinámica de objetos: nuevo y suprimir
- Punteros
- Métodos virtuales (virtual y override)
- Miembros estáticos
- Tipos anidados, espacios de nombres y operador de contexto '::'
- Dividir definición y declaración de clase
- Clases abstractas e interfaces
- Sobrecarga de operadores
- Conversión de tipos de objeto: dynamic_cast y puntero void *
- Punteros, referencias y const
- Gestión de la herencia: final y delete
Clases e interfaces
Las clases son el principal bloque de construcción en el desarrollo de programas basados en la programación orientada a objetos. En un sentido global, el término clase se refiere a una colección de algo (cosas, personas, fórmulas, etc.) que tienen algunas características comunes. En el contexto de la programación orientada a objetos, esta lógica se mantiene: una clase genera objetos que tienen el mismo conjunto de propiedades y comportamiento.
En los capítulos anteriores de este libro nos familiarizamos con los tipos MQL5 integrados, como double, int o string. El compilador sabe cómo almacenar valores de estos tipos y qué operaciones se pueden realizar con ellos. Sin embargo, puede que no sea muy conveniente utilizar estos tipos a la hora de describir alguna área de aplicación. Por ejemplo, un operador de trading tiene que trabajar con entidades como una estrategia de trading, un filtro de señales, una cesta de divisas y una cartera de posiciones abiertas. Cada una de ellas consta de todo un conjunto de propiedades relacionadas, sujetas a normas específicas de tratamiento y coherencia.
Un programa para automatizar acciones con estos objetos podría consistir únicamente en tipos integrados y funciones sencillas, pero entonces habría que idear formas complicadas de almacenar y vincular propiedades. Aquí es donde la tecnología de programación orientada a objetos viene al rescate, proporcionando para ello mecanismos ya preparados, unificados e intuitivos.
La programación orientada a objetos propone escribir todas las instrucciones para almacenar propiedades, rellenarlas correctamente y realizar las operaciones permitidas en objetos de un tipo determinado definido por el usuario en un único contenedor con código fuente. Combina variables y funciones de una manera determinada. Los contenedores se dividen en clases, estructuras y asociaciones si se enumeran en orden descendente de capacidad y relevancia.
Ya nos encontramos con las estructuras y asociaciones en el capítulo anterior. Estos conocimientos serán útiles también para las clases, pero las clases ofrecen más herramientas del arsenal de la programación orientada a objetos.
Por analogía con una estructura, una clase es una descripción de un tipo definido por el usuario con un método de almacenamiento interno arbitrario y reglas para trabajar con él. Basándose en ella, el programa puede crear instancias de esta clase, los objetos que deben considerarse variables compuestas.
Todos los tipos definidos por el usuario comparten algunos de los conceptos básicos que podríamos llamar teoría de la programación orientada a objetos, pero son especialmente relevantes para las clases. Entre ellos figuran:
- abstracción
- encapsulación
- herencia
- polimorfismo
- composición (diseño)
A pesar de sus complicados nombres, aluden a normas bastante sencillas y familiares del mundo real, trasladadas al mundo de la programación. Empezaremos nuestra inmersión en la programación orientada a objetos analizando estos conceptos. En cuanto a la sintaxis para describir clases y cómo crear objetos, la abordaremos más adelante.