Casi hemos terminado con esta serie sobre programación orientada a objetos, y en este artículo analizaremos el principio OOP de abstracción - Es decir, generalizar un objeto y su uso en el desarrollo de juegos..
Nota: Aunque este tutorial está escrito con Java, debería poder usar las mismas técnicas y conceptos en casi cualquier entorno de desarrollo de juegos.
La abstracción es el principio de generalización. Esto requiere que pasemos de una instancia específica a un concepto más generalizado pensando en la información más básica y la función de un objeto..
Esto puede sonar un poco extraño, pero ya estamos familiarizados con el concepto de abstracción. Por ejemplo, si digo la palabra "auto", ¿en qué piensas? Lo más probable es que no estemos pensando en el mismo coche. Estaba pensando en un Mustang Boss 302 negro, que es una instancia específica de un automóvil. Ninguno de los dos estaba equivocado porque la palabra coche es un concepto muy general de un vehículo que usamos para transporte (o recreación en mi caso).
Lo mismo ocurre con los videojuegos. Los videojuegos se clasifican en grupos como RTS, RPG, Carreras, etc. Todos estos grupos son conceptos generalizados que describen la jugabilidad de un juego. StarCraft II, Elder Scrolls V: Skyrim y Need for Speed son ejemplos específicos de estos conceptos generalizados..
Por lo tanto, la abstracción toma muchas instancias específicas de objetos y extrae su información y funciones comunes para crear un único concepto generalizado que se puede usar para describir todas las instancias específicas como una..
La abstracción es útil porque reduce todo a sus principios más básicos. Esto puede ayudar a encapsular la funcionalidad de un objeto porque puede ayudar a identificar la información importante que debe hacerse visible y la información sin importancia que se puede ocultar..
La abstracción también ayuda con el principio de no repetirse. Al tomar lo que un grupo de objetos tiene en común y abstraerlo, podemos ayudar a prevenir el código redundante en cada objeto que a su vez crea un código más mantenible..
Como antes, usemos nuestros tres juegos para ver algunos ejemplos concretos de este principio en acción..
Para comenzar a aplicar la abstracción a los asteroides, piensa en sus objetos. Recordemos que los objetos para los asteroides eran una nave, un asteroide, un platillo volador y una bala. Ahora piensa en lo que cada uno de estos objetos tiene en común. ¿Comparten algún estado, comportamiento o funcionalidad? Al tomar estos elementos comunes que comparten todos los objetos, podemos abstraer esos elementos en una clase más generalizada..
Por ejemplo, un barco, un asteroide, un platillo volante y una bala compartirían el mismo comportamiento para moverse por la pantalla. Podría abstraer este comportamiento en una clase abstracta que contenga las cualidades comunes necesarias para mover un objeto. Estas cualidades serían estados tales como posición y velocidad, y el comportamiento de emocionante.
La clase abstracta en Java podría parecerse a la siguiente:
/ ** * Clase abstracta para movimiento * / clase abstracta Movable public float velocityX; velocidad de flotación públicaY; posición del flotador públicoX; posición pública flotanteY; / ** * Función: realiza el comportamiento (tarea) de mover el barco * / public void move () positionX + = velocityX; posiciónY + = velocidadY;
Hay otros estados, comportamientos y funcionalidades comunes que comparten todos los objetos. ¿Puedes pensar en ellos? Todos estos se pueden agregar en una clase abstracta.
Una cosa que debes tener en cuenta es la creación de una clase de blob. Una clase de blob es cualquier clase que intenta manejar todo desde un grupo de objetos, incluso cuando cada objeto no comparte los mismos estados, comportamientos y funcionalidad. El hecho de que un barco y un platillo volante puedan disparar no significa que deba colocar ese comportamiento en la misma clase abstracta que se usa para describir los cuatro objetos..
Consulte el tutorial de Iain Lobb sobre la composición de entidades para ver cómo evita esta situación..
Como se dijo muchas veces antes, Tetris tiene un solo objeto, un Tetrimino. Sin embargo, esto no evita que Tetris abstraiga parte de su funcionalidad. Un Tetrimino se dibuja casi de la misma manera que el campo de juego y las otras imágenes del juego. Esto significa que podría abstraer este comportamiento de dibujo en una sola clase a la que pertenecen todas las cosas dibujadas en la pantalla..
(Personalmente, me gusta llamar a esa clase Dibujable
, pero Duende
También es un nombre de uso común.
Pac-Man es un poco más interesante en términos de abstracción. Pac-Man, un fantasma y un pac-dot realmente no comparten ningún estado, comportamiento o funcionalidad común. Se pueden dibujar en la pantalla de manera similar, por lo que se puede crear una clase abstracta para el manejo del dibujo, pero no mucho más que eso. Entonces, ¿Qué haces? En este caso, está perfectamente bien crear múltiples clases abstractas para organizar el código.
Comience con la clase para manejar el dibujo de los tres objetos. A continuación, quite el punto del grupo ya que es el objeto que realmente no pertenece a los demás. Eso deja a Pac-Man y un fantasma. Ahora piense en lo que estos dos objetos tienen en común y cree otra clase abstracta para estos objetos. Esta clase podría tener estados como dirección y velocidad, y el comportamiento de emocionante.
Con dos clases abstractas, reduce el código redundante que se habría necesitado para crear los tres objetos y lo mueve a una ubicación que se puede cambiar y modificar fácilmente..
El principio de abstracción Ayuda a reducir el código redundante y crear un código más mantenible. Sin embargo, la abstracción por sí sola no nos hace nada si no hacemos nada con las clases abstraídas. Para esto, necesitamos aprender sobre herencia El cual será discutido en el próximo y último artículo de esta serie..
Síganos en Twitter, Facebook o Google+ para mantenerse al día con las últimas publicaciones..