Ejercicios POO

Índice

Person

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea una clase Person, que debe comportarse de la siguiente manera:

1
2
3
4
Person ada = new Person("Ada Lovelace", "24 Maddox St. London W1S 2QN");
Person javier = new Person("Javier García", "Calle Mayor 15 12002 Castellón");
System.out.println(ada);
System.out.println(javier);
1
2
3
4
Ada Lovelace
  24 Maddox St. London W1S 2QN
Javier García
  Calle Mayor 15 12002 Castellón

Esta clase sólo tiene dos campos o atributos: name y address

Es por ello que debemos crear dos variables con el modificador private para que no se pueda acceder a ellas desde fuera de la clase.

1
2
3
4
public class Person{
	private String name;
	private String address;
}

Ahora nos hemos de plantear qué datos son obligatorios para crear un objeto Person. Como mínimo se debe proporcionar el name al crear una instancia de la misma. Es por ello que creamos un constructor que tiene como parámetro name

1
2
3
public Person(String name){
    this.name = name;
}

En este código se introduce la palabra reservada this que hace referencia a la propia clase. Es decir this.name se refiere a la variable name de la clase.

Si el atributo address no se informa en el constructor, debe haber un setter que nos permita fijar el dato:

1
2
3
public void setAddress(String address){
    this.address = address;
}

Por el contrario, el atributo name de una persona vamos a suponer que no se puede cambiar. En este caso no habría setter

Nos podemos plantear si es conveniente crear un constructor para los dos parámetros. De esta forma sería más fácil instanciar objetos de la clase:

1
2
3
4
Person(String name, String address){
    this.name = name;
    this.address = address;
}

Para cada uno de los atributos de la clase, hemos de crear su correspondiente getter

1
2
3
4
5
6
public String getName() {
    return name;
}
public String getAddress() {
    return address;
}

También queremos que los objetos de clase Person se impriman de una forma determinada:

1
2
Ada Lovelace
  24 Maddox St. London W1S 2QN

Para lograrlo, hemos de sobrescribir (ya lo veremos más adelante) el método toString que pertenece a la clase Object de la que todas las clases java heredan por defecto.

1
2
3
4
@Override
public String toString(){
    return this.name + "\n\t" + this.address;
}

Vamos a crear una clase para crear varias instancias de Person

1
2
3
4
5
6
7
8
9
public class Main {
    public static void main(String[] args) {
        Person ada = new Person("Ada Lovelace", "24 Maddox St. London W1S 2QN");
        Person javier = new Person("Javier García");
        javier.setAddress("Calle Mayor 15 12002 Castellón");
        System.out.println(ada);
        System.out.println(javier);
    }
}

En todas las clases implementa el método toString() En todos los ejercicios crea una clase Main y modela varios objetos. Después imprímelos.

Ejercicio 1

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea una clase que modele los distintos ordenadores de una tienda de informática. Piensa qué atributos, qué constructores debes crear y qué setters y getters.

Ejercicio 2

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea una clase que represente a un aparato de aire acondicionado. Este aparato tiene un nombre, y una temperatura máxima y mínima. Además tiene dos botones para subir y bajar el aire de grado en grado pero sin sobrepasar nunca de los límites

Ejercicio 3

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea una clase llamada Cuenta que tendrá los siguientes atributos: titular y cantidad (puede tener decimales).

El titular será obligatorio y la cantidad es opcional. Crea dos constructores que cumplan lo anterior.

Crea sus métodos getter, setter y toString.

Tendrá dos métodos especiales:

  • ingresar(double cantidad): se ingresa una cantidad a la cuenta, si la cantidad introducida es negativa, no se hará nada.
  • retirar(double cantidad): se retira una cantidad a la cuenta, si restando la cantidad actual a la que nos pasan es negativa, la cantidad de la cuenta pasa a ser 0.

Ejercicio 4

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea una clase llamada Autor con los campos Nombre y Fecha de nacimiento. Crea la entidad Tema con un atributo para el nombre del tema

Después crea una clase Libro con los campos Título, Autor y Páginas. Además tendrá una lista para poder almacenar los temas de los que trata el libro.

Por último crea una clase MainLibro en la que deberás crear varios autores, temas y libros

Ejercicio 5

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea las clases necesarias para poder representar el siguiente diagrama entidad-relación

image-20230130190129052

Ejercicio 6

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea las clases necesarias para poder representar el siguiente diagrama entidad-relación

image-20230130190242249

Ejercicio 7

(ra2.a, ra2.b, ra2.f, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e)

Crea las clases necesarias para poder representar el siguiente diagrama entidad-relación

image-20230130190423703

Laboratorio

(ra2.a, ra2.b, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e, ra4.g)

Vamos a crear una clase Lab que implemente un laboratorio. Éste tiene un nombre, un taller, una capacidad máxima, la hora y día en que se imparte, un profesor que lo imparte y una lista de estudiantes que asisten.

Diseña la clase. Piensa en los atributos, constructores y setters y getters necesarios. Luego crea una clase llamada MainLab donde crees varias instancias de la clase Lab

Máquina expendedora

(ra2.a, ra2.b, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e, ra4.g)

Vamos a implementar un máquina expendedora de tiques. Los tiques tienen un precio. La máquina tiene un cajón que recoge los importes de los tiques.

El cliente va introduciendo dinero y si pulsa el botón Sacar tique se le expenderá el tique, siempre que haya introducido una cantidad igual o mayor que el importe. Este método debe imprimir el tique y devolver en un String la cantidad de billetes y monedas mínimas para dicha devolución:

Por ejemplo, si el tique vale 1,20 € y el usuario introduce 5€, le debe devolver 1 moneda de 2€, 1 moneda de 1€, 1 de 0,50€, 1 de 0,20€ y 1 de 0,10€. Además ingresará en el cajón el importe del tique.

Si no hay suficiente dinero en el cajón, le debe decir Introduzca el importe exacto.

Implementa la clase MaquinaExpendora Piensa en los constructores, setters y getters necesarios

Sistema de subastas

(ra2.a, ra2.b, ra2.h, ra2.i, ra4.a, ra4.b, ra4.c, ra4.d, ra4.e, ra4.g)

Se pretende modelar un sistema de subastas que funciona de la siguiente manera:

La casa de subastas planifica la subasta en un día en concreto de una serie de artículos organizados en lotes.

De cada artículo se debe almacenar su nombre y el precio. Del lote se desea conocer su número y el precio de salida.

Llegado el día de la subasta los pujadores (Nombre) realizan pujas de dinero sobre cada uno de los lotes. Cuando se finaliza la subasta, el lote se adjudica al pujador con la puja más alta.

El sistema debe:

  • poder generar una o más subastas
  • añadir lotes de artículos a las subastas
  • gestionar las pujas y los pujadores
  • cerrar la subasta
  • imprimir una relación de los lotes que se han adjudicado a los pujadores una vez cerrada la subasta. Si algún lote no tuviese puja, se debe imprimir “No adjudicado”

Implementa este sistema de subastas. Piensa en los constructores, setters y getters necesarios