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

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

Errors al desfer #18

Closed joanplaja closed 4 years ago

joanplaja commented 4 years ago

En @DavidNagisa333 está arreglant els erros al desfer, un cop estigui podre acabar de provar el funcionament del minMax a la CPU suposant qué després no en surten de nous. De mentres em ficaré a fer una versió molt simple que funcioni el coneixament.

joanplaja commented 4 years ago

Bones @miquelbofill , Com que amb el desfer passaven coses rares hem volgut tirar per el copiar i despres recuperar aquesta versió del chess. Hem provat varies coses peró no ens acabem de sortir. Pots recomanar-nos alguna guia o algo de com fer-ho correctament perque no sigui les mateixes referencies al copiar. He mirat ala teoria i no he sapigut veure res. Gracies,

miquelbofill commented 4 years ago

OK, és més simple el copiar (i no té perquè ser especialment ineficient). Però realment, si voleu evitar-vos problemes heu d'optar per una deep copy (fins a la profunditat necessària: la dels objectes immutables). Aquí podeu trobar unes pistes: https://www.baeldung.com/java-deep-copy

joanplaja commented 4 years ago

Si són lliestes miquel d'objectes mutables hem de fer un clone per cada element dins de la llista?

miquelbofill commented 4 years ago

És el més recomanable, i de fet imprescindible si aquests objectes poden ser modificats abans que recuperis la còpia. Pots programar una operació deepCopy recursiva, no és difícil.

joanplaja commented 4 years ago

Bones miquel, Hem afegit tots la implementació clonable a les classes necesaries. Varies coses:

  1. Hi ha un petit problema amb la classe Pair ja que fem servir generics i es queixa que la classe Object per defecte el metode clonar és protected. Havia pensat doncs fer uns ifs a l'hora de fer el clone del Pair.first i del Pair.second mirant quin tipo de classe és (si és una de les que utilitzem , Piece,Position..) convertir-ho crec que seria la solució més ràpida pero potser també més lletga no se qué et sembla. classe actual: (esta comentat) image la idea seria algo aixi if(first.getClass().getName()=='Piece')cloned.first = (Piece) this.first.clone() .. etc tant per first com per second
  2. Si et pots mirar qué et semblen les implemenatacions de clone(), sobretot la classe chess és la més grossa i poter més complexa i costosa.

Gracies!!

miquelbofill commented 4 years ago

Amb això del Pair en tractar-se de genèrics no hi ha més remei que fer alguna cosa així. De totes maneres et pots estalviar el super.clone() perquè en aquest cas el supertipus immediat és Object i no faria res.

La implementació de clone() del Chess la veig bé.