Professional Documents
Culture Documents
Apunts
Apunts
DPOO
APUNTS
1. PROGRAMACIÓ ESTRUCTURADA
2. DPOO
Casos en els que els substantius o verbs no son objectes, atributs, mètodes o classes:
• Redundància o sinònims
• Irrellevància
• Rols
Avantatges dpoo:
Inconvenients:
3. PAC 1
4. OBJECTE I CLASSE
Objecte à qualsevol element únic del món real amb el qual es pot interactuar. Classe
à plantilla a partir de la qual es creen els objectes. Atributs à variables que codifiquen
l’estat d’un objecte. Mètodes à implementen el comportament d’un objecte o les
funcionalitats que un objecte és capaç de realitzar. Tipus de mètodes:
Tipus de classes:
1) Classe associativa: aquella classe que està vinculada a una associació binària i ens
permet guardar informació sobre aquesta associació/relació.
2) Classe abstracta: aquella que declara l’existència de tots els seus mètodes però no
els implementa tots. No es pot instanciar però si heretar. Un mètode és abstracte si
té la paraula abstract davant i només consta de la signatura. En UML es representa
amb el nom en cursiva.
3) Classe final o segellada: aquella que pot ser instanciada però no heretada. En UML,
per a representar una classe final s’escriu {leaf} sota del nom de la classe, per a
representar un mètode final s’escriu {leaf} a la dreta del mètode i per representar un
atribut s’escriu tot en majúscules i s’utilitza _ com a separador de paraules.
4) Classe estàtica: aquella que no es pot instanciar. Tots els seu atributs i mètodes
també son estàtics. En UML, per a representar una classe estàtica s’escriu <<utility>>
davant del nom i els mètodes i atributs es subratllen.
5) Classe genèrica o parametritzada: en la instància s’indica el tipus d’objecte que ha
d’emmagatzemar la classe entre <>. En UML, es representa així:
Sobrecàrrega à es produeix quan dos o més mètodes tenen el mateix nom, però
diferent nombre i/o tipus d’arguments.
En C++ i C# el nom del destructor és el nom de la classe amb el símbol ~ davant. En Java
s’utilitza el mètode finalize().
UML à llenguatge de modelització per llegir i entendre què representa una classe sense
que sigui necessari veure el codi. A la primera part hi va el nom de la classe; a la segona,
els atributs de la classe i el tipus, i a la tercera, els mètodes de la classe (paràmetres que
rep i retorna i el tipus).
En Java i C# el codi d’una classe va en un fitxer que té el mateix nom que la classe.
Instància à creació d’un objecte a partir d’una classe. Estat à valors que prenen en un
moment determinat els atributs d’un objecte. Comportament à funcionalitats que
l’objecte és capaç de realitzar. Missatge à manera que hi ha d’accedir als atributs i
mètodes d’un objecte.
5. ENCAPSULACIÓ
6. EXTENSIÓ
7. PRÀCTICA 1
This à paraula reservada que fa referència a l’objecte que és del tipus de la classe.
Indica que pertany a la classe i no és un paràmetre declarat en el mètode.
/**
* text descriptiu que pot tenir etiquetes html
*
* aquí etiquetes javadoc (comencen per arrova)
*
*/
Etiquetes javadoc:
• @author
• @version
• @param
• @return
• @throws
• @see à enllaç a la documentació d’una classe
• @since à des de quan existeix el mètode (sol ser un número de versió)
• @deprecated
• @exception
Javadoc nomFitxer.java
8. ASSOCIACIONS
Propietats:
• Cardinalitat: nombre d’instàncies d’una classe amb el qual es pot relacionar una
instància de l’altra classe de la relació. En UML s’indica sobre la línia que
representa la relació. Es pot indicar amb un nombre exacte, amb un rang de
valors, amb rangs no consecutius (separats per comes) o amb un asterisc
(significa molts).
• Navegabilitat: quina de les dues instàncies coneix l’altra. Pot ser unidireccional
(en UML es representa amb una fletxa) o bidireccional (una línia).
• Rol: etiqueta que es posa a cada costat de l’associació per a anomenar les
classes participants d’una manera diferent.
9. HERÈNCIA
Herència à mecanisme que permet definir una classe nova a partir d’una anterior
descrivint-ne les diferències. Una classe filla hereta tots els atributs i mètodes declarats
com a públics o protegits en la classe pare. En UML es representa mitjançant un triangle
blanc a la classe pare.
En Java, la classe filla té la paraula clau extends seguida del nom de la classe pare. En
C# i C++ s’utilitzen dos punts (:).
Sobreescriure à la classe filla modifica un mètode que hereta de la classe pare. S’utilitza
@Override. La signatura del mètode en la classe filla ha de ser idèntic al de la classe
pare i el nivell d’accés no pot ser més restrictiu que el de la classe pare. Els mètodes que
es diguin final en la classe pare no poden ser sobreescrits per la classe filla. Els mètodes
estàtics només poden ser sobreescrits si en la classe filla continuen sent estàtics.
9.1. POLIMORFISME
9.2. CÀSTING
Càsting à procés en el qual el compilador permet fer una conversió d’un objecte
polimòrfic a un dels seus possibles tipus dinàmics. Si es vol accedir als mètodes de la
classe filla tenint una referència d’una classe pare, cal convertir explícitament la
referència de tipus/classe pare a tipus/classe filla.
Per assegurar-nos que no hi haurà errors en la conversió, es poden utilitzar dos mètodes
en java per a saber quin tipus dinàmic té l’objecte:
Object à classe pare de la que hereten totes les classes. Per tant, totes les classes tenen
els atributs i mètodes públics i protegits de la classe Object. Un objecte de la classe
Object pot apuntar qualsevol objecte d ela classe que sigui.
9.4. BOXING
10. PRÀCTICA 2
En UML, per a representar que una classe llança una excepció s’utilitza una fletxa de
línies discontínues. Es pot posar també la paraula throws sobre la línia per a deixar-ho
més clar. Aquesta associació s’anomena dependència.
Una enumeració no és una classe, però en Java es pot utilitzar dins d’una classe o com
una classe pròpia, amb atributs i mètodes. Si la utilitzem com a classe tindrem el mètode
values() que retorna tots els valors del enum. En UML es representa amb una associació
binària unidireccional i amb el títol <<enumeration>>.
En UML, els mètodes que es sobreescriuen es marquen amb ^ al davant del nom.
11. INTERFÍCIE
• Una interfície no pot tenir atributs llevat dels estàtics o constants, han de ser
públics i estar inicialitzats amb un valor en el moment de la declaració. Una
classe abstracta pot tenir qualsevol tipus d’atribut.
• Les interfícies no s’hereten, les classes implementen interfícies.
En UML, es representa amb la paraula <<interface>> davant del nom de la classe i amb
les signatures dels mètodes de la classe que implementa. La línia és la mateixa que la
de heretar però en discontínua.
12. PRÀCTICA 3
13. PAC 2
Pas per valor à quan un argument es passa a una funció, la funció rep una còpia del
valor original. Pas per referència à quan un argument es passa a una funció, la funció
rep l’adreça de memòria del valor original, no la còpia del valor.
Foreach en Java:
14. PRÀCTICA 4
15. PAC 3
Expressió lambda à funció anònima (no té nom ni requereix ser un mètode d’una
classe). Es basen en la programació funcional (li diem que volem que faci el programa
però sense dir-li com ho ha de fer).
(paràmetres) ->{cos-expressió-lambda}
Interfície funcional à és una interfície que només té un mètode abstracte i que la resta
de mètodes son estàtics o per defecte. S’afegeix @FunctionalInterface per a donar més
informació al codi.
• exports: indica que les classes públiques del paquet exportat son visibles per a l
aresta del món.
module b { requires a; }