udg-propro-spring-2020 / projecte-2020-a3

projecte-2020-a3 created by GitHub Classroom
0 stars 1 forks source link

Actualització del codi #17

Closed miqueldedo closed 4 years ago

miqueldedo commented 4 years ago

Bones, He realitzat forces canvis i adicions. Sobretot he estat treballant en el tema de passar d'objectes a JSON, per a poder-ho guardar. Per a no fer una explicació molt extensa a l'issue, adjunto un fitxer amb les coses que he canviat i algun dubte que tinc. Ja ens diràs 💯

Changelog.txt

miquelbofill commented 4 years ago

Hola Miquel,

Està molt bé això que has fet del mòdul ToJSONParserHelper, la interfície JSON i el mètode toJSON().

Pel demés, cito textualment del changelog:

com que a Java els objectes són immutables

Això no és cert. Hi ha de tot. Dependrà de si tenen mètodes modificadors o no.

per tant, quan es passen en una funció, si no es modifica l'objecte de manera directe, és a dir, object.setValue(x) modificarà l'objecte en sortir de la funció, però objectA = objectB, no, no acabo de veure la manera factible de fer-ho.

Si vols modificar l'objecte pots fer-ho amb mètodes modificadors, com ara setValue. Si no disposa d'aquests (és una classe que no disposes?) sempre pots fer una classe que l'extengui i afegeixi els atributs i mètodes modificadors que calgui. O fer-te tu una nova classe directament amb mètodes modificadors. O crear un objecte nou i retornar-lo.

Si de cas posa un exemple concret de paràmetre que voldries modificar i en seguim parlant.

miqueldedo commented 4 years ago

Per exemple, per a controlar els torns, faig servir dos int els quals hauria de pensar en aquesta funció. He estat buscant manera de com el podria modificar i és on he trobat que, per exemple, la classe Integer és immutable. Un altre exemple, sobre una classe (o enum en aquest cas) creat per nosaltres, si es fa un moviment, com podria invertir el valor de la variable que ens guarda l'enum, ja que són dos valors, dins la funció.

miquelbofill commented 4 years ago

Per exemple, per a controlar els torns, faig servir dos int els quals hauria de pensar en aquesta funció. He estat buscant manera de com el podria modificar i és on he trobat que, per exemple, la classe Integer és immutable.

Cal dir que els paràmetres "de sortida" conceptualment ja són una cosa lletja. Matemàticament, una funció no modifica els arguments, en tot cas retorna alguna cosa.

Dit això, efectivament tant int com Integer són immutables. Jo crec que el més natural seria retornar els nous valors (així queda més clar que són un resultat de l'operació).

Si tot i així vols fer paràmetres "de sortida", hauràs de crear tu una classe que els encapsuli i tingui mètodes modificadors.

Una altra alternativa és que els paràmetres passin a ser atributs de l'objecte (vull dir de l'objecte que executa l'operació). Llavors no hi ha problema en modificar-los, perquè són variables globals (dins de la classe).

Jo pensaria què és més natural conceptualment, és a dir, què queda més clar... que no és necessàriament el més fàcil de programar. Ja us vaig dir que Java potencia un bon estil de programació 😄

com podria invertir el valor de la variable que ens guarda l'enum, ja que són dos valors, dins la funció.

No pots, és el mateix que un enter.

miqueldedo commented 4 years ago

El fet que siguin atributs de la classe ho havia pensat, però fins ara hem mantingut la classe ConsoleGame com un mòdul funcional. "Transformar-ho" a una classe en seria un problema? Tindria sentit que aquesta nova classe fos un singleton?

miquelbofill commented 4 years ago

Sí, tindria sentit. Podria ser un singleton o bé una classe abstracta amb variables de classe.

miqueldedo commented 4 years ago

No acabo de veure com ho hauria de fer amb una classe abstracta. Hauria d'implementar els mètodes, o, crearia una classe abstracta i llavors una segona que l'heredés i implementés els mètodes?

miqueldedo commented 4 years ago

He penjat una proposta. Ja em diràs com ho veus!

miquelbofill commented 4 years ago

Ho veig bé. No t'oblidis però de comentar els atributs. Per cert, pel que respecta a turns no aniria millor una Stack?

miqueldedo commented 4 years ago

Seria una opció. Ho tinc en una llista per a controlar el refer i desfer- Fixa't que quan desfem un moviment, simplement descompto 1 al controlador del torn, sense eliminar el torn. D'aquesta manera, si llavors es fa un refer, incremento aquest comptador. Perquè, si ho féssim amb piles, quan fés el desfer, el moviment de dalt quedaria eliminat, no? D'alguna manera l'hauria de guardar, per exemple, en una altre pila, no?

miquelbofill commented 4 years ago

OK, tens raó.