Depuración juego Deepspace - PDOO
La Programación Orientada a Objetos (POO) es un paradigma de programación que utiliza "objetos" para representar datos y métodos. Estos objetos son instancias de clases, que definen las propiedades y comportamientos de los objetos. La POO facilita la modularidad, la reutilización de código y la abstracción, permitiendo a los desarrolladores crear sistemas complejos de manera más manejable.
Práctica Deepspace: Desarrollo de la clase SpaceStation
Nos encontramos en el desarrollo del juego Deepspace, específicamente trabajando en la práctica para el examen de la asignatura de Programación Orientada a Objetos (PDOO). Actualmente, estamos enfocados en el constructor de la clase SpaceStation
.
Constructor de SpaceStation
Inicialmente, nos sorprendió que el constructor de SpaceStation
tomara únicamente un nombre y un objeto SuppliesPackage
, a pesar de que la clase parece tener muchos más atributos. Ahora comprendemos que el objeto SuppliesPackage
incluye todos los suministros necesarios (ammoPower
, fuelUnits
, shieldPower
).
Sin embargo, aún nos falta determinar cómo obtener el atributo nMedals
. Hemos identificado que este atributo aparece en la clase Loot
, pero SpaceStation
no parece tener dependencias directas de esta clase.
Dependencias y Atributos Iniciales
Otra cuestión es la implementación de las dependencias con multiplicidad 0..1. Suponemos que, a priori, dichos atributos se inicializan con nil
hasta que se indique lo contrario.
Método adjust
en la Clase Damage
El método adjust
es una fuente de confusión, así que vamos a desglosarlo y entender su funcionalidad.
La clase Damage
puede estar compuesta de dos maneras:
- Una lista de
weaponTypes
, un número deshields
y un número de armas (>= -1). - Un número de
weapons
y un número deshields
, dondeweapons == []
.
El método adjust
toma una lista de Weapon
y una lista de ShieldBoosters
. Devuelve una copia del objeto Damage
modificado, ajustado según las colecciones de armas y potenciadores de escudos proporcionados como parámetros.
Ajuste de Damage
El objetivo del ajuste es que la instancia de Damage
resultante no pueda implicar la pérdida de más armas o escudos de los que realmente se tienen. En otras palabras, los atributos de Damage
deben coincidir con los tipos y cantidades presentes en las colecciones de los parámetros.
Pasos para implementar adjust
-
Para armas (
weaponTypes
): -
Comparar la lista de tipos de armas actuales con la lista proporcionada.
- Crear una lista con los tipos de armas que están tanto en el objeto
Damage
como en la lista de parámetros. -
La nueva lista será la diferencia entre los tipos de armas actuales y los tipos suministrados.
-
Para escudos (
ShieldBoosters
): -
No hay un atributo de lista de
shieldBoosters
, por lo que trabajamos connShields
. nShields
debe ser ajustado a la longitud de la lista deShieldBoosters
proporcionada como parámetro, si es menor.
Ejemplo
Supongamos que Damage
tiene 3 tipos de armas y 2 escudos:
- Damage.weaponTypes = ["laser", "missile", "plasma"]
- Damage.nShields = 2
Y se llama al método adjust
con:
- weapons = ["laser", "ion"]
- shieldBoosters = ["basic", "advanced"]
El resultado ajustado será:
- Damage.weaponTypes = ["laser"]
(ya que "missile" y "plasma" no están en los parámetros)
- Damage.nShields = 2
(ya que el número de escudos en los parámetros no es menor)
Conclusión
En conclusión, la clase Damage
ajustada reflejará únicamente las armas y escudos presentes en los parámetros, asegurando que no se requiera perder más recursos de los disponibles.
Puedes consultar el repositorio completo de la práctica en Ruby para más detalles.