# Programación en C++/Desarrollo Orientado a Objetos

| ← Arrays y cadenas de texto | Objetos y Clases → |

## Desarrollo Orientado a Objetos

Antes de empezar a programar con objetos, es necesario entender ciertos conceptos básicos.
Terminología
El paradigma de Programación Orientada a Objetos utiliza algunos términos básicos que se explicarán a continuación.
* Objeto. Es una entidad que tiene atributos o propiedades y que presenta un comportamiento. Puede ser un objeto del mundo real, o una abstracción al mundo informático. Ejemplo, un automóvil, una persona, un animal, etc.
* Clase. Los humanos percibimos el mundo como un entorno compuesto de cosas, objetos, les llamamos. Interactuamos con tantos, que lo natural es agruparlos de acuerdo a sus características más relevantes o generales. En otras palabras, los clasificamos en clases. Todos los objetos que pertenecen a una clase, contiene todos los elementos comunes a todos los objeto y no particulariza en los elementos que distinguen a los objetos entre sí; ejemplo, la clase automóvil, comprende todos los automóviles que circulan en este momento por las calles. Incluiría elementos que asociamos a los automóviles, como llantas, puertas, asientos, volante, etcétera, pero no particularizaría en cuestiones como color, número de registro o características individuales a cada auto.
* Propiedad. Una característica asociada a una clase. Ejemplo, todos los autos tienen un color, o un registro aunque esta propiedad varíe entre objetos.
* Método. Posible acción que los objetos de una clase pueden realizar. En términos informáticos, un algoritmo que pueden ejecutar. Ejemplo: todos los autos pueden acelerar, frenar, etc.

## Características de la programación orientada a objetos

* Encapsulamiento. Cuando conducimos un auto, no es necesario que nos enteremos de como hace el motor para girar las ruedas del vehículo. Esos pormenores quedan ocultos al usuario o encapsulados en la estructura del la clase auto. Cada objeto presenta una interfaz al usuario de métodos y propiedades con las cuales se interactúa con él. Así se protege el objeto y todos los miembros de su clase, de alteraciones directas a sus métodos y propiedades.
* Polimorfismo. Una vez que aprendemos a conducir un auto, podemos manejar prácticamente cualquier auto. Esto se debe a que la interfaz que presentan los objetos auto a los usuarios, es más o menos la misma para cada auto. Todos tiene métodos para acelerar, y si bien, posiblemente los pormenores de como acelera cada auto, sean sustancialmente diferentes; el usuario hace referencia a un mismo método en todos los autos. En términos informáticos, objetos de clases diferentes; incluso en la misma clase; pueden tener métodos homónimos, que hagan cosas equivalentes aunque los detalles del como, sean diferentes.
* Herencia. La clase auto es una clase muy general; se puede hacer un desglose más pormenorizado, por ejemplo, si hacemos subclases de autos deportivos, utilitarios, compactos, manuales, automáticos, de lujo, etc. Cada subclase toma de su clase base (o superclase, en la jerga informática) las propiedades y métodos más generales y agrega las propias. Así, como todos los autos, tienen color y registro, así que éstas estarían contenidas en la superclase auto. Propiedades como Capacidad en toneladas, sistema estéreo o cantidad de velocidades, estarían delegadas a las subclases más particulares.
| ← Arrays y cadenas de texto | Arriba | Objetos y Clases → |