Prácticas M17 Unidad Formativa 3 (18-19)
La revisió el 17:12, 28 maig 2018 per Lzabala (discussió | contribucions)
- TODO el código ha de estar comentado tal y como se ha explicado en clase y correctamente indentado, de no ser así se aplicará -2 puntos a la práctica
- Es imprescindible que la práctica compile, de no ser así la nota es un 0 automáticamente
Práctica 1: Creando clases
Fecha de entrega
- 7 de octubre de 2018 a través de Moodle
Ponderación
Esta práctica vale un 15% de la nota
Descripción
- Crea una clase llamada book que tenga los siguientes atributos: ISBN(String), title(String), authors(array String), pageNum(int), hasImages(boolean), genre(String), booksSold(int).
- Crea una clase llamada GeneradorId que contenga un método estático llamado (getId) que devuelva un id diferente (único y correlativo) cada vez que se llama.
- Crea un método estático llamado (getRandomInt) que devuelva un número entero entre 0 y 9.
- Crea un constructor por defecto que asigne los siguiente valores: ISBN = un id autogenerado y 3 números random con el formato xxx-yyy, title = no title, authors = array de 1 con el valor no author, pageNum = -1, hasImages = false, genre = no genre, booksSold = -1.
- Crea un constructor con parámetros pero ha de cumplir siempre las siguientes restricciones: pageNum ha de ser más grande 0, genre = fantasia o thriller o terror o novela histórica o divulgación científica, booksSold = 0.
- Crea un método llamado showBookInfo que imprima por pantalla toda la información del libro (cada dato en una nueva linea).
- Crea 4 libros, el primero usando el constructor por parámetros con los siguientes datos:iSBN: 978-8499890401, El tesoro cósmico, Stephen y lucy Hawking, 224 páginas, contiene imágenes, divulgación científica, ventas 10.000, los otros 3 usando el constructor por defecto.
Criterios de puntuación
- 1,5 puntos: pregunta 1
- 2 puntos pregunta 2
- 1 punto pregunta 3
- 2 puntos pregunta 4
- 2 puntos pregunta 5
- 0,5 puntos pregunta 6
- 1 punto pregunta 7
Práctica 2: Métodos, constructores y sobrecarga
Fecha de entrega
- 14 de octubre de 2018 a través de Moodle
Ponderación
Esta práctica vale un 25% de la nota
Descripción
- Crea una clase BookV2 que sea igual que la clase libro. Añade un constructor por copia, crea los getters de los atributos de la clase, crea el setter para el atributo booksSold y permite que un libro pueda tener más de un género.
- Modifica los métodos getRandomInt y getId para que devuelvan un String.
- Crea un método llamado getRandomChar que recibe un parámetro (número de carácteres) y devuelve un String con carácteres alfabéticos random. Modifica el constructor por defecto para que en el título del libro genere un String aleatorio de 8 carácteres.
- Sobrecaga el método getRandomInt pasándole un parámetro que indique el número de carácteres que ha de tener el número random generado.
- Sobrecarga el método getId con un parámetro que indique el número de carácteres que tiene que tener el Id (rellena con 0 a la izquierda para completar los carácteres) Ahora el ISBN tiene que tener el formato xxx-xxxxxxxxxx.
- Crea una clase llamada bookShop, esta clase almacenará los libros y permitirá su venta. Para almacenar los libros usaremos un Hashtable<String, Book> (Hashtable<isbn,Book>), por otro lado usaremos otro Hashtable<String, int> (Hashtable<isbn,Libros disponibles>) para guardar los libros que tenemos disponibles (lo que sería el stock).Crearemos un método llamado isBookAvailable que recibe como parámetro un String isbn y devuelve si hay stock disponible.
- En la clase bookShop crea un método llamado addBook que recibe un libro como parámetro y permite añadir un libro a la libreria.Sobrecarga el método addBook para que también permita pasar como parámetro un array de libros.
- Crea un método bookSell que recibe como parámetro un String isbn y realiza la venta del libro y devuelve un true si la venta fue correctamente o un false en caso contrario. Esto consiste en comprobar si hay disponibilidad y si hay stock, descontar el libro y aumentar el numero de libros vendidos correspondiente. Sobrecarga este para realizar una venta pero que reciba como parámetro un número no determinado de isbns. La operación de venta solo puede realizarse si TODOS los libros pueden venderse, sino no se venderá ninguno.
- Crea un programa principal para probar las clases. Crea 10 libros diferentes. Uno usando el constructor por parámetros, otro el constructor por cópia y 8 usando el constructor por defecto. Introduce los 10 libros en la librería. Como uno de ellos es una copia en la librería debería de haber 9 libros pero 10 en Stock ( uno de ellos ha de tener 2 libros disponibles). Vende 1 libro con el método bookSell. Intenta volver a vender el mismo libro. Vende 3 libros con el método bookSell sobrecargado (el de array de isbn). Intenta vender 3 libros más con el mismo método pero que 1 de ellos no tenga Stock.
Criterios de puntuación
- 1 punto:pregunta 1
- 1 punto: pregunta 2
- 1 punto: pregunta 3
- 1 punto: pregunta 4
- 1 punto: pregunta 5
- 1 punto: pregunta 6
- 1 punto: pregunta 7
- 1 punto: pregunta 8
- 2 puntos: pregunta 9
Práctica 3: Jugando con la herencia y el polimorfismo
Fecha de entrega
- 21 de octubre de 2018 a través de Moodle
Ponderación
Esta práctica vale un 60% de la nota
Descripción
- Vamos a crear una serie de clases que nos permitan representar ciertas interacciones de un juego de rol. Crearemos 3 clases abstractas: Clase Personaje (Atributos: Nombre, Clase, Fuerza, Resistencia, Arma, Vida, Mochila; Métodos: Atacar "método abstracto", Equipar y Desequipar), Clase Dado(Atributos: Resultado; Métodos:tirar "método abstracto"), Clase Item(Atributos:Clase, Tipo, Nombre, Modificador, Métodos: usar "método abstracto"). Crea los constructores por defecto para cada clase.
- Ahora crearemos la clase Guerrero (posee como atributo propio Armadura) y Mago(posee como atributos propios Maná y Magia. Como método propio lanzarHechizo) que heredarán de la clase personaje.Todos los personajes tienen una mochila de 10 posiciones de items. También crearemos la clase DadoD6 y DadoD10 que heredarán de la clase dado y por último las clases BolaDeFuego(Atributos: ManáNecesario, Daño), PocionDeMana y PocionDeVida que heredarán de Item.
- Crear un Guerrero (Nombre = "Geralt de Rivia", Clase = 0, Fuerza = 4, Resistencia = 4, Arma = 0, Vida = 40, Armadura = 3). Crear un Mago (Nombre = "Raistlin", Clase = 1, Fuerza = 1, Resistencia = 2, Arma = 1, Vida = 25, Maná = 30). Ahora queremos que nuestros personajes puedan equipar objetos para poder usarlos, asi que al guerrero le tendríamos que equipar con 2 pociones de vida y al mago con 1 bola de fuego, 1 poción de maná y 1 poción de vida. Equipar un item consiste en tener ese item dentro de la mochila. Desequipar un item consiste en sacarlo de la mochila. Usar un item consiste en aplicar sus efectos y luego eliminarlo de la mochila.
- NOTA:
- Poción de vida -> Clase = -1 (-1 todas las clases pueden usar este objeto), Tipo = 0 (consumible, es decir, una vez que se usa se tiene que eliminar), Nombre = "Poción de Vida", Modificador = 10
- Poción de maná -> Clase = 1 (1 solo la clase mago puede usar este objeto), Tipo = 0 (consumible, es decir, una vez que se usa se tiene que eliminar), Nombre = "Poción de Maná", Modificador = 15
- Bola de fuego -> Clase = 1 (1 solo la clase mago puede usar este objeto), Tipo = 1 (NO consumible), Nombre = "Bola de Fuego", Modificador = 0, ManaNecesario = 10, Daño = 12
- NOTA:
- Por último queremos que estos personajes se puedan atacar. Atacar consiste en lanzar tantos dados de 10 como indique el atributo fuerza del personaje, sumar ese resultado y restarlo al resultado de tirar tantos dados de 6 como indique la propiedad resistencia del personaje defensor. Hay que tener en cuenta que si el personaje tiene Armadura (ejemplo Armadura = 3) el valor de la armadura se suma al resultado de los dados de resistencia que tira el defensor. Por otro lado el mago puede atacar con arma (se aplica el método atacar) o lanzar un hechizo, en este último caso tenemos que comprobar que el personaje tiene maná suficiente para lanzar la bola de fuego el Atributo Daño es directamente el daño provocado al defensor menos su tirada de dados de 6 de resistencia (en caso de hechizos el atributo Armadura no puede usarse.
Criterios de puntuación
- 2,5 puntos: pregunta 1
- 2,5 puntos pregunta 2
- 2,5 puntos pregunta 3
- 2,5 puntos pregunta 4