Funcionament intern d'una classe
A l'article anterior vèiem com funciona una classe des del punt de vista de l'usuari extern. Aquí veurem com funciona des de dins
Públic vs privat
Una classe té 3 tipus d'atributs i mètodes. Són públics, privats i protegits. Als protegits no els farem gaire cas, a PRO2 no els utilitzem.
Públic:
Normalment tenim mètodes públics, més que atributs. Són els mètodes amb els que treballem des de fora, i serveixen per interactuar amb la classe sense preocupar-nos del funcionament intern. En algun cas, també hi ha atributs, com per exemple en el cas de la classe pair, que tenim dos atributs públics (first i second)
Privat:
Aquí tenim mètodes i atributs. Normalment els atributs són els que emmagatzemen la informació que necessitem, mentre que els mètodes (s'entén que privats) són auxiliars cridats per les funcions públiques. Per exemple, a Cjt_estudiants tenim un mètode públic que és consultar_estudiant, que rep un DNI i retorna l'estudiant corresponent. Doncs ho fa utilitzant una funció auxiliar que fa la cerca dicotòmica, i que està com a privada. A aquesta no hi podem accedir des de fora, ja que és privada
Com funciona Cjt_estudiants?
Sí, comencem directament per aquí. El funcionament d'Estudiant és bastant senzill, i a més, no ens la faran modificar. Si a algú li interessa, és trivial, però per nosaltres seguirà sent una caixa negra.
Atributs privats:
Bàsicament tenim 3 atributs privats.
MAX_NEST:
És un enter que indica la mida màxima del conjunt. Pot ser 10, 60, 30.000, o qualsevol altra cosa. La idea és que hi puguin cabre tots els estudiants que vulguem
vest:
Aquest és el vector que emmagatzema els estudiants. És un vector<Estudiant> de mida MAX_NEST
nest.
És un enter que emmagatzema la quantitat d'estudiants que tenim. La idea és que estaran emmagatzemats entre la posició 0 i la posició nest-1
Mètodes públics
Afegir estudiant:
Aquesta el que fa és desplaçar tots els elements amb dni>est.dni una posició cap a la dreta, i un cop ha arribat al punt on el dni ja no és més gran, posa allà l'estudiant. Això, evidentment, si hi cap. Per tant, té cost lineal respecte a la mida
Modificar estudiant:
Fa la cerca dicotòmica per buscar on està aquell dni, i modifica aquella posició perquè hi hagi l'estudiant que volem
Modificar ièssim
Modifica l'ièssim, sempre que la posició sigui vàlida
Mida i mida màxima:
Retornen l'enter corresponent
Existeix estudiant:
Fa la cerca dicotòmica buscant el dni, i retorna si hi és o no
Consultar estudiant
Fa la cerca dicotòmica, i retorna l'estudiant que està a la posició retornada
Consultar ièssim:
Retorna vest[i-1]
Llegir:
Llegeix nest. Després fa nest iteracions, fent vest[i].llegir(). Finalment ordena el conjunt
Escriure:
Fa nest iteracions, fent vest[i].escriure()
Com modifiquem?
Normalment ens fan fer exercicis on ens diuen "hem afegit tal atribut privat, i tal funció. Modifica-ho perquè funcioni". El primer que hem de fer és descarregar els arxius del Jutge, allà hi ha les capçaleres i tot. Un cop ho tenim, modifiquem allà directament
Un exemple. Fem l'exercici X68173, que, com podeu veure a l'imatge, no és gaire difícil
No, de debò, no és gaire difícil. El que passa és que, al no haver-hi casos de proves, el que feia era provar-los directament al jutge, comprovant que compilessin i ja (excepte a l'enviament 1 i 15, que se'm va passar). No obstant, jo us diria que us feu un joc de prova (o més), i així no tindreu tants errors
Dit això:
Conjunt d'estudiants amb imax - X68173
Descarreguem els arxius, i veiem que tenim PRO2Exepcio.hh, Estudiant.hh, Estudiant.cc i Cjt_estudiants.hh. Per tant, el que ens toca fer és Cjt_estudiants.cc. De fet, l'únic que ens cal és afegir-hi les dues operacions que ens demanen, i modificar les que calgui. Comencem triant quines funcions cal modificar.
Constructores?
Només en tenim una. No cal fer-hi res, no hi ha màxim perquè està buit. Podem posar-li un valor fora del rang, perquè quedi clar que no tenim màxim. Depenent de com decidim implementar-ho, però jo crec que millor modificar-la
Modificadores?
Afegir estudiant, per si afegim un estudiant amb nota major, o la posició de l'estudiant amb nota màxima canvia
Modificar estudiant, per si modifiquem l'estudiant que té la nota màxima
Modificar ièssim, pel mateix
Esborrar estudiant, que de fet no està implementada
És a dir, totes
Consultores?
Aquí no n'hem de modificar cap. Al cap i a la fi, no modifiquen, consulten. L'únic que hem de fer és implementar estudiant nota max
Lectura/escriptura?
A la de lectura hem de mirar quina és la posició amb nota més gran. A la d'escriptura, res
Ja sabem quines hem de modificar. Ara toca fer-ho. Pots, o currar-te de comprovar si s'ha modificat alguna cosa, si cal recórrer tot el conjunt... O pots simplement recalcular el màxim al final. Jo vaig aconseguir el verd així, per tant, es pot fer així i no et compliques la vida. O pots fer-ho bé, esforçant-te. Això ja depèn de tu
Cap comentari:
Publica un comentari a l'entrada