Consejo rápido El principio de cohesión OOP

En la primera publicación de esta serie, discutimos por qué la programación orientada a objetos (OOP, por sus siglas en inglés) fue útil para el desarrollo del juego y aprendimos cómo identificar los objetos, sus estados y sus comportamientos. En este artículo, veremos el principio OOP específico de cohesión y como se aplica a los 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.


¿Qué es la cohesión??

La cohesión es el principio de ser o hacer una cosa bien. En otras palabras, cohesión significa agrupar código que contribuye a una sola tarea..

En uno de los primeros artículos de Gamedevtuts + que hablaban sobre la Regla de Acción Encubierta, se cubrió un gran ejemplo de este principio, que no es de programación:

No intente hacer demasiados juegos en un solo paquete ... Individualmente, cada uno podría haber sido un buen juego. Juntos, lucharon entre sí..

La misma regla se aplica a la programación orientada a objetos. Cada objeto debe tener una sola responsabilidad. Cada comportamiento de ese objeto debe hacer solo una tarea. Más que eso, le será mucho más difícil hacer cambios en el código..


¿Por qué es útil?

Código que está organizado por funcionalidad y que solo se dice que tiene una tarea alta cohesión. El código altamente cohesivo es reutilizable, simple y fácil de entender. También crea objetos pequeños y enfocados..

Se dice que el código que está organizado arbitrariamente y tiene múltiples tareas tiene baja cohesión. Dicho código es difícil de entender, mantener y reutilizar y, a menudo, es complejo. También crea objetos grandes y desenfocados..

Tener alta cohesión es generalmente bueno, mientras que tener baja cohesión es generalmente malo. Al escribir código, siempre esfuércese por escribir código altamente cohesivo.


Cómo aplicarlo

Entonces, ¿cómo aplicamos esto a la programación orientada a objetos? Bueno, para empezar, organizar el código en objetos ayuda a aumentar la cohesión del juego en general. Sin embargo, cada objeto individual también debe tener alta cohesión. Volvamos a nuestros tres ejemplos para ver cómo funciona esto..

Asteroides

Recuerde del último artículo que definimos el objeto de la nave como comportamientos de giro, movimiento y disparo..

Si tuviéramos que escribir una sola pieza de código que hiciera los tres comportamientos a la vez, sería bastante complicado. En su lugar, deberíamos separar cada comportamiento en lo que se conoce como funciones. Las funciones nos permiten separar la funcionalidad y agrupar código similar, lo que ayuda a crear código altamente cohesivo.

En programación, un objeto se define creando una clase. En Java, una clase se codifica de la siguiente manera:

 / ** * La clase de envío * / clase de envío público / ** * Función: realiza el comportamiento (tarea) de girar el envío * / void público rotate () // Código que hace girar el envío / ** * Función - realiza el comportamiento (tarea) de mover el Barco * / public void move () // Código que mueve el barco / ** * Función - realiza el comportamiento (tarea) de disparar la pistola del Barco * / fuego de vacío público ( ) // Código que hace que el barco dispare una bala

Como puede ver, cada comportamiento tiene su propia función, y el código está bastante bien organizado solo en esta estructura de esqueleto.

No te preocupes demasiado por la sintaxis exacta todavía; Lo discutiremos con más detalle a medida que avancemos en la serie..

Tetris

Para Tetris, recuerde que los comportamientos de un tetromino caían, se movían (de lado) y giraban. La estructura básica de la clase es la siguiente:

 / ** * La clase Tetromino * / clase pública Tetromino / ** * Función - actualizar la posición de un Tetromino * / public void fall () // Código que actualiza la posición del Tetromino / ** * Función - mover un Tetromino * / public void move () // Código que mueve el Tetromino lateralmente / ** * Función: girar un Tetromino * / public void rotate () // Código que hace girar el Tetromino en 90 grados

Nuevamente, los comportamientos están separados en sus propias funciones. Para el otoño método, sin embargo, observe que la tarea es actualizar la posición del tetromino. Esto se debe a que el tetromino siempre está cayendo, por lo que no podemos simplemente hacer que la tarea "cause que el tetromino caiga".

En su lugar, un tetromino descendente simplemente se mueve hacia abajo de la pantalla un cierto número de filas a la vez, por lo que tenemos que actualizar la posición del tetromino para reflejar esta velocidad de caída..

Pac-man

Para el objeto fantasma con comportamientos de estado de movimiento y cambio, tenemos que hacer un poco más de trabajo para que sea altamente cohesivo.

 / ** * The Ghost Class * / public class Ghost / ** * Function - mueve el Ghost * / public void move () // Código que mueve al fantasma en la dirección actual / ** * Function - change Ghost direction * / public void changeDirection () // Código que cambia la dirección del Ghost / ** * Function - change Ghost speed * / public void changeSpeed ​​() // Code que cambia la velocidad del Ghost / ** * Function - cambiar el color del fantasma * / public void changeColor () // Código que cambia el color del fantasma / ** * Función - cambiar el estado del fantasma * / public void changeState () // Código que cambia el estado del fantasma // Esta función también llamará a las tres funciones de changeDirection, changeSpeed, y changeColor

El estado fantasma tiene tres funciones adicionales añadidas: cambia la direccion, cambiar color, y changeSpeed. Estos no estaban en nuestra lista de comportamiento original porque no son comportamientos. En cambio, estas funciones son las que se conocen como funciones de ayuda y están ahí para ayudarnos a mantener una alta cohesión..

El comportamiento de cambio de estado (lo que sucede cuando Pac-Man se come una bolita de energía) requiere que se realicen tres tareas diferentes: volverse de color azul profundo, invertir la dirección y moverse más lentamente. Para mantener la cohesión, no queremos que una función realice las tres tareas, por lo que las dividimos en tres subtareas a las que la función recurrirá para completar su única tarea principal.

El uso de la palabra y Cuando se describe lo que hace un comportamiento / función generalmente significa que debemos crear más de una función.


Conclusión

La cohesión es el principio de agrupar código similar y garantizar que cada función realice solo una tarea. La cohesión ayuda a crear un código que es mantenible y reutilizable.

En el siguiente Consejo rápido, discutiremos el principio de acoplamiento y cómo se relaciona con la cohesión. Síganos en Twitter, Facebook o Google+ para mantenerse al día con las últimas publicaciones..