You are on page 1of 7

M03.

Programaci II
UF4. POO. Fonaments
Exercicis de programaci OO amb Java 8 SE

curs 2015-2016

Sergi Grau

Escola del Clot


CFGS Desenvolupament d'Aplicacions Web
CFGS Desenvolupament d'Aplicacions Multiplataforma
M03. Programaci II
Prof. Sergi Grau
curs 2015-2016

1. Programa una classe que determini el nombre d'aparicions d'una paraula en una altra.
2. Implementa una classe que presenti el nombre d'aparicions de cadascuna de les lletres d'una
paraula donada per l'entrada estndard.
3. Realitza un programa que permeti introduir un nombre variable de paraules per lentrada
estndard. El programa demana posteriorment una de les paraules introdudes i retorna lordre
en que es trobava en la llista introduda. El programa No distingeix entre majscules i
minscules.
Per a efectuar les lectures crea un mtode privat anomenat llegeixTeclat amb la segent
signatura: llegeixTeclat(missatgeAEscriure:String):String
4. Realitza un programa que mostri el calendari del mes actual.
5. Crea una classe que calculi la informaci ms important d'una xarxa a partir de l'adrea d'una
mquina i la mscara de xarxa que t associada.
6. Es demana implementar el programari a partir del segent diagrama de classes UML. El
diagrama UML no representa ni el mtodes constructors per defecte, ni aquells mtodes que
shereten de la classe Object i que cal que redefinir si s necessari. Es dna el codi de
l'operaci de la classe NIF (que hereta de DNI) que calcula la lletra de NIF corresponent.
El mtode calcularLletra():char permet obtenir la lletra dun NIF a partir del nmero de DNI.
El codi del mtode s:
char calculaLletra() {
char[] taula={ 'T','R','W','A','G','M','Y','F','P','D','X',
'B','N','J','Z','S','Q','V','H','L','C','K','E'};
return taula[getDNI()%23];
}

Escola del Clot


CFGS Desenvolupament d'Aplicacions Web
CFGS Desenvolupament d'Aplicacions Multiplataforma
M03. Programaci II
Prof. Sergi Grau
curs 2015-2016

Es demana:

Implementaci de les classes DNI i NIF. Podeu executar un joc de proves a la classe
Principal. Observeu els mtodes redefinits que s'hereten de la classe Object.

Implementaci de la classe Persona. Observeu la relaci dus entre Persona i NIF.


Podeu executar el joc de proves Principal recollint aquesta relaci.

Implementaci de les classes Alumne i Professor. Podeu executar el joc de proves


Principal.

Verifiqueu que la comparaci entre objectes es fa de manera correcta. Dues


persones sn la mateixa si tenen el mateix DNI.

Escriviu una implementaci alternativa al mtode calculaLletra() de la classe NIF


sense utilitzar una taula de carcters. Anomeneu a aquets mtode calculaLletra2()

Genereu la documentaci en format Javadoc de totes les classes, menys la Principal.

Per a provar el correcte funcionament de la implementaci utilitzeu una classe


anomenada Principal, la qual cont la instanciaci duna taula amb objectes del tipus
Alumne i Professor. Aquestes dades s'hauran d'introduir mitjanant teclat.

A la classe Principal aprofiteu la tcnica del polimorfisme.

Cal complir amb el principi de ocultaci, i facilitar al mxim la reutilitzaci de les


classes dissenyades.

7. Implementa el segent diagrama UML seguint els passos que es detallen a l'enunciat. Totes les
classes han de generar-se en el paquet edu.fje.clot.daw

Escola del Clot


CFGS Desenvolupament d'Aplicacions Web
CFGS Desenvolupament d'Aplicacions Multiplataforma
M03. Programaci II
Prof. Sergi Grau
curs 2015-2016

Codificaci de "Instrument":
(privats) i mtodes:

La classe Instrument posseeix els segents atributs

desafinat. Atribut PRIVAT boole que indica si l'instrument est desafinat.


Inicialment val cert.

Nivell. Atribut PRIVAT que indica el nivell dins de la jerarquia d'herncia que
anem a implementar. Per aquest cas, valdr 1.

tocar (): void. Si l'instrument est afinat, imprimeix per pantalla la cadena de
carcters: "S'ha tocat un instrument". Si est desafinat (l'atribut corresponent
val cert), imprimeix "Instrument desafinat!".

queNivel (): String. Retorna el String: "Aquest instrument s del nivell


<valor_atributo_nivel>".

afinar (): void. Afina l'instrument (posa l'atribut desafinat a fals).

Accesor per l'atribut nivell. Recordeu que cal crear un constructor sense
parmetres, per inicialitzar els atributs.

Programa principal: Una vegada codificada la classe, generar codi de proves


conforme els mtodes retornen l'esperat per a cada cas, en una classe principal
(Principal.java):
Herncia: Codificaci de Vent, Percussi i Corda: Ara anem a generar el segon nivell
de jerarquia, implementant herncia. En fer que una classe hereti d'una altra,
conservem tots els seus atributs i mtodes. No obstant aix, podem redefinir alguns
dels seus mtodes per crear implementacions especfiques dels seus subclasses
diferents.
Codificar les 3 noves classes, fent que heretin de Instrument mitjanant l's de la
paraula clau extends. Triar una per on comenar i realitzar els segents passos.
Noteu que ser necessari anar canviant el programa principal per poder fer les proves
que es demanen a travs del debugger.
Creaci del constructor.

Veure quins valors prenen els atributs heretats si es deixa el constructor per
defecte.

Generar un constructor sense parmetres. Si volem inicialitzar l'atribut


desafinat a cert, caldr trucar al constructor de la superclasse. Per aix, la
primera instrucci a utilitzar ha de ser super (); Veure amb el debugger qu
passa (observeu com es diu el constructor de la superclasse fent Step Into).
Intenteu inicialitzar assignant directament cert.

Volem que nivell valgui 2. Veure qu passa si s'accedeix directament (nivell =


2;). Com l'atribut s privat, ni tan sols subclasses poden accedir (encara que
ho heretin). Per modificar-lo, caldr fer servir els Accesor definits en
Instrument.

Redefinici de tocar ()

Escola del Clot


CFGS Desenvolupament d'Aplicacions Web
CFGS Desenvolupament d'Aplicacions Multiplataforma
M03. Programaci II
Prof. Sergi Grau
curs 2015-2016

Anem a redefinir el mtode tocar () de manera que retorni resultats diferents


segons la subclasse on s'invoca (aix s polimorfisme). Redefinir nicament
en les classes Vent i Corda (no redefinir en percussi).

Tornar a definir el mtode de manera que per a cada classe, torni: "S'ha
tocat un instrument de <nombre_clase>". Controlar si desafinat val cert,
tamb (imprimir "<nombre_clase> desafinat!".

Generar codi de proves per veure si es es torno el correcte (generar


instncies en el programa principal de Corda, Vent i Percussi, i veure que
retorna el que correspon).

Programa principal: Un cop fets els passos anteriors, generar un programa principal
(treure el codi de proves fins al moment), que faci el segent:

Crear una matriu per a 4 referncies a Instrumento.Instrumento [] array = new


Instrument [num];

Crear per a cada referncia una instncia de cadascuna de les classes


definides. Aqu podem veure com, declarada una referncia per a una
superclasse, podem fer que apunti a instncies de subclasses: Exemple:
Instrument [2] = new Percussi (); / / percussi s un instrument

Mitjanant un bucle, invocar, per a cada instncia generada, els mtodes


tocar () i queNivel ().

Fer un altre bucle on s'invoqui a afinar () i desprs a tocar ().

Intentar endevinar quin ser el resultat de l'execuci.

En aquest programa principal podem veure el comportament de polimorfisme


(s'executa el codi de tocar () redefinit en la subclasse tot i utilitzar noms referncies a
superclasses). Tamb podem veure com s'hereten mtodes, ja que cap de les
superclasses t especificat els mtodes afinar () i queNivel (). En aquest ltim, veiem
com varia el valor segons el nivell de la classe (a causa de les inicialitzacions al
constructor). En el cas de Percussi, podem veure que, en no haver redefinit tocar (),
tamb executem el codi Herad.
Atributs protegits: Canviar els atributs nivell de privat a protected. Comprovar si ara
s possible accedir-hi directament des de les subclasses.
Classes Abstractes:Anem a canviar la classe Instrument de manera que sigui
abstracta, usant per a aix la paraula clau abstract en definir la classe. Fer que el
mtode tocar () tamb sigui abstracte (definir-lo com abstract i treure tot el codi):
public abstract void tocar ();
Implementaci de classes abstractes heretades: Un cop fet aix, compilar la classe
Instrument ia continuaci, recompilar de nou les subclasses. Percussi dna algun
problema?
Fer Percussi tamb abstracta: Ara, en ser una classe abstracta
Instrument, Percussi no pot heretar codi algun. Les niques opcions sn: Fer
que Percussi tamb sigui abstracta o
Generar la codi de tocar () en

Escola del Clot


CFGS Desenvolupament d'Aplicacions Web
CFGS Desenvolupament d'Aplicacions Multiplataforma
M03. Programaci II
Prof. Sergi Grau
curs 2015-2016

Percussi. Triarem la primera opci.


Crear les noves classes Tambor i Platillos: Crear dues noves subclasses,
que heretin de Percussi: Tambor i Platillos. Per a ells recordar que: L'atribut
nivell s'inicialitza a 3, en aquest cas. L'atribut desafinat segueix valent cert a
l'inici.Platerets t un atribut nic, anomenat nivelString que s un String. Definir
com a constant amb valor igual a "tres". En aquest cas, definir la
implementaci de tocar () en el codi de les dues classes, de manera que facin
el mateix que en anteriors codificacions (controli si aquesta desafinat, i si no s
aix, imprimiu: "S'ha tocat un <nombre_clase> ". En el cas dels (o" uns "per
Platets). En Platerets, redefinir el mtode queNivel (), de manera que torni:
" A q u es t i n s t r u m en t s d el n i v el l < v al o r _ at r i b u t o _ n i v el S t r i n g > ,
<valor_atributo_nivel>".

Programa Principal: Veure si l'antic Programa Principal encara compila


b. Veiem que, com que Percussi i Instrument sn classes abstractes, no es
poden instanciar. Per aix, ens donar error en la lnia on les inicializbamos.
Ara fer: Generar una matriu de Instrument de 4 posicions. Crear instncies
nicament de les classes no abstractes per a cada posici de l'array. Deixar el
codi com abans (d'invocaci de mtodes). Veure el resultat del programa. s
interessant depurar per veure les trucades entre codis de superclassessubclasses i els atributs heretats.

8. Realitza un programa que permeti la introducci de notes a un alumne mitjanant teclat.


L'atribut nota ha de ser una classe d'enumeraci, doncs les notes han de estar definides
segons els segents possibles valors: INSUFICIENT (I), SUFICIENT (S), BE (B),
NOTABLE(N), EXCELLENT(E). El programa mostra posteriorment el nom, la nota i la
abreviatura d'aquesta. Si la nota s insuficient ha de mostrar addicionalment has de treballar
ms.

Escola del Clot


CFGS Desenvolupament d'Aplicacions Web
CFGS Desenvolupament d'Aplicacions Multiplataforma
M03. Programaci II
Prof. Sergi Grau
curs 2015-2016

9. Es desitja implementar el segent diagrama esttic de classes en llenguatge Java. Utilitzeu


correctament la interfcie Comparable i Clonable, de tal manera que sigui possible ordenar els
objectes de la classe Factura per data, i que es puguin copiar els objectes correctament
mitjanant deep copy

You might also like