You are on page 1of 10

DISSENY PROGRAMACIÓ A OBJECTES

DPOO
APUNTS

ELVIRA NOÈ LORENTE


GRAU ENGINYERIA INFORMÀTICA
Curs 2019/20-1
DISSENY PROGRAMACIÓ A OBJECTES
DPOO

1. PROGRAMACIÓ ESTRUCTURADA

Programació estructurada à veure un programa com un conjunt de diferents


subprogrames que fan tasques concretes. Tipus:

• Top-down: el problema es descompon en problemes més petits i es treballen per


separat.
• Bottom-up: comença per baix amb problemes que ja se sap com resoldre.

Mòdul à col·lecció de constants, variables, funcions i accions relacionades entre si que


estan agrupades en un mateix fitxer.

2. DPOO

Procés per a programar:

• Identificar els objectes (solen ser substantius)


• Reconèixer les característiques (atributs) i funcionalitats/accions (mètodes) dels
objectes (característiques substantius i accions verbs)
• Identificar les casses que agrupen els objectes (característiques comunes)
• Assignar a cada objecte una classe

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:

• Facilitat per abordar problemes complexos


o Naturalitat
o Modularitat
• Seguretat (encapsulació, privacitat, accés)
• Reutilització
o Crear una classe a partir d’una existent
o Definir i utilitzar classes incompletes
• Escalabilitat (herència)
• Comprensió (millora la llegibilitat del codi)

Inconvenients:

• Corba d’aprenentatge costosa


• Canvi d’enfocament
• Reutilitzacions ineficients

ELVIRA NOÈ LORENTE 1


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

3. PAC 1

Compilar un fitxer java en consola: javac nomFitxer

Això genera l’arxiu .class

Executar el programa: java nomFitxer paràmetres

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:

• Els getters i setters


• Els que tenen altres funcionalitats

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.

ELVIRA NOÈ LORENTE 2


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

Constructor à es crida de manera automàtica quan es crea un objecte per a situar-lo


en memòria i inicialitzar els atributs declarats en la classe. Destructor à mètode que
servei per a eliminar un objecte concret definitivament de la memòria. Característiques
destructor:

• Una classe té només un destructor


• No té retorn
• No rep paràmetres
• És públic

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Ó

Encapsulació à consisteix a agrupar, seguint un procés d’abstracció, totes les dades


(atributs) i operacions (mètodes) relacionats en una mateixa classe, de manera que sigui
senzill reutilitzar la classe i ocultar els detalls. Ocultació à permet amagar tot allò que no
interessa que se sàpiga o se’n tingui accés. Nivells d’ocultació:

1) Públic à qualsevol altre classe pot accedir al mètode o atribut. En UML, +.


2) Privat à una altre classe no pot accedir al mètode o atribut. En UML, -.
3) Protegit à qualsevol classe filla pot accedir o utilitzar un atribut o mètode protegit
del pare. Si la classe pare i filla formen part del mateix paquet, la classe filla podrà
accedir mitjançant herència o un objecte de tipus classe pare. Si formen part de
paquets diferents, la classe filla només podrà accedir als membres protegits de la
classe pare mitjançant la herència. En UML, # si és protegit i ~ si és paquet.

En Java, el tipus default és molt semblant al protegit.

ELVIRA NOÈ LORENTE 3


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

6. EXTENSIÓ

Es declara amb la paraula static i fa que el mètode no s’hagi d’instanciar. Fa que el


mètode pertanyi a la classe enlloc de a la instància. Reben el nom de estàtics. Casos
en els que s’utilitza l’extensió:

• Tenir un comptador del nombre d’instàncies creades d’una classe


• Per a atributs que tenen el mateix valor per a totes les instàncies d’una classe i, si
es modifica, s’ha de modificar el valor de l’atribut en totes les instancies

En UML s’indica el mètode o atribut estàtic amb un subratllat.

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.

Excepcions à per a donar un missatge d’error personalitzat a l’usuari i evitar que el


programa peti. S’indica throws Exception al inici del mètode i en la condició que ha de
generar el missatge d’error s’escriu throw new Exception (“missatgeError”). Amb el
try/catch capturarem el missatge i el podrem utilitzar.

Documentació à per a generar la documentació sobre el programa s’utilitza el


javadoc. Es col·loca com a comentari abans del mètode en concret:

/**
* 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

Generar documentació javadoc per consola:

Javadoc nomFitxer.java

Javadoc *.java //per a totes els arxius de java

ELVIRA NOÈ LORENTE 4


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

Javadoc *.java -d nomDirectori -private //es guarda en un directori i inclou privats

8. ASSOCIACIONS

Associació à relació entre instàncies. Tipus:

• Associació binària: les dues instàncies relacionades entre si existeixen de forma


independent. Indica que l’objecte de la classe A fa servir un objecte de la classe
B i pot ser que viceversa. En UML es representa amb una línia que uneix les dues
classes.
• Associació d’agregació: es dóna quan una instància d’una classe (component)
és part d’una instància d’una altre classe (compost). Si s’elimina un, l’altre no es
destrueix. En UML es representa amb una línia que acaba en rombe blanc en la
classe compost.
• Associació de composició: la existència de la instància de la classe component
ha de coincidir amb la de la instància de la classe compost. Si es destrueix
l’objecte compost també es destrueixen els seus components. Cada component
només pot estar present en un compost. En UML es representa amb una línia que
acaba en rombe negre en la classe compost.
• Associació reflexiva: associació binària en la qual les dues classes, origen i
destinació de la relació, son la mateixa classe. En UML es representa amb una
línia que surt i entra a la mateixa classe. Cal definir els rols en cada extrem de la
línia amb un text aclaridor.

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 (:).

ELVIRA NOÈ LORENTE 5


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

El constructor de la classe filla fa servir el mètode super() per a cridar el constructor de


la classe pare. Dins d’aquest mètode aniran els paràmetres que corresponen al
constructor pare. En canvi, en C# s’utilitza la paraula base precedida per dos punts en
la mateixa signatura del mètode.

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

Polimorfisme à característica de la programació que permet modificar el tipus d’un


objecte en temps d’execució basat en una jerarquia d’herència. Permet que un
objecte d’una classe es comporti com un objecte de qualsevol de les subclasses.
Característiques:

• Implica que un objecte té un tipus estàtic (indicat en la declaració) i un tipus


dinàmic (s’assigna en temps d’execució)
• El tipus dinàmic d’un objecte és igual al tipus de la declaració o igual a una de
les classes derivades de la seva
• Si a un objecte li canviem el seu tipus dinàmic a un de les seves classes filles,
aquest objecte no podrà cridar a mètodes propis que només existeixin en la
classe filla
• Un objecte de classe pare, encara que el tipus dinàmic sigui de la classe filla,
podrà cridar a mètodes exclusius de la classe pare, ja que el seu tipus estàtic és
de tipus classe pare

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:

• instanceof: ens permet comprovar si el tipus dinàmic de l’objecte és compatible


amb un tipus/classe determinat.
B objeto = new B();
if(objeto instanceof A) {...}
• getClass(): mètode que retorna la classe amb la qual ha estat instanciat
l’objecte.
if (objeto. getClass()==A.class) {...}

ELVIRA NOÈ LORENTE 6


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

El mecanisme càsting consumeix més recursos i penalitza el rendiment del programa.

9.3. CLASSE OBJECT

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

Boxing à procés de convertir un tipus bàsic/primitiu en un objecte de la classe wrapper.


Aquest procés consumeix molts recursos. En alguns llenguatges es fa canviant la inicial
per una majúscula. Ex: string à String.

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.

Diferències entre String, StringBuilder i StringBuffer:

• String: forma habitual de concatenar strings amb el símbol +. És la pitjor forma en


quan al rendiment, ja que cada vegada que generem una variable, estem
generant un objecte nou.
• StringBuffer: seqüència de caracters mutable. És una classe que ens permet
concatenar strings de maner simple i eficient. És un mètode sincronitzat, pel que
podem utilitzar-lo sense problemes en multifils. Per a utilitzar-lo es crea l’objecte i
amb el mètode append() s’afegeixen strings.
• StringBuilder: s’utilitza igual que l’anterior. No és sincronitzat, amb lo qual, té millor
rendiment que l’anterior.

Diferències entre println i print:

• println: escriu per pantalla i afegeix un “enter de teclat”.


• print: escriu per pantalla.

ELVIRA NOÈ LORENTE 7


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

11. INTERFÍCIE

Interfície à defineix l’esquelet d’una classe delegant-ne la implementació en una nova


classe que implementa aqueta interfície. Diferències amb la classe abstracta:

• 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

Interfícies que hereten de Collection:

• Set: no permet elements duplicats.


o HashSet: guarda els elements sense seguir un ordre lògic. Si no cal
guardar els elements en un ordre únic, aquest és més recomanable en
quan a rendiment.
o LinkedHashSet: guarda els elements en l’ordre d’inserció dels mateixos.
o TreeSet: guarda els elements seguint les indicacions de compareTo() o
amb Comparator i el mètode compare(). No permet el null.
• List: permet elements duplicats i a més estan ordenats per índex.
o ArrayList: si les insercions es fan al final, aquest té major rendiment. Si es
fan més consultes que insercions, també és preferible utilitzar aquest.
o Vector: és sincronitzat (multifils).
o LinkedList: si es fan moltes insercions, sobretot al mig de la llista, aquest és
el que te millor rendiment. Per esborrar, aquest té un millor rendiment, ja
que no desplaça tots els elements de la llista de nou.
• Map:
o Hashtable: no ordre. Sincronitzat. No permet null.
o HashMap: no ordre. No sincronitzat. Permet duplicats.
o LinkedHashMap: ordenats per ordre d’inserció. Permet duplicats.
o TreeMap: ordenats per clau. Permet valors null però no claus.

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.

ELVIRA NOÈ LORENTE 8


DISSENY PROGRAMACIÓ A OBJECTES
DPOO

Foreach en Java:

for(Person person : people){...}

14. PRÀCTICA 4

Metodologia en cascada à formada per cinc etapes seqüencials:

1) Anàlisi: reunir les necessitats del producte/client.


2) Disseny
3) Implementació: programació´.
4) Proves
5) Manteniment

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.

Els mòduls usen descriptors, que s’escriuen en un fitxer anomenat module-info.java. el


nom del mòdul no pot coincidir amb el d’una classe, paquet o interfície. El més usat és:

• exports: indica que les classes públiques del paquet exportat son visibles per a l
aresta del món.

module a{ exports edu.uoc.logging; }

• requires: indica una dependència a un mòdul.

module b { requires a; }

ELVIRA NOÈ LORENTE 9

You might also like