Bienvenidos sean a este post, hoy veremos como podemos aplicar abstraccion a nuestro proyecto.
El proyecto es el que estamos modificando post a post pero sino lo poseen les dejo un link para descargarlo:
Descarguen el archivo y extraigan el contenido en el PC. Lo unico que deben hacer es revincular a SDL y SDL_Image. Para ello, les recomiendo este post donde comento como hacerlo para SDL y este otro post donde hago lo mismo para SDL_Image. Una vez que este todo funcionando correctamente, podemos continuar. Nuestro siguiente paso sera ir a ObjetoJuego.h, mas exactamente en la parte publica y modificaremos de la siguiente manera:
virtual void cargar(float, float, float, float, std::string idTextura) = 0;
virtual void dibujar(SDL_Renderer*) = 0;
virtual void actualizar() = 0;
virtual void limpiar() = 0;
Lo unica modificacion que realizamos fue agregar el = 0 en cada uno de los prototipos para indicar que esta clase va a ser abstracta. Nuestro siguiente paso sera ir a Juego.h, donde debemos hacer un par de modificaciones. La primera es porque al hacer abstracta nuestra clase base no podra ser usada para crear objetos, por ende deben eliminar o comentar la siguiente linea:
ObjetoJuego* m_oj;
Esto porque no es necesario y puede generarnos errores a la hora de compilarlo, lo siguiente sera hacer una serie de modificaciones en el codigo de Juego.cpp, en este archivo debemos eliminar o comentar las siguientes lineas:
m_obj = new ObjetoJuego();
m_obj->cargar(100, 100, 128, 82, "animado");
m_objetosJuego.push_back(m_obj);
Estas tres lineas eliminaran toda definicion del objeto creado por medio de la clase ObjetoJuego, dado que ahora es abstracta nos generara un error. Con estas modificaciones realizadas podemos probar nuevamente nuestro juego y se vera de la siguiente manera
Como pueden ver tenemos un objeto para cada uno de nuestros elementos del juego. Esto evitara que podamos crear objetos de la clase base pero nos permitira delimitar de mejor manera las caracteristicas de cada elemento porque ahora debemos tener una clase para cada objeto que representemos.
Hasta aqui hemos cubierto como trabajar con herencia, con polimorfismo y le hemos aplicado abstraccion pero esto es realmente necesario? Si y no. Por que en determinadas circunstancias no la necesitaremos. Por ejemplo, tenemos a Enemigo, para hacer un enemigo mas poderoso podemos hacer una nueva clase llamada EnemigoGrande y derivada de Enemigo pero en lugar de eso podemos crear un constructor donde simplemente cambiaremos los parametros necesarios para diferenciarlos siendo esto ultimo mas practico.
Otra cosa ha tener en cuenta es tambien el uso del modelo de relacion «is as» o «es como» para establecer los distintos tipos de relaciones entre las clases, por ejemplo nosotros podemos tener una clase Jugador2 la cual es derivada de Jugador, en este caso cumple la relacion de «es como» porque Jugador2 es como Jugador pero por ejemplo una Espada no es como Jugador porque este es un accesorio del Jugador y no un Jugador para este caso lo podemos reemplazar con una variable.
Por ultimo, mientras nos centremos en Computadoras o consolas no tendremos muchos inconvenientes cuando apliquemos las funciones virtuales pero si tenemos que usarlo para dispositivos mas limitados como telefonos, tablets u otros sistemas podemos tener serios problemas de performance, y esto es algo a tener en cuenta siempre.
En resumen, hoy hemos visto como se aplica la abstraccion en nuestro proyecto, como cambio una conducta de nuestro programa, como nos permite tener una mejor conducta de los objetos que creamos para nuestro juego. Espero les haya sido de utilidad y les dejo un link a GitHub donde estan los codigos creados hoy:
Les dejo algunas de mis redes sociales para seguirme o recibir una notificacion cada vez que subo un nuevo post:


Donación
Es para mantenimento del sitio, gracias!
$1.50





