Diferència entre revisions de la pàgina «Prácticas M17 Unidad Formativa 3 (18-19)»

De Wiket
Salta a la navegació Salta a la cerca
 
(Hi ha 7 revisions intermèdies del mateix usuari que no es mostren)
Línia 26: Línia 26:
 
* 14 de octubre de 2018 a través de Moodle
 
* 14 de octubre de 2018 a través de Moodle
 
==Ponderación==
 
==Ponderación==
Esta práctica vale un 25% de la nota
+
Esta práctica vale un 40% de la nota
 
== Descripción ==
 
== 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.
 
#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.
Línia 36: Línia 36:
 
#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.
 
#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 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==
 
==Criterios de puntuación==
*'''1 puntos:''' pregunta 1
+
*'''1 punto:'''pregunta 1
*'''1 puntos''' pregunta 2
+
*'''1 punto:''' pregunta 2
*'''1 puntos''' pregunta 3
+
*'''1 punto:''' pregunta 3
*'''1 puntos''' pregunta 4
+
*'''1 punto:''' pregunta 4
*'''2 puntos''' pregunta 5
+
*'''1 punto:''' pregunta 5
*'''2 puntos''' pregunta 6
+
*'''1 punto:''' pregunta 6
*'''2 puntos''' pregunta 7
+
*'''1 punto:''' pregunta 7
 +
*'''1 punto:''' pregunta 8
 +
*'''2 puntos:''' pregunta 9
 
=Práctica 3: Jugando con la herencia y el polimorfismo=
 
=Práctica 3: Jugando con la herencia y el polimorfismo=
 
==Fecha de entrega==
 
==Fecha de entrega==
 
* 21 de octubre de 2018 a través de Moodle
 
* 21 de octubre de 2018 a través de Moodle
 
==Ponderación==
 
==Ponderación==
Esta práctica vale un 60% de la nota
+
Esta práctica vale un 45% de la nota
 
== Descripción ==
 
== Descripción ==
 
<ol>
 
<ol>
<li>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.</li>
+
<li>Construye una clase abstracta llamada "Vehicle" con las siguientes propiedades y métodos:
<li> 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.</li>
+
* color (String)
<li>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.
+
* numWheels (Int)
*NOTA:
+
* statusWheels (Array int)
**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
+
* brand (String)
**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
+
* model (String)
**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</li>
+
* constructor por defecto sin parámetros: valores por defectos, numWheels = 2, statusWheels 100 cada rueda
<li> 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.</li>
+
* constructor parámetros: color, numWheels, brand, model
 +
* método void wheelWear(Random rn) : con una probabilidad de un 60% resta 1 punto al statusWheels de cada rueda
 +
* método abstracto void move(int kilometers)
 +
* Sobreescribe el método toString() para imprimir toda la info del Vehículo
 +
Esta clase representa un vehículo genérico (una bici, un monopatín, un coche, un trator...)
 +
</li>
 +
<li>Crea una clase abstracta llamada "MotorVehicle" que herede de la clase "Vehicle" con las siguientes propiedades y métodos:
 +
* motorTipe (String) (Gasolina/Diesiel)
 +
* isAutomatic (boolean)
 +
* motorStatus (int)
 +
* filterStatus (int)
 +
* clutchStatus (int)
 +
* performRevision (boolean)
 +
* constructor por defecto sin parámetros: valores por defectos,motorTipe = "Gasolina", isAutomatic = false, motorStatus, filterStatus, clutchStatus = 100, performRevision = false
 +
* constructor parámetros: color, numWheels, brand, model
 +
* constructor parámetros: color, numWheels, brand, model, motorTipe, isAutomatic
 +
* Sobreescribir el método move(int kilometers): Cada kilometro tenemos que comprobar si es necesiria la revisión, si es nesaria actualizamos la variable correspondiente, además calculamos el desgaste de ruedas, motor, filtro y embrague (el embrague siempre que no sea automatico).
 +
* El desgaste del filtro y el motor tiene una probabilidad de un 40% de restar 1 punto al status correspondiente, mientras que el embrague tiene una probabilidad de un 20% de restar 1 al status. (Crea las funciones de desgate necesarias)
 +
* La revisión es necesaria si filtros, ruedas o motor estan por debajo de 40. (Crea la función necesaria)
 +
* método abstracto void revision
 +
* Sobreescribe el método toString() para imprimir toda la info del Vehículo a motor
 +
Esta clase representa un vehículo a motor genérico (una moto, un coche, un trator...)
 +
</li>
 +
<li>Crea un clase abstracta llamada "ElectricMotorVehicle" que herede de la clase "MotorVehicle" con las siguiente propiedades y métodos:
 +
* autonomyHours (int)
 +
* bateryStatus (int)
 +
* constructor por defecto sin parámetros: valores por defectos, autonomyHours = 3
 +
* constructor parámetros: color, numWheels, brand, model
 +
* constructor parámetros: color, numWheels, brand, model, autonomyHours
 +
* Sobreescribe el método void move(int kilometers) (recuerda que los coches eléctricos no tienen embrague)
 +
* Sobreescribe el método void revision(): este método actualiza todos los valores de estado al 100.
 +
* Sobreescribe los métodos de desgate para que filtros y motor con una probabilidad de un 20% resten 1 punto al status correspondiente
 +
* Crea una función de desgaste para la batería con una probabilidad de 20% resta 1 punto al status de la bateria
 +
* Sobreescribe el método toString() para imprimir toda la info del Vehículo eléctrico
 +
Esta clase representa un vehículo a motor eléctrico genérico (una moto eléctrica, un coche eléctrico, un autobús eléctrico...)
 +
</li>
 +
<li>Crea una clase llamada "Bike" que herede de la clase "Vehicle"
 +
* constructor por defecto sin parámetros: valores por defectos
 +
* constructor parámetros: color, brand, model
 +
* Implementa el método void move(int kilometers)
 +
</li>
 +
<li>
 +
Crea una clase llamada "Car" que herede de la clase "MotorVehicle"
 +
* constructor por defecto sin parámetros: valores por defectos
 +
* constructor parámetros: color, brand, model
 +
* constructor parámetros: color, brand, model, motorTipe, isAutomatic
 +
* Implementa el método void move(int kilometers)
 +
* Implementa el método void revision()
 +
</li>
 +
<li>
 +
Crea una clase llamada "ElectricCar" que herede de la clase "ElectricMotorVehicle"
 +
* constructor por defecto sin parámetros: valores por defectos
 +
* constructor parámetros: color, brand, model
 +
* constructor parámetros: color, brand, model, autonomyHours
 +
</li>
 +
<li>
 +
Crea un clase principal para realizar las siguientes pruebas:
 +
* Crea una bici. color = negro, marca = moma, modelo = bike20
 +
* Crea un coche. color = blanco, marca = seat, modelo = ibiza, tipo de motor = Gasolina, cambio = manual
 +
* Crea un coche eléctrico. color = blanco, marca = toyota, modelo = auris, autonomia de la batería 3 horas
 +
* Imprime las características de los 3 vehiculos usando la función toString()
 +
* haz que la bici recorra 50 kilometros y los coches 95.
 +
* Imprime las características de los 3 vehiculos usando la función toString()
 +
* Imprime si el coche requiere revisión, si es que si realiza la revisión y vuelve a imprimir las carácteristicas
 +
* Imprime si el coche eléctrico requiere revisión, si es que si realiza la revisión y vuelve a imprimir las carácteristicas
 +
</li>
 
</ol>
 
</ol>
 
==Criterios de puntuación==
 
==Criterios de puntuación==
*'''2,5 puntos:''' pregunta 1
+
*'''2 puntos:''' pregunta 1
*'''2,5 puntos''' pregunta 2
+
*'''1,5 puntos''' pregunta 2
*'''2,5 puntos''' pregunta 3
+
*'''1,5 puntos''' pregunta 3
*'''2,5 puntos''' pregunta 4
+
*'''1 puntos''' pregunta 4
 +
*'''1 puntos''' pregunta 5
 +
*'''1 puntos''' pregunta 6
 +
*'''2 puntos''' pregunta 7

Revisió de 11:29, 5 juny 2018

  • 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

  1. 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).
  2. 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.
  3. Crea un método estático llamado (getRandomInt) que devuelva un número entero entre 0 y 9.
  4. 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.
  5. 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.
  6. Crea un método llamado showBookInfo que imprima por pantalla toda la información del libro (cada dato en una nueva linea).
  7. 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 40% de la nota

Descripción

  1. 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.
  2. Modifica los métodos getRandomInt y getId para que devuelvan un String.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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 45% de la nota

Descripción

  1. Construye una clase abstracta llamada "Vehicle" con las siguientes propiedades y métodos:
    • color (String)
    • numWheels (Int)
    • statusWheels (Array int)
    • brand (String)
    • model (String)
    • constructor por defecto sin parámetros: valores por defectos, numWheels = 2, statusWheels 100 cada rueda
    • constructor parámetros: color, numWheels, brand, model
    • método void wheelWear(Random rn) : con una probabilidad de un 60% resta 1 punto al statusWheels de cada rueda
    • método abstracto void move(int kilometers)
    • Sobreescribe el método toString() para imprimir toda la info del Vehículo
    Esta clase representa un vehículo genérico (una bici, un monopatín, un coche, un trator...)
  2. Crea una clase abstracta llamada "MotorVehicle" que herede de la clase "Vehicle" con las siguientes propiedades y métodos:
    • motorTipe (String) (Gasolina/Diesiel)
    • isAutomatic (boolean)
    • motorStatus (int)
    • filterStatus (int)
    • clutchStatus (int)
    • performRevision (boolean)
    • constructor por defecto sin parámetros: valores por defectos,motorTipe = "Gasolina", isAutomatic = false, motorStatus, filterStatus, clutchStatus = 100, performRevision = false
    • constructor parámetros: color, numWheels, brand, model
    • constructor parámetros: color, numWheels, brand, model, motorTipe, isAutomatic
    • Sobreescribir el método move(int kilometers): Cada kilometro tenemos que comprobar si es necesiria la revisión, si es nesaria actualizamos la variable correspondiente, además calculamos el desgaste de ruedas, motor, filtro y embrague (el embrague siempre que no sea automatico).
    • El desgaste del filtro y el motor tiene una probabilidad de un 40% de restar 1 punto al status correspondiente, mientras que el embrague tiene una probabilidad de un 20% de restar 1 al status. (Crea las funciones de desgate necesarias)
    • La revisión es necesaria si filtros, ruedas o motor estan por debajo de 40. (Crea la función necesaria)
    • método abstracto void revision
    • Sobreescribe el método toString() para imprimir toda la info del Vehículo a motor
    Esta clase representa un vehículo a motor genérico (una moto, un coche, un trator...)
  3. Crea un clase abstracta llamada "ElectricMotorVehicle" que herede de la clase "MotorVehicle" con las siguiente propiedades y métodos:
    • autonomyHours (int)
    • bateryStatus (int)
    • constructor por defecto sin parámetros: valores por defectos, autonomyHours = 3
    • constructor parámetros: color, numWheels, brand, model
    • constructor parámetros: color, numWheels, brand, model, autonomyHours
    • Sobreescribe el método void move(int kilometers) (recuerda que los coches eléctricos no tienen embrague)
    • Sobreescribe el método void revision(): este método actualiza todos los valores de estado al 100.
    • Sobreescribe los métodos de desgate para que filtros y motor con una probabilidad de un 20% resten 1 punto al status correspondiente
    • Crea una función de desgaste para la batería con una probabilidad de 20% resta 1 punto al status de la bateria
    • Sobreescribe el método toString() para imprimir toda la info del Vehículo eléctrico
    Esta clase representa un vehículo a motor eléctrico genérico (una moto eléctrica, un coche eléctrico, un autobús eléctrico...)
  4. Crea una clase llamada "Bike" que herede de la clase "Vehicle"
    • constructor por defecto sin parámetros: valores por defectos
    • constructor parámetros: color, brand, model
    • Implementa el método void move(int kilometers)
  5. Crea una clase llamada "Car" que herede de la clase "MotorVehicle"
    • constructor por defecto sin parámetros: valores por defectos
    • constructor parámetros: color, brand, model
    • constructor parámetros: color, brand, model, motorTipe, isAutomatic
    • Implementa el método void move(int kilometers)
    • Implementa el método void revision()
  6. Crea una clase llamada "ElectricCar" que herede de la clase "ElectricMotorVehicle"
    • constructor por defecto sin parámetros: valores por defectos
    • constructor parámetros: color, brand, model
    • constructor parámetros: color, brand, model, autonomyHours
  7. Crea un clase principal para realizar las siguientes pruebas:
    • Crea una bici. color = negro, marca = moma, modelo = bike20
    • Crea un coche. color = blanco, marca = seat, modelo = ibiza, tipo de motor = Gasolina, cambio = manual
    • Crea un coche eléctrico. color = blanco, marca = toyota, modelo = auris, autonomia de la batería 3 horas
    • Imprime las características de los 3 vehiculos usando la función toString()
    • haz que la bici recorra 50 kilometros y los coches 95.
    • Imprime las características de los 3 vehiculos usando la función toString()
    • Imprime si el coche requiere revisión, si es que si realiza la revisión y vuelve a imprimir las carácteristicas
    • Imprime si el coche eléctrico requiere revisión, si es que si realiza la revisión y vuelve a imprimir las carácteristicas

Criterios de puntuación

  • 2 puntos: pregunta 1
  • 1,5 puntos pregunta 2
  • 1,5 puntos pregunta 3
  • 1 puntos pregunta 4
  • 1 puntos pregunta 5
  • 1 puntos pregunta 6
  • 2 puntos pregunta 7