180 lines
11 KiB
Markdown
180 lines
11 KiB
Markdown
# 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.<br>
|
|
| ├─ **📦 fp.coches**: Paquete que contiene los tipos del proyecto.<br>
|
|
| | ├─ 📄 Coche.java<br>
|
|
| | ├─ 📄 Concesionario.java<br>
|
|
| | └─ 📄 FactoriaCoches.java<br>
|
|
| ├─ **📦 fp.coches.test**: Paquete que contiene las clases de test del proyecto.<br>
|
|
| | ├─ 📄 TestCoche.java<br>
|
|
| | ├─ 📄 TestConcesionario.java<br>
|
|
| | └─ 📄 TestFactoriaCoches.java<br>
|
|
| ├─ **📦 fp.common**: Paquete que contiene los tipos auxiliares del proyecto.<br>
|
|
| | ├─ 📄 ColorCoche.java<br>
|
|
| | ├─ 📄 Motor.java<br>
|
|
| | └─ 📄 TipoCoche.java<br>
|
|
| └─ **📦 fp.utiles**: Paquete que contiene las clases de utilidad.<br>
|
|
| ├─ 📄 Checkers.java<br>
|
|
| ├─ 📄 Fichero.java<br>
|
|
| ├─ 📄 Mostrar.java<br>
|
|
| └─ 📄 Parsers.java<br>
|
|
├─ **📁 data**: Contiene el dataset del proyecto.<br>
|
|
| └─ **📄 coches.csv**: Datos sobre coches de varios fabricantes.
|
|
<br>
|
|
└─ **📁 docs**: Contiene la documentación del proyecto.<br>
|
|
└─ **📄 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.PASSENGER`` a ``"Passenger"``.
|
|
- salidaMercadoParser: Convierte el formato ``YYYY-MM-dd`` a ``dd/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 ``Boolean`` que es ``true`` si existe un tipo Coche con un precio menor a uno dado.
|
|
- getMediaLitros: Devuelve un ``Integer`` que 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 ``Boolean`` que es ``true`` si existe un tipo Coche con un precio menor a uno dado.
|
|
- getMediaLitrosStream: Devuelve un ``Integer`` que 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 ``Coche`` el 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 tipos ``Coche`` anteriormente 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.
|