11 KiB
Proyecto del Segundo Cuatrimestre Fundamentos de Programación (Curso 22/23)
👤 Autor: José Manuel Amador Gallardo | 🪪 UVUS: -------
El dataset consta de varias propiedades de coches (como pueden ser fabricante, modelo, color, tamaño del motor, capacidad de combustible, etc).
🟥 Estructura de las carpetas del proyecto
- ├─ 📁 src: Contiene los diferentes archivos que forman parte del proyecto.
- | ├─ 📦 fp.coches: Paquete que contiene los tipos del proyecto.
- | | ├─ 📄 Coche.java
- | | ├─ 📄 Concesionario.java
- | | └─ 📄 FactoriaCoches.java
- | ├─ 📦 fp.coches.test: Paquete que contiene las clases de test del proyecto.
- | | ├─ 📄 TestCoche.java
- | | ├─ 📄 TestConcesionario.java
- | | └─ 📄 TestFactoriaCoches.java
- | ├─ 📦 fp.common: Paquete que contiene los tipos auxiliares del proyecto.
- | | ├─ 📄 ColorCoche.java
- | | ├─ 📄 Motor.java
- | | └─ 📄 TipoCoche.java
- | └─ 📦 fp.utiles: Paquete que contiene las clases de utilidad.
- | ├─ 📄 Checkers.java
- | ├─ 📄 Fichero.java
- | ├─ 📄 Mostrar.java
- | └─ 📄 Parsers.java
- ├─ 📁 data: Contiene el dataset del proyecto.
- | └─ 📄 coches.csv: Datos sobre coches de varios fabricantes.
- └─ 📁 docs: Contiene la documentación del proyecto.
- └─ 📄 README.md
- Documentación.
🟥 Estructura del dataset
El dataset está compuesto por 20 columnas, con la siguiente descripción:
- Manufacturer: de tipo
String, representa el nombre del fabricante. - Model: de tipo
String, representa el modelo del vehículo. - Sales in thousands: de tipo
Integer, representa el número de ventas en miles. - 4-year resale value: de tipo
Float/Double, representa el valor de reventa a los cuatro años. - Vehicle type: de tipo
String, representa el tipo de vehículo. - Price in thousands: de tipo
Float/Double, representa el precio en miles del vehículo. - Engine size: de tipo
Float/Double, representa el tamaño del motor en L. - Horsepower: de tipo Integer, representa la potencia del vehículo en CV.
- Wheelbase: de tipo
Float/Double, representa la distancia entre los dos ejes de las ruedas. - Width: de tipo
Float/Double, representa el ancho del vehículo. - Length: de tipo
Float/Double, representa el largo del vehículo. - Curb weight: de tipo
Float/Double, representa el peso en vacío del vehículo. - Fuel capacity: de tipo
Float/Double, representa la capacidad de combustible del vehículo. - Fuel efficiency: de tipo
Integer, representa la eficiencia del combustible. - Latest launch: de tipo
String, representa el último lanzamiento del vehículo. - Color 1: de tipo
String, representa el primer color disponible del vehículo. - Color 2: de tipo
String, representa el segundo color disponible del vehículo. - Color 3: de tipo
String, representa el tercer color disponible del vehículo. - Color 4: de tipo
String, representa el cuarto color disponible del vehículo. - Color 5: de tipo
String, representa el quinto color disponible del vehículo.
🟥 Tipos implementados
🔷 Tipo Coche
Tipo base con métodos básicos: Constructor/es, Getters & Setters, toString, equals, compareTo
PROPIEDADES:
| Propiedad | Tipo | Descripción |
|---|---|---|
| fabricante | String |
consultable y modificable. |
| modelo | String |
consultable y modificable. |
| potencia | Integer |
consultable y modificable. |
| tamañoMotor | Float |
consultable y modificable. |
| tipo | TipoCoche |
consultable y modificable. |
| precio | Integer |
consultable y modificable. |
| salidaMercado | LocalDate |
consultable y modificable. |
| listaColores | List<ColorCoche> |
consultable y modificable. |
CONSTRUCTORES:
- C1: Un parámetro por cada propiedad.
- C2: Sólo recibe como parámetros el fabricante, el modelo y la lista de colores.
RESTRICCIONES:
- R1: el precio no puede ser negativo.
- R2: la lista de colores no puede ser
null.
CRITERIO DE IGUALDAD:
- Sirve para saber si dos objetos tipo Coche son iguales.
CRITERIO DE ORDENACIÓN:
- Compara el nombre del fabricante para ordenar por nombre de fabricante.
OTRAS OPERACIONES:
- tipoCocheParser: Convierte el tipo de vehículo para el toString (ej.)
TipoCoche.PASSENGERa"Passenger". - salidaMercadoParser: Convierte el formato
YYYY-MM-ddadd/MM/YYYY. - getFormatoCorto: Devuelve el toString en un formato más comprimido "one-line".
- toString: Formatea el tipo en un String legible.
- hashCode: Generea un hashcode.
🔷 Tipo Concesionario
Tipo contenedor de tipos Coche con métodos básicos (L58).
PROPIEDADES:
| Propiedad | Tipo | Descripción |
|---|---|---|
| coches | Set<Coche> |
consultable y modificable. |
CONSTRUCTORES:
- C1: Un parámetro por cada propiedad.
- C2: Constructor vacío que devuelve un Set<Coche> vacío.
CRITERIO DE IGUALDAD:
- Sirve para saber si dos objetos tipo Concesionario son iguales.
OTRAS OPERACIONES:
- getNumeroCoches: Devuelve el número total de tipos Coche en coches.
- añadirCoche: Añade un tipo Coche a coches.
- eliminarCoche: Elimina un tipo Coche de coches.
- añadirColCoches: Añade una colección de tipos Coche a coches.
- existeCochePrecioMenor: Devuelve un
Booleanque estruesi existe un tipo Coche con un precio menor a uno dado. - getMediaLitros: Devuelve un
Integerque es la media de capacidad del motor de los coches. - getCochesPorMarca: Devuelve una
List<Coche>con los tipos Coche que sean de la marca dada. - getCochesPorFecha: Devuelve un
Map<LocalDate,Set<Coche>>que agrupa los tipos Coche por fecha. - getNumeroCochesPorAnyo: Devuelve un
Map<Integer,Long>que cuenta el número de tipos Coche y los agrupa por año. - toString: Formatea el tipo en un String legible.
- hashCode: Generea un hashcode.
MÉTODOS USANDO STREAMS
- existeCochePrecioMenorStream: Devuelve un
Booleanque estruesi existe un tipo Coche con un precio menor a uno dado. - getMediaLitrosStream: Devuelve un
Integerque es la media de capacidad del motor de los coches. - getCochesPorMarcaStream: Devuelve una
List<Coche>con los tipos Coche que sean de la marca dada. - getCocheMasCaroPorMarca: Devuelve un tipo
Cocheel cual tiene la propiedad Precio más alta de entre todos los de la marca dada. - getFiltroPrecioOrdenadoPorMarca: Devuelve una
List<Coche>ordenada por orden natural y habiendo filtrado sus tiposCocheanteriormente por un precio dado (siendo mayor o menor que este). - getCochesPorFechaStream: Devuelve un
Map<LocalDate, Set<Coche>>agrupando los coches por su fecha de salida, es decir, la clave es la fecha y el valor el conjunto de coches de esa fecha. - getFabricantesDistintos: Devuelve una
List<String>que contiene los nombres de los fabricantes distintos sin repetición. - getCochesMasCarosPorFecha: Devuelve un
Map<LocalDate, Coche>donde la clave es la fecha de salida al mercado y el valor el coche más caro de esa fecha. - getCochesConMejorMotorPorFabricante: Devuelve un
SortedMap<String, List<Coche>>donde la clave es el fabricante y el valor es la lista de coches ordenados por la comparación de orden natural de los motores. - getCocheMasCaro: Devuelve una String con el fabricante, modelo y fecha del coche más caro de todos.
🔷 Tipo FactoriaCoches
Tipo para leer fichero CSV y parsear cadenas del CSV. MÉTODOS:
- leerCoches: Lee el fichero CSV y devuelve un tipo Concesionario.
- parseaCoches: Parsea un string tipo
"Fabricante;Modelo;Tamaño;Potencia;Capacidad;Eficiencia;Tipo;Precio;salidaMercado;listaColores"para crear un tipo Coche.
🟥 Tipos auxiliares
🔷 Motor
Tipo auxiliar que funciona como subtipo de los tipos Coche para definir el Motor de los coches.
PROPIEDADES:
| Propiedad | Tipo | Descripción |
|---|---|---|
| tamaño | Double |
consultable y modificable. |
| potencia | Integer |
consultable y modificable. |
| capacidad | Double |
consultable y modificable. |
| eficiencia | Integer |
consultable y modificable. |
CONSTRUCTORES:
- C1: Un parámetro por cada propiedad.
- C2: Constructor a partir de String.
CRITERIO DE IGUALDAD:
- Sirve para saber si dos objetos tipo Motor son iguales.
CRITERIO DE ORDENACIÓN:
- Compara propiedad por propiedad de dos tipos Motor.
OTRAS OPERACIONES:
- toString: Formatea el tipo en un String legible.
- hashCode: Generea un hashcode.
🔷 TipoCoche
Enumerado para el tipo de vehículo, si es Passenger o Car.
🔷 ColorCoche
Enumerado para los colores.
🟥 Tipos útiles
🔷 Checkers:
Métodos para lanzar excepciones con mensajes de error custom.
🔷 Fichero:
Métodos para leer ficheros y manejar sus datos.
🔷 Mostrar:
Método para mostrar n elementos de una colección.
🔷 Parsers:
Método para parsear algunos tipos.