Skip to content

Proyecto de POO básica de la asignatura de Fundamentos de Programación (FP) de la ETSII (US). Se trata básicamente de un dataset de Coches y Concesionarios para practicar Factorías, Parsers, L/E de Ficheros, etc.

Notifications You must be signed in to change notification settings

Gallardo7761/proyecto-java-2c-ic2-1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.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.

About

Proyecto de POO básica de la asignatura de Fundamentos de Programación (FP) de la ETSII (US). Se trata básicamente de un dataset de Coches y Concesionarios para practicar Factorías, Parsers, L/E de Ficheros, etc.

Resources

Stars

Watchers

Forks

Languages