> 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/ud7-exercicios/clases-abstractas.md).

# Clases Abstractas

1. Implementa un módelo de datos de acordo as seguintes premisas:
   1. Un **Empleado** é un membro da empresa para o que se almacenan os atributos, nome, DNI, data de contratación e salario.
      1. Conta con getters e setters para recuperar e establecer os atributos, asi como os métodos calcularSalario(), obtenerTipoJornada() e calcularAntiguidade()
      2. Un empleado non é unha categoria instanciable dentro da empresa, pero a clase debe de contar con un constructor con todos os atributos
   2. Un **Manager** é un tipo de empleado que conta con un equipo a cargo. Conta con un número de persoas a cargo, e con un plus salarial de xestión.
      1. O constructor debe de recibir todos os atributos
      2. Conta con getters e setters para os seus atributos
      3. O salario do manager calculase como salarioBase + plusSalarial multiplicado polo numero de persoas a cargo, mais 50 euros por cada ano de antiguidade
      4. O tipo de xornada é completa
   3. Un **Programador** é un tipo de empleado que desenvolve programas informáticos. Utiliza unha linguaxe de programación coma linguaxe principal e traballa en varios proxectos ao mesmo tempo.
      1. O constructor debe de recibir todos os atributos
      2. Conta con getters e setters para os seus atributos
      3. O salario do programador calculase como salarioBase mais 20 euros por cada ano de antiguidade, mais un complemento de productividade de 200 euros se traballa en tres ou mais proxectos ao mesmo tempo
      4. O tipo de xornada é completa
   4. Un **ProgramadorJunior** é un tipo de empleado que está aprendendo a desenvolver programas informáticos. Ten unha linguaxe principal de programación e recibe mensualmente un número de horas de tutorización por parte de un Programador.
      1. O constructor debe de recibir todos os atributos agas o salarioBase, que será de 1000 euros.
      2. Conta con getters e setters para os seus atributos
      3. O salario do programador junior e o seu salario base
      4. O tipo de xornada e parcial
   5. Explica se hai alguna clase ou método que definises como abstracto.
   6. Crea unha clase App para probar o modelo anterior:
      1. Crea un Manager, un Programador e un ProgramadorJunior
         1. Crea un array de empregados e engade os tres. ¿é posible instanciar un empregado?
         2. Mediante un bucle, mostra os datos de cada un de eles (toString()) ademais de a antiguidade, o salario calculado e a xornada.
2. Implementa un modelo de acordo as seguintes premisas:
   1. Un **Dispositivo** é un elemento que se caracteriza por ter un numero de serie.&#x20;
      1. O constructor da clase recibe o número de serie
      2. Conta con getters e setters para os seus atributos
      3. Conta con un método encender() que vai a ter unha implementación particular en dispositivos concretos
   2. Unha **Lampara** é un tipo de dispositivo que se caracteriza por ter unha bombilla de un color e uns watios
      1. O constructor debe de recibir todos os atributos correspondentes&#x20;
      2. Conta con getters e setters para os seus atributos
      3. A lampara cando se acende, mostra por pantalla unha mensaxe de texto que di: "Lampara\[Color - Watios] esta encendida"
   3. Un **DispositivoRecargable** é un tipo de dispositivo que se caracteriza por poderse conectar á corrente para encher unha bateria.&#x20;
      1. O constructor debe de recibir todos os atributos correspondetes
      2. Conta con getters e setters&#x20;
      3. Conta con un método cargar() que vai a ter unha implementación propia en cada un dos dispositivos recargables que se poidan crear
   4. Un **Smartphone** é un tipo de dispostivo recargable que se caracteriza por ser de un fabricante en particular. Os fabricantes poden ser Samsung, Xiaomi e Apple.
      1. O constructor debe de recibir todos os atributos correspondentes
      2. &#x20;Conta con getters e setters para os seus atributos
      3. Cando se acende, mostra por pantalla a mensaxe "Movil \[fabricante] encendido"
      4. Cando se carga, o Smartphone vai a ir mostrando de 1 en 1 o incremento de nivel de batería ata chegar o 100%
   5. Unha **Tablet** é un tipo de dispostivo recargable que se caracteriza por ser de un fabricante en particular. Os fabricantes poden ser Samsung, Huawei e LG.
      1. O constructor debe de recibi todos os atributos correspondentes
      2. &#x20;Conta con getters e setters para os seus atributos
      3. Cando se acende, mostra por pantalla a mensaxe "Tablet \[fabricante] encendido"
      4. Cando se carga, a Tablet vai a nostrar a mensaxe: "Cargada ao 100% mediante carga rápida"
   6. Os Smartphones e as Tablets, asi como un subconxunto de dispositivos debe de ser **Conectables.** Os dispositivos conectables teñen dous comportamentos diferentes:
      1. **conectarWifi(),** que permite que se conecten a unha rede local inalambrica. Tanto tablets como smartphones mostraran en este caso unha mensaxe de "Conectado á Wifi"
      2. **conectarDatos(**), que permite no caso do movil conectarse mediante datos, mostrando á mensaxe de "Movil \[fabricante] conectado a datos" e no caso das tablets "Tablet \[fabricante] non ten tarifa de datos"
   7. Implementa unha clase **App** con un main, no que instancies un par de dispositivos de cada tipo. Define un array de Dispositivos, outro de DispositivosConectables e outro de elementos Conectables. Proba os comportamentos comunes de cada un dos elementos en cada caso.


---

# 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:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud7-exercicios/clases-abstractas.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
