> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud4-exercicios/relacions-entre-clases-dependencia-asociacion-composicion-e-agregacion.md).

# Relacións entre clases: Dependencia, asociación, composición e agregación

1. O obxectivo deste exercicio é implementar un sistema básico de xestión de vehículos utilizando programación orientada a obxectos en Java. Inicialmente, o sistema vai a representar vehículos que contan cunha matrícula, un modelo, unha marca e un motor..

   1. O motor representa o propulsor dun vehículo, e caracterízase por ter un tipo de combustible (que pode ser "Gasolina", "Diesel", "Eléctrico", ou outros) e un número de cabalos que indica a súa potencia. Esta clase debe implementar tanto un constructor vacío como un constructor que reciba os dous parámetros mencionados, así como métodos getters e setters para acceder e modificar os seus atributos. O motor conta tamén cun método `encender()`, que devolve un String que conten os datos do motor e indica que está acendido.
   2. Un vehículo debe ter un constructor que reciba como parámetros a matrícula, marca e modelo, e debe implementar métodos getters para todos os seus atributos, incluído o motor. O vehículo pódese `conducir()`. Cando un vehículo é conducido, o seu motor debe ser acendido. O método de conducir vai devolver unha cadea de texto que inclúa a matrícula, os datos do motor acendido, o modelo e a marca.

   Pídese:

   1. Deseña un diagrama UML que represente ambas clases e a súa relación
   2. Implementa as clases nun proxecto Java denominado `vehiculos`.
   3. Incorpora unha clase App na que instancies un vehiculo, e chames ao seu método conducir
2. A partir do implementado no deseño anterior, pídese incluir no sistema un vehículo específico: o coche.

   1. Un coche ten un numero de portas e un color. Consta de getters e setters, e debe de redefinir o método conducir empregando o xa definido no pai. Ademais, un coche ten un método calcular consumo medio,que vai a devolver o consumo medio a partir de unha distancia recibida
   2. Para o cálculo do consumo medio, o coche chama a unha clase CalculadoraConsumo, que consta de un método de clase calcular, que recibe como parámetro unha potencia de motor e unha distancia. O consumo vai a calcularse multiplicando o numero de cabalos do motor (potencia), por 0,05 pola distancia dividida entre 100.

   Pídese:

   1. Incorpora os novos elementos o diagrama de clases anterior
   2. Impleneta en Java as novas clases no proxecto
   3. Inclue na clase App a instanciación de un obxecto coche, a súa conducción e o calculo do seu consumo medio para 100 km.
3. A partir do implementado no deseño anterior, pídese incluir no sistema un vehículo específico: o camión.

   1. Un camión ten unha capacidade de carga e un Conductor asignado. Consta de getters e setters, e debe de redefinir o método conducir empregando o xa definido no pai e incluindo as características propias. Ademais, un coche ten un método asignar conductor, que vai a permitir que se lle estableza un conductor predeterminado para ese camión.
   2. Un conductor e unha persoa con nome e DNI, que ademáis conta con un permiso de conducir, que debe de ser de tipo C, C1 ou C+E, se non o é, debe de lanzarse unha excepción. A clase conductor conta con getters, setters e un método toString

   Pídese:

   1. Incorpora os novos elementos o diagrama de clases anterior
   2. Impleneta en Java as novas clases no proxecto
   3. Inclue na clase App a instanciación de un obxecto camión e un obxecto conductor, que se establecer como predeterminado. O camión debe de conducirse.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud4-exercicios/relacions-entre-clases-dependencia-asociacion-composicion-e-agregacion.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
