Introduccion de la programacion orientada a objetos C++

Programacion orientada a objetos analogia

Es común que a los estudiantes les aburra el tan solo pensar que tienen que aprender a programar de una forma distinta, siendo que ya pueden realizar ciertos programas, incluso el propio título suena como si se tratase de algo indispensable, pero en verdad la programación orientada a objetos (POO) no es más que una forma diferente de organizar el código, aunque por supuesto las llamadas y consulta de bloques de código cambiaran un poco por lo tanto también hay que aprender un par de términos nuevos y practicar un poco.

Beneficios de la programación orientada a objetos



¿Por qué aprender algo que todavía no sabemos si realmente nos servirá?, y más si sabemos que es opcional, para entender la importancia de dedicar un poco de tiempo a aprender esta forma de programar enumero las ventajas a continuación.

En principio el código será mucho más pequeño y por lo tanto más legible, y es que aunque al inicio pensamos que separando el código en distintos archivos fuente y usando nombres de funciones entendibles no habrá problemas, en verdad al momento de desarrollar algo más allá de una calculadora de practica o un bloc de notas, como pueden ser un software que consulte una base de datos, una aplicación que manipule gráficos o un "sencillo" punto de venta podemos ahorrar cientos de líneas de código con este nuevo paradigma.

Otra ventaja es el hecho de que más de la mitad de los programadores de C++ utilizan la POO entonces si no la entendemos no podríamos trabajar en conjunto con ellos, ¿está claro verdad?, o incluso al descargar algún código fuente de un programa opensource se nos haría imposible realizar cambios en el.

En cuanto al rendimiento y tamaño del programa final la diferencia es poca o por lo menos no favorable para la POO, porque incluso en ocasiones ciertas llamadas extra pueden significar un monto extra de computación (de cálculo por el CPU) aunque como se acaba de denotar la diferencia es ínfima.

No todo son ventajas porque de hecho como desventaja se puede mencionar la realidad de que sin aprender POO ya estamos programando y a esta programación que se basa únicamente en funciones sin clases se le llama programación procedural, aprender POO necesita un poco de esfuerzo. Empecemos con la explicación a la cual añado ejemplos que pueden ser compilados con cualquier IDE para C++ pues son estándar, ¡con ejemplos es más sencillo aprender!.

Entendiendo la programación orientada a objetos



En un par de reglones se puede resumir que su estructura se basa en crear una clase que a su vez contendrá métodos y atributos, posteriormente en la función main que todo programa en C++ tiene, crearemos uno o más objetos a partir de dicha clase, ahora veamos que son clases, objetos, métodos y atributos.

Clase: Pensemos en una clase como un grupo de características que han de tener en común todos los objetos que se generen a partir de ella, por ejemplo si creamos la clase "seres vivos" podemos decir que han de tener las siguientes características nacer, crecer, reproducirse y morir, en código una clase se declara con la palabra reservada class y se ve algo así:

class grupo{  // hemos llamado a esta clase grupo (esta nota puede ser borrada)
// aquí entre las llaves escribiremos los métodos y atributos de la clase es decir todo su contenido.
};


Programacin orientada a objetos atributos y metodos

Atributos: son las variables que estarán incluidas dentro de la clase también conocidas como variables miembro, son solo eso variables dentro de la clase que luego servirán para lo que sirve toda variable, esto es almacenar valores, siguiendo con la analogía anterior de la clase seres vivos podemos decir que precisamente esas características "nacer, crecer, reproducirse y morir" vendrían siendo los atributos.

class grupo{
int primero;
int segundo;
int resultado;

};


En este segundo ejemplo se observa que ingresamos 3 variables llamadas primero, segundo y resultado, son de tipo entero por eso almacenaremos números en ellas y que posteriormente podremos sumar, restar o lo que deseemos, estas variables son llamadas atributos.

Métodos: son llamadas a funciones o funciones que van a estar contenidas dentro de la clase, por esto decíamos que una clase contiene atributos y métodos, en otras palabras contiene variables y funciones, viene ejemplo...

class grupo{
int primero;
int segundo;
int resultado;
public: // Los métodos han de estar ubicados debajo del indicador public para poder usarlos desde afuera.
void sumar(); // Este es un método, como podemos ver no es más que una llamada a una función.
};


De este ejemplo podemos observar que añadimos a nuestra clase grupo un método llamado sumar, la función la declararemos por fuera de la clase, en los capítulos anteriores se explicaba todo sobre las funciones, como crearlas y usarlas, lo único que hay que observar aquí es que estas llamadas a funciones han de ser de tipo void, por eso antes del nombre de nuestra función sumar colocamos la palabra void.

Ahora bien, ya tenemos la llamada a la función pasamos a crear la función para ya casi terminar, este código irá por fuera de la clase grupo o si se desea dentro de la misma clase pero usualmente lo colocamos por fuera, al igual que toda función jamás las colocamos dentro de la función main.

    void grupo::sumar(){
resultado=primero+segundo;
cout << resultado << endl;
};


Han de estarse preguntando qué significa "::" y porque esta función no es igual que una función simple, eso se debe a que debemos de aclararle al programa que esta función pertenece a la clase grupo por eso añadimos void grupo:: y después de ahí en adelante todo es como cualquier otra función, así que estos dos puntos y dos puntos - que por cierto los dos puntos pueden sacarlos en su teclado con la combinación ALT + 58 - nos permiten indicar pertenencia.

Objeto: es un elemento que pertenece a una clase, pero ojo aquí porque al momento de crear el código, los objetos no se crean dentro de la clase sino por fuera, cada objeto con sus propios valores, de esta forma a partir de una clase podemos crear muchos objetos, cada objeto tiene métodos y atributos que distingue a cada uno, veamos un ejemplo sencillo donde crearemos el objeto "cantidad1".

grupo cantidad1(2,3);


El código anterior se introduce dentro de la función main del programa, a diferencia de la clase que se introducía antes de la función main.

Ya han quedado aclarados los 4 términos más importantes, pero en verdad si intentáramos compilar el código entero todavía no funcionaria, podríamos pensar que con lo anterior es suficiente pero no!, porque un objeto puede acceder a varios métodos, imaginemos que además de sumar tengamos el método o función restar, el de multiplicar y el de dividir ¿como podría nuestro programa saber cuál queremos hacer si por ahora solo hemos creado el objeto, ahora en el siguiente ejemplo y con tan solo una línea de código aprenderemos como acceder a un método y es ahí donde dicho método ya se ejecutará.

    cantidad1.sumar();


Falta algo más, tan solo 2 cosas, y es que por convención se necesita inicializar las variables de la clase a través de un constructor para que nuestra clase sepa cuantos argumentos ha de recibir, en este caso estamos enviado 2 que son los números que se sumaran, pero que pasaría si quisiéramos enviar 5 o 10 bueno en primer lugar dentro de la clase escribimos una pequeña línea debajo de public que se compone del nombre de la clase y entre paréntesis escribimos separado por coma y en orden el tipo de datos que recibirá desde cada objeto que en este caso los dos son de tipo int como observamos en el siguiente ejemplo:

grupo(int,int);


si tuviéramos más argumentos escribiríamos cada argumento uno tras otro "ejemplo(striing,int,int,string...);", ya para finalizar creamos el constructor por fuera de la clase y antes de la función main que sirve para indicarle el orden en los valores pasados por referencia que se enviaran a la clase.

grupo::grupo(int iprimero, int isegundo){
primero = iprimero;
segundo = isegundo;}


Codigo compilado de programacion orientada a objetos en c++

Este constructor se crea 1 sola vez por cada clase, con esto ya se da por terminada la creación de clases y objetos parte fundamental de la programación orientada a objetos, ahora añado el código entero que pueden copiar y pegar por si en alguna parte se perdieron.

#include <iostream>
#include <cstdlib>
using namespace std;

class grupo{
int primero;
int segundo;
int resultado;

public:
void sumar();
grupo(int, int);
};

void grupo::sumar(){resultado=primero+segundo;
cout << resultado << endl;
};

grupo::grupo(int iprimero, int isegundo){
primero = iprimero;
segundo = isegundo;
}

int main()
{
grupo cantidad1(2,3);
cantidad1.sumar();
system("pause");
return 0;
}
Comentarios y preguntas