Extensión pomodoro en Gnome
+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 … +
+ +Extensión pomodoro en Gnome
@@ -141,14 +149,6 @@
Rvalues y Lvalues en C++11
- -- En este artículo, exploramos el manejo de rvalues y lvalues en C++11, desentrañando un error común de compilación y ofreciendo una solución para corregirlo. En particular, nos encontramos con … -
- -diff --git a/blog/2019/03/depuracion-juego-deepspace-pdoo.html b/blog/2019/03/depuracion-juego-deepspace-pdoo.html new file mode 100644 index 0000000..3c0ab45 --- /dev/null +++ b/blog/2019/03/depuracion-juego-deepspace-pdoo.html @@ -0,0 +1,261 @@ + + + + + +
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.
++