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.

Per trobar la representació de la jerarquia Swing, n’hi ha prou d’usar les paraules clau “swing hierarchy” a un cercador. A grans trets, la jerarquia de classes swing es veu representada a la figura següent:

Figura

La part que representa el tractament dels camps de text inclou les classes JTextComponent, JTextArea i JTextField, entre d’altres. Cadascuna representa un camp de text amb petites diferències en el seu comportament (per exemple, de múltiples línies o una sola línia)

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.

Per definir la jerarquia, primer de tot cal establir l’estratègia a usar per diferenciar cadascuna de les classes (els tipus d’instruments musicals). Això pot dur a diferents solucions. Aquí s’usarà segons el tipus d’instrument: vent, percussió… En aquesta jerarquia, només les subclasses més específiques no són classes abstractes, la resta (Instrument, Corda, Vent, Percussió) ho són.

Figura

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:

Figura

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.

La figura següent mostra una possible solució. Cal fixar-se que Estudiant no és una classe abstracta, i que es fa ús del fet que el NIF i el NIE són, en definitiva, cadenes de text, i, per tant, es pot usar el mateix atribut per a les dues dades.

Figura

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.

Dins aquest problema, l’aplicació d’herència se centra bàsicament a establir una jerarquia de les figures que es volen dibuixar. Hi ha un seguit de característiques comunes (color, gruix de la línia) i d’altres específiques segons la figura (les que defineixen la seva mida). La figura següent mostra un exemple. Es parteix de la base que les mides es mesuren en píxels, i, per tant, són valors enters.

Figura

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.

Atès que una ràdio per internet no deixa de ser un element de so, semblant a una cançó (però amb la particularitat que és dinàmica, no sempre sona el mateix, és clar), seria suficient d’estendre la part de la jerarquia que hereta de Música. Per exemple:

Figura

En aquest cas, l’atribut heretat d’artista es podria correspondre al nom de l’emissora, ja que no té estrictament un artista únic. L’estil es manté, si és una ràdio temàtica.

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.

Figura

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 classe Object. 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.

Descarregueu l’arxiu següent amb la solució:

Solució ( 2.7 KB )

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:

Figura

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.

Descarregueu l’arxiu següent amb la solució:

Solució ( 1.9 KB )

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

Figura

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ètode area() 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 classe Object.
  • 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:

Codi ( 2.4 KB )

Descarregueu l’arxiu següent amb la solució:

Solució ( 3.3 KB )

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.

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:

Codi ( 2.4 KB )

Descarregueu l’arxiu següent amb la solució:

Solució ( 3.8 KB )

Anar a la pàgina anterior:
Creació d'aplicacions escalables
Anar a la pàgina següent:
Exercicis