Proyecto colonización del Sistema Solar

Crea un proyecto llamado SistemaSolar.

Se pide:

Clases a desarrollar

Persona

Las personas tendrán los siguientes atributos:

  • Nombre y apellidos (mismo atributo nombre).
  • País de procedencia.

En caso de ser Colono:

  • Los idiomas que habla (una lista de Strings).
  • Profesión.
  • Número de hijos (numHijos).

En caso de ser Piloto de nave espacial:

  • Horas de vuelo acumuladas (horasVuelo).
  • Un booleano para saber si sabe pilotar naves de aterrizaje/alunizaje (sabeAterrizar).

Debes añadir los métodos adicionales que estimes necesarios para poder ejecutar el programa conforme a los requerimientos que se solicitarán en la clase principal

Astro

Los astros tendrán los siguientes atributos:

  • Nombre.
  • Masa del cuerpo.
  • Diámetro medio.
  • Si es colonizable.
  • Número de naves asociadas (numNaves).
  • Lista de colonos (listaColonos).

Requisitos adicionales:

  • Al crear un astro colonizable debe tener al menos una nave; es decir, si en el constructor no le pasamos el número de naves, por defecto, le asociará una. En caso contrario, el número de naves que se le hayan pasado por parámetro al constructor. Un astro no colonizable también puede tener naves asociadas.
  • Un astro no colonizable no tendrá colonos (aunque podría tener en el futuro en caso de cambiar las condiciones).
  • Es posible que un astro colonizable no tenga colonos en el momento de crear dicho astro. Por tanto, la lista de colonos que le pasamos por parámetro estará vacía o se indicará null.

Planeta

Los atributos que tendrá son:

  • Distancia media al sol (distanciaSol).
  • Si tiene satélites (tieneSatelites).
  • Lista de satélites, en caso de tener (listaSatelites).

Nota: un planeta puede tener uno o más satélites orbitando a su alrededor; o no tener satélites. En caso de no tener, la lista de satélites estará vacía o sin inicializar (null). Por lo tanto, no será necesario pasar el booleano tieneSatelites en el constructor, porque lo sabremos al utilizar el constructor con los parámetros correspondientes.

Satelite

Los atributos que tendrá son:

  • Planeta al que pertenece.
  • Distancia media al planeta sobre el que orbita (distanciaPlaneta).

Nota: el planeta puede tener satélites (utiliza objetos de tipo satélite como atributo) y el satélite está asociado a un planeta (incluye un objeto de tipo planeta como atributo). Por lo tanto, uno debe ser creado antes que el otro y a continuación ser asociado, por lo que no sería necesario añadirlo al constructor.

Comportamiento de las clases

Debes añadir los métodos adicionales que estimes necesarios para poder ejecutar el programa conforme a los requerimientos que se solicitarán en la clase principal.

Los métodos redefinidos toString() deben mostrar mensajes exactamente iguales a los indicados en las imágenes de la sección clase principal.

Con respecto al comportamiento de los objetos, necesitaremos:

  • Un método abandonar, el cual disminuye el número de horas de vuelo de un piloto en las unidades pasadas por parámetro.
  • Un método agregar, el cual añade el número de horas de vuelo pasadas como parámetro a un piloto.
  • Un método abandonar, el cual reduce el número de naves de un astro en el valor pasado como parámetro.
  • Un método agregar, para añadir a un astro el número de naves parámetro.
  • Un método para añadir un idioma a un colono (añadirIdioma). El idioma se pasará como parámetro de tipo String.
  • Métodos para añadir satélites a los planetas (añadirSatelite).
  • Métodos para añadir y eliminar colonos de un astro (añadirColono y eliminarColono).
  • Método para mostrar la información del objeto redefiniendo el método disponible en la clase Object.
  • Método para comparar dos objetos implementando el interfaz Comparable. Solo en la clase Colono comparando colonos. Un colono será más valioso que otro si domina más idiomas. En caso de conocer el mismo número de idiomas, el que tenga más hijos. Si también hay igualdad, consideramos que son iguales.

EJEMPLO DE CREACIÓN DE TABLAS

-- Crear la base de datos
CREATE DATABASE SistemaSolar;

-- Usar la base de datos
USE SistemaSolar;

-- Crear tabla Persona
CREATE TABLE Persona (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    pais VARCHAR(100) NOT NULL
);

-- Crear tabla Colono
CREATE TABLE Colono (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_persona INT,
    idioma VARCHAR(100) NOT NULL,
    profesion VARCHAR(100) NOT NULL,
    numHijos INT,
    FOREIGN KEY (id_persona) REFERENCES Persona(id)
);