Prácticas M17 Unidad Formativa 3 (18-19)

De Wiket
Salta a la navegació Salta a la cerca
  • 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