Hace unos días estuve colaborándole a un amigo en la elaboración de una aplicación que debía realizar usando Programación Orientada a Objetos en C++. La mayoría de aplicaciones que he desarrollado, las hecho en Java, y ya que Java es un lenguaje que ha sido influido por C++, pensé que no habría mucha diferencia entre el uno y el otro, y vaya sorpresa que me di ;)
La verdad es que en muchos aspectos se me presentaron bastantes inconvenientes. Recordemos que C++ es un lenguaje que extiende del lenguaje de programación C mecanismos que nos permiten la manipulación de objetos, es decir, que no es un lenguaje meramente orientado a objetos como Java o C#, sino que es más bien un lenguaje híbrido.
Cabe aclarar que estos tutoriales no son básicos, es decir que ya debes de tener algún conocimiento en el lenguaje de programación C++, como sus tipos de datos, declaración de variables, operaciones, ciclos, importación de librerías, uso de namespaces, en fin.
Después de esta breve introducción y antes de adentrarnos en los detalles específicos de la programación orientada a objetos en C++, demos un pequeño repaso a lo que es la POO y sus características.
En el siguiente enlace puedes ver un artículo sobre las características del Paradigma de Programación Orientado a Objetos. Sin embargo, mencionaremos a continuación algunas de ellas y aspectos principales a tener en cuenta:
Programación Orientada a Objetos en C++
1) Objetos: Un objetos es la entidad básica del paradigma de programación Orientado a Objetos y es el que integra la estructura de datos (atributos) y un comportamiento (operaciones). Se distinguen entre sí por medio de su propia identidad, aunque internamente los valores de los atributos sean iguales.
2) Clases: Las clases describen posibles objetos, con una estructura y comportamiento común. Aquellos objetos que contienen los mismos atributos y operaciones pertenecen a la misma clase. La estructura de clases integra las operaciones con los atributos a los cuales se aplican.
3) Instancia: El proceso de crear objetos que pertenecen a una clase se denomina instanciación. De cierta clase, pueden ser instanciados un número indefinido de objetos.
4) Herencia: En una jerarquía de clases, es posible compartir atributos y operaciones entre clases basados en la generalización de clases. Dicha generalización se construye mediante la herencia. Las clases más generales se conocen como superclases y las clases más especializadas se conocen como subclases. En C++, a diferencia de otros lenguajes, la herencia puede ser simple o múltiple.
5) Abstracción: La abstracción se concentra en lo primordial de una entidad y no en sus propiedades secundarias, además de en qué es lo que hace el objeto y no en cómo lo hace. En este sentido, se da énfasis a cuáles son los objetos y no cómo son usados.
6) Encapsulamiento: El encapsulamiento es la separación de las propiedades externas de un objeto de los detalles de implementación internos del objeto. Al separar la interfaz del objeto de su implementación, se limita la complejidad a mostrarse sólo la información relevante. Por otra parte, disminuye el impacto a cambios en la implementación, ya que los cambios a las propiedades internas del objeto no afectan su interacción externa.
7) Modularidad: El encapsulamiento de los objetos trae como consecuencia una gran modularidad. Cada módulo se concentra en una sola clase de objetos, así, cada módulo se concentra en una sola clase objetos. Los módulos tienden a ser pequeños y concisos. La modularidad ofrece la ventaja que facilita el encontrar y corregir problemas, además de que la complejidad de un sistema se reduce facilitando así su mantenimiento.
8) Extensibilidad: La extensibilidad permite hacer cambios en un sistema sin afectar lo que ya existe. De esta forma nuevas clases pueden ser definidas sin tener que cambiar la interfaz del resto del sistema. La definición de los objetos existentes puede ser extendida sin necesidad de cambios más allá del propio objeto.
9) Polimorfismo: El polimorfismo es la característica de definir las mismas operaciones con diferente comportamiento en diferentes clases. De esta forma es posible llamar una operación sin preocuparse de cuál implementación es requerida en qué clase, siendo responsabilidad de la jerarquía de clases y no del programador.
10) Reusabilidad de código: La programación orientada a objetos apoya el reuso de código en un sistema, ya que los componentes orientados a objetos se pueden utilizar para estructurar librerías reusables. El reuso reduce el tamaño de un sistema durante la creación y ejecución. La herencia es uno de los factores más importantes contribuyendo al incremento en el reuso de código dentro de un proyecto.
Con estos conceptos finalizamos este artículo, el cual ha sido un poco teórico. Ya en los siguientes empezaremos a ver algo de código para comprender mejor como se usa la Programación Orientada a Objetos en C++.
No hay comentarios.:
Publicar un comentario