Programació amb Java 8 SE

download Programació amb Java 8 SE

of 7

description

Programació amb Java 8 SE

Transcript of Programació amb Java 8 SE

  • M03. Programaci II

    UF4. POO. FonamentsExercicis de programaci OO amb Java 8 SE

    curs 2015-2016

    Sergi Grau

  • Escola del ClotCFGS Desenvolupament d'Aplicacions Web

    CFGS Desenvolupament d'Aplicacions MultiplataformaM03. Programaci II

    Prof. Sergi Graucurs 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 lordreen que es trobava en la llista introduda. El programa No distingeix entre majscules iminscules.

    Per a efectuar les lectures crea un mtode privat anomenat llegeixTeclat amb la segentsignatura: 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 queshereten de la classe Object i que cal que redefinir si s necessari. Es dna el codi del'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 ClotCFGS Desenvolupament d'Aplicacions Web

    CFGS Desenvolupament d'Aplicacions MultiplataformaM03. Programaci II

    Prof. Sergi Graucurs 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 classeanomenada Principal, la qual cont la instanciaci duna taula amb objectes del tipusAlumne 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 lesclasses dissenyades.

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

  • Escola del ClotCFGS Desenvolupament d'Aplicacions Web

    CFGS Desenvolupament d'Aplicacions MultiplataformaM03. Programaci II

    Prof. Sergi Graucurs 2015-2016

    Codificaci de "Instrument": La classe Instrument posseeix els segents atributs(privats) i mtodes:

    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 queanem a implementar. Per aquest cas, valdr 1.

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

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

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

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

    Programa principal: Una vegada codificada la classe, generar codi de provesconforme 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 nivellde jerarquia, implementant herncia. En fer que una classe hereti d'una altra,conservem tots els seus atributs i mtodes. No obstant aix, podem redefinir algunsdels seus mtodes per crear implementacions especfiques dels seus subclassesdiferents.

    Codificar les 3 noves classes, fent que heretin de Instrument mitjanant l's de laparaula 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 provesque 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, laprimera instrucci a utilitzar ha de ser super (); Veure amb el debugger qupassa (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 queho heretin). Per modificar-lo, caldr fer servir els Accesor definits enInstrument.

    Redefinici de tocar ()

  • Escola del ClotCFGS Desenvolupament d'Aplicacions Web

    CFGS Desenvolupament d'Aplicacions MultiplataformaM03. Programaci II

    Prof. Sergi Graucurs 2015-2016

    Anem a redefinir el mtode tocar () de manera que retorni resultats diferentssegons la subclasse on s'invoca (aix s polimorfisme). Redefinir nicamenten les classes Vent i Corda (no redefinir en percussi).

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

    Generar codi de proves per veure si es es torno el correcte (generarinstncies en el programa principal de Corda, Vent i Percussi, i veure queretorna 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 = newInstrument [num];

    Crear per a cada referncia una instncia de cadascuna de les classesdefinides. Aqu podem veure com, declarada una referncia per a unasuperclasse, 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 mtodestocar () 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 asuperclasses). Tamb podem veure com s'hereten mtodes, ja que cap de lessuperclasses t especificat els mtodes afinar () i queNivel (). En aquest ltim, veiemcom varia el valor segons el nivell de la classe (a causa de les inicialitzacions alconstructor). 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 aras possible accedir-hi directament des de les subclasses.

    Classes Abstractes:Anem a canviar la classe Instrument de manera que siguiabstracta, usant per a aix la paraula clau abstract en definir la classe. Fer que elmtode 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 classeInstrument ia continuaci, recompilar de nou les subclasses. Percussi dna algunproblema?

    Fer Percussi tamb abstracta: Ara, en ser una classe abstractaInstrument, Percussi no pot heretar codi algun. Les niques opcions sn: Ferque Percussi tamb sigui abstracta o Generar la codi de tocar () en

  • Escola del ClotCFGS Desenvolupament d'Aplicacions Web

    CFGS Desenvolupament d'Aplicacions MultiplataformaM03. Programaci II

    Prof. Sergi Graucurs 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'atributnivell s'inicialitza a 3, en aquest cas. L'atribut desafinat segueix valent cert al'inici.Platerets t un atribut nic, anomenat nivelString que s un String. Definircom a constant amb valor igual a "tres". En aquest cas, definir laimplementaci de tocar () en el codi de les dues classes, de manera que facinel mateix que en anteriors codificacions (controli si aquesta desafinat, i si no saix, imprimiu: "S'ha tocat un ". En el cas dels (o" uns "perPlatets). En Platerets, redefinir el mtode queNivel (), de manera que torni:"Aquest inst rument s del n ive l l ,".

    Programa Principal: Veure si l'antic Programa Principal encara compilab. Veiem que, com que Percussi i Instrument sn classes abstractes, no espoden instanciar. Per aix, ens donar error en la lnia on les inicializbamos.Ara fer: Generar una matriu de Instrument de 4 posicions. Crear instnciesnicament de les classes no abstractes per a cada posici de l'array. Deixar elcodi com abans (d'invocaci de mtodes). Veure el resultat del programa. sinteressant depurar per veure les trucades entre codis de superclasses-subclasses 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 definidessegons els segents possibles valors: INSUFICIENT (I), SUFICIENT (S), BE (B),NOTABLE(N), EXCELLENT(E). El programa mostra posteriorment el nom, la nota i laabreviatura d'aquesta. Si la nota s insuficient ha de mostrar addicionalment has de treballarms.

  • Escola del ClotCFGS Desenvolupament d'Aplicacions Web

    CFGS Desenvolupament d'Aplicacions MultiplataformaM03. Programaci II

    Prof. Sergi Graucurs 2015-2016

    9. Es desitja implementar el segent diagrama esttic de classes en llenguatge Java. Utilitzeucorrectament la interfcie Comparable i Clonable, de tal manera que sigui possible ordenar elsobjectes de la classe Factura per data, i que es puguin copiar els objectes correctamentmitjanant deep copy

    M03. Programaci IIUF4. POO. Fonaments