Sessió B1: C++, polimorfisme i contenidors
Dimarts 23 o Dijous 25 d'Octubre
Objectius
- Refrescar el llenguatge C++
- Entendre el polimorfisme
- Contenidors de la STL i iteradors
- Introduir-se al desnvolupament dirigit pels testos (Test Driven Development)
Exemple de test driven development
A classe implementarem "en viu" les primeres classes del nostre sistema: Obra
i Colleccio. De moment no us preocupeu gaire de com s'integrarà això amb la resta de sistema.
Us hem fet commit de un entorn de desenvolupament mínim al directori src dels vostres sandbox.
El directori src del sandbox ha de quedar de la següent manera:
- src/ aquí és on posareu les classes que implementen el sistema, implementades per vosaltres
(arxius hxx i cxx)
- src/TestsUnitaris/ aquí posareu els tests unitaris (granularitat petita) que testegen les classes del src/. Aquests tests seran escrits per vosaltres, tot i que, en aquesta sessió us els donem.
- src/TestsFuncionals/ aquí posareu els tests funcionals (granularitat grossa), que testegen la funcionalitat del src/. Els tests funcionals fan de requeriments de sistemes. Aquests tests seran donats pels professors.
C++
Si encara no l'heu fet, seguiu el tutorial pas a pas per refrescar conceptes de C++, contenidors STL i polimorfisme
A part, us recomanem molt que implementeu l'exercici (resolt) Factures en C++
de la col.lecció de problemes.
Manual de Referències del C++
La web www.sgi.com té una
bona guia de la STL
La web www.cplusplus.com té
una bona referència dels 'streams' de la STL
Estàndard de codificació
Estàndard de noms i del codi
Els exemples que us donarem seguiran aquest estàndar. I el
vostre codi també s'hi haurà d'ajustar.
- Nomenclatura estàndar:
(UnaClasse, _unAtribut,
variableLocal, unMetode).
- Noms de mètodes i variables auto-explicatius i sense
abreviacions críptiques.
- Accessors no booleans de lectura amb unAtribut() i
d'escriptura amb unAtribut(nouValor)
- Accesors booleans de lectura amb preguntes sobre l'estat o esencia de l'objecte
esCreativeCommons(), estaDescatalogat(), haCaducat(), etc. i
d'escriptura amb imperatius cap l'objecte com ara
siguesCreativeCommons(), descataloga(),
caduca(), etc.
Accessibilitat dels membres
- Tots els atributs private (o protected
si està justificat)
- Escollir l'accessibilitat (private,
protected o public) més restrictiva possible
per els mètodes.
Implementant mètodes
- Mètodes curts, usant sortides ràpides en comptes
d'if/elses aniuats
- Feu servir referencies per enviar objectes (no bàsics) com a paràmetre.
- Feu servir, sempre que pogueu, la paraula const:
- Si un paràmetre per referència no ha de ser modificat a dintre del mètode definiu-lo const.
- Si el mètode no modifica l'estat del receptor definiu el mètode com a const.
- Si retorneu un atribut de l'objecte pero no voleu que ningú de fora ho modifiqui
retorneu referència constant.
Testfarm: Monitorització automàtica de la qualitat del codi
La pàgina de testfarm monitoritza tots els vostres repositoris.
En particular mostra l'estat dels tests (verd o vermell), i el nombre de tests passant.
Hi anirem afegint noves funcionalitats com mètriques de codi.
Tasques
- Passeu un a un els tests unitaris que teniu al tarball donat,
seguint les tècniques del test driven development (TDD).
- Feu commit al subversion a cada pas a cada red, gren i refactor.
No tingueu por de comitejar algo que no esteu segurs que sera el cami.
Si camineu pel cami equivocat subversion permet tornar enrera i a més,
ho podreu seguir amb l'històric per apendre'n.
- Desenvolupeu una nova classe Autor seguint la tècnica del TDD.
De moment serà una classe amb un sol atribut, el nom, i una agregació d'obres.
Per implementar aquesta agragació baseu-vos amb l'agregació que hem fet abans de Colleccio amb Obra