Activitats
Aplicacions de les jerarquies de classes
L’objectiu d’aquesta activitat és veure de quina manera els llenguatges reals fan ús de l’herència i del polimorfisme.
Les jerarquies de classes són molt utilitzades en el disseny de biblioteques per a llenguatges orientats a objectes com, per exemple, el Java. Cerqueu informació sobre quina és la jerarquia de classes vinculada al paquet gràfic de Java anomenat Swing. Concretament, estudieu les classes de la part de la jerarquia relativa a les àrees de text dins una interfície gràfica.
Pista: La superclasse de la part relativa a camps de text és JTextComponent
.
No es demana estudiar la documentació en línia de les biblioteques del llenguatge Java, només veure l’esquema gràfic de la jerarquia i reflexionar sobre quina és la funció de cada classe i els motius de la seva ubicació dins la jerarquia.
Creació de jerarquies de classes: un programa de música
L’objectiu d’aquesta activitat és saber definir jerarquies de classes que s’adaptin a un escenari concret.
Es vol dissenyar un programa de música en què es puguin utilitzar diferents instruments musicals. Dissenyeu una jerarquia de classes en què es representin els diferents tipus d’instruments musicals. Especifiqueu correctament les classes tenint en compte quines han de ser abstractes i quines no.
Creació de jerarquies de classes: gestió d'un centre educatiu
L’objectiu d’aquesta activitat és saber definir jerarquies de classes que s’adaptin a un escenari concret dins una aplicació.
En el procés de disseny d’una aplicació de gestió de personal d’un centre educatiu s’han identificat les classes següents:
Proposeu una jerarquia de classes que minimitzi la duplicació de codi a l’hora d’implementar-lo. Podeu afegir les classes noves que creieu més adients per assolir-ho.
Notes:
Intercanvi
representa els estudiants provinents d’un programa d’intercanvi que vénen de l’estranger.- Per a cada atribut hi ha implícitament associada una operació d’accés de lectura i d’escriptura.
Disseny amb herència i polimorfisme: una aplicació de dibuix
L’objectiu d’aquesta activitat és saber dissenyar aplicacions escalables fent ús dels mecanismes d’herència i polimorfisme.
Es vol dissenyar un sistema que permeti a infants dibuixar de manera senzilla. Aquests poden seleccionar figures (geomètriques o més complexes) predefinides i enganxar-les en una zona de dibuix. En qualsevol moment es pot variar la ubicació, la mida i el color de les figures que hi ha en la zona de dibuix. Només es poden enganxar figures, no es pot dibuixar lliurement. En acabar, és possible desar el dibuix (en un fitxer o imprimint-lo).
Ideeu una jerarquia de classes per l’aplicació, utilitzant correctament els mecanismes d’herència i polimorfisme. Indiqueu alguns atributs i operacions dins les classes que estiguin incloses dins d’alguna jerarquia d’herència.
Aquest és un exercici obert, en què el grau de complexitat depèn exclusivament de les capacitats que es vulguin afegir al sistema.
Extensió de les funcionalitats d'una aplicació
L’objectiu d’aquesta activitat és modificar la jerarquia de classes original que s’ha mostrat en els diferents exemples de la unitat, de manera que l’aplicació pugui suportar una nova funcionalitat.
Es vol ampliar l’aplicació del reproductor multimèdia de manera que també sigui capaç de reproduir ràdio per Internet.
Implementació d'herència
L’objectiu d’aquesta activitat és implementar un seguit de classes en Java relacionades mitjançant herència.
Implementeu les classes Fitxa
, Obra
, Volum
i Revista
corresponents a la figura següent, pensades per poder gestionar alguns dels elements que ens podem trobar en la gestió d’una biblioteca.
El significat dels atributs que puguin induir a confusió són:
- nrePags: nombre de pàgines de l’obra
- nro: número de revista o número de volum
Aquestes classes han de contenir, com a mínim, els mètodes següents:
- Constructors adequats, que han de permetre crear objectes de les classes corresponents.
- Mètodes per obtenir els valors dels atributs.
- Mètodes per modificar els valors dels atributs.
- El mètode
visualitzar()
, que ha de mostrar la informació de l’objecte actiu per la consola. - El mètode
toString()
, que ha de mostrar la referència de l’objecte actiu per la consola. - La sobreescriptura del mètodes
equals()
heretat de la classeObject
. Cal considerar que dues fitxes són iguals si tenen la mateixa referència.
Les classes han de residir en un paquet anomenat biblioteca. Desenvolupeu una altra classe, anomenada ProvaFitxes
, que contingui un mètode main()
que comprovi la gestió correcta de les classes Fitxa
i derivades implementades. La presència d’aquesta classe no prohibeix que cada classe tingui el propi mètode main()
per comprovar-ne el funcionament.
Gestió de d'objectes dins d'una jerarquia d'herència
L’objectiu d’aquesta activitat és veure com es gestionen diferents objectes quan aquests pertanyen a diferents classes vinculades mitjançant herència.
Considereu la implementació de la jerarquia de classes corresponent a la figura següent:
Dissenyeu una classe anomenada Biblioteca
que permeti la gestió d’una biblioteca a partir d’una taula d’objectes de les classes derivades de la classe Fitxa.
Els requeriments són els següents:
- En la creació de la biblioteca cal indicar la seva dimensió.
- En una biblioteca no hi pot haver dues fitxes amb la mateixa referència.
- Ha de proporcionar mètodes per:
- Conèixer la capacitat de la biblioteca.
- Conèixer el nombre d’elements que hi ha en la biblioteca.
- Afegir una fitxa a la biblioteca.
- Cercar una fitxa a partir de la seva referència.
- Extreure una fitxa a partir de la seva referència.
- Proporcionar la fitxa que es troba en una posició determinada en la biblioteca.
- Visualitzar el contingut de la biblioteca.
Desenvolupeu una altra classe, anomenada ProvaBiblioteca
, que contingui un mètode main()
que comprovi la gestió correcta de la classe Biblioteca
implementada.
Disseny de classes abstractes
L’objectiu d’aquesta activitat és practicar el disseny de classes abstractes en Java.
Considereu la implementació de la jerarquia de classes corresponent a la figura següent, basada en els fitxers FiguraGeometrica01.java, Rectangle01.java, Cercle01.java i Triangle01.java (disponibles al final de l’enunciat).
Milloreu la implementació amb les característiques següents:
- La classe
FiguraGeometrica
ha de passar a ser abstracta i ha de fer que qualsevol classe derivada implementi obligatòriament el mètodearea()
per calcular l’àrea de la figura corresponent. Quin canvi cal efectuar en la figura anterior? - Cal sobreescriure els mètodes
toString()
,equals()
heretats de la classeObject
. - Cal considerar que dues figures geomètriques són iguals si tenen el mateix codi.
- Cal incloure totes les classes de la jerarquia en un paquet anomenat figures.
Desenvolupeu una altra classe, anomenada ProvaFigures
, pertanyent a un paquet anomenat proves
, que contingui un mètode main()
per comprovar la gestió correcta de les classes FiguraGeometrica
i derivades implementades. La presència d’aquesta classe no prohibeix que cada classe tingui el propi mètode main()
per comprovar-ne el funcionament.
Descarregueu l’arxiu següent amb el codi font de les classes:
Disseny d'interfaces
L’objectiu d’aquesta activitat és comprovar la necessitat d’usar interfaces.
Feu que FiguraGeomètrica
implement l’interface Java Comparable
(disponible directament a les llibreries del Java, sense necessitat d’importar cap llibreria).
Un cop fet, aprofiteu aquest fet per crear un mètode anomenat ordenar(Comparable[] items): void
que serveixi per ordenar (utilitzant l’algorisme de la bombolla) una taula d’objectes de qualsevol classe dissenyada per nosaltres per a la qual hi hagi definit un criteri d’ordenació (ja que, en cas contrari, ordenar-ne els objectes seria impossible). Per exemple, per la mida de l’àrea. El mètode s’ha d’ubicar en una nova classe anomenada Algorismes
ubicada en un paquet anomenat utilitats
.
Desenvolupeu una altra classe, anomenada ProvaOrdenar
, pertanyent a un paquet anomenat proves, que contingui un mètode main()
en què es declari un array
d’objectes de la jerarquia de classes corresponent a la figura següent, per executar-hi un procés d’ordenació basat en l’àrea de cada figura.
Si cal, podeu millorar el disseny de les classes de la jerarquia que neix a FiguraGeometrica
afegint els mètodes i/o característiques que corresponguin.
Descarregueu l’arxiu següent amb el codi font de les classes: