Programming

T05-001-04 Métodos constructores.

Enunciado

Sobrecarga del constructor

El constructor de una clase, al igual que cualquier otro método, puede estar sobrecargado. Eso significa que es posible disponer de métodos con el mismo nombre, siempre que se diferencien en el número o en el tipo de los parámetros.

Ejemplo:

public class OOP {

    public static void main(String[] args) {
        SubClase miObj1 = new SubClase(8, 3);
        System.out.println(miObj1.suma());
        SubClase miObj2 = new SubClase();
        System.out.println(miObj2.suma());
    }

}

class SubClase {

    int x, y;

    public SubClase() {
        x = 5;
        y = 7;
    }

    public SubClase(int _x, int _y) {
        x = _x;
        y = _y;
    }

    public int suma() {
        return x + y;
    }
}

Nota: si dos métodos de la misma clase únicamente se diferencian en el nombre de los parámetros, se generará un error.

Ejercicio

Partiendo de la clase Modulo que soluciona el último ejercicio, combina un constructor de clase sin parámetros con otro constructor de la clase con parámetros.

La aplicación pedirá 3 veces el nombre del módulo y la calificación. Con las siguientes directrices:

  • Si el nombre que facilita el usuario está vacío, no se le solicitará la nota y se invocará el constructor sin parámetros, que inicializará las propiedades del objeto a "Programacion" y 8.
  • Si el nombre que facilita el usuario no está vacío, se solicitará al usuario la nota hasta que suministre una nota >= a la calificación máxima permitida. A continuación, se invocará el constructor con parámetros, el cual, inicializará las propiedades del objeto con los datos suministrados por el usuario.

Para evitar que entre los efectos indeseables de combinar sc.nextLine() con sc.nextInt() entre distintas ejecuciones del bucle que solicita los datos de los 3 módulos, introduce al final de las sentencias que se ejecutan en el caso de que la longitud del nombre sea mayor que 0:

sc.nextLine();

Para saber si un nombre de módulo está vacío o no, podemos utilizar el método length() de la clase String, de la siguiente forma:

if (nombre.length() > 0)

 

Solución


											
package oop; import java.util.Scanner; public class OOP { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String nombre; int nota; Modulo miModulo; for (int i = 0; i < 3; i++) { System.out.println("Escriba el nombre del modulo: "); nombre = sc.nextLine(); if (nombre.length() > 0) { do { System.out.println("Escriba la nota del modulo: "); nota = Integer.parseInt(sc.nextLine()); } while (nota > Modulo.calificacionMaxima()); miModulo = new Modulo(nota, nombre); } else { miModulo = new Modulo(); } System.out.println("Nombre del modulo: " + miModulo.nombre); System.out.println("Nota: " + miModulo.nota); System.out.println("Calificacion textual: " + miModulo.calificacion()); } } } class Modulo { int nota; String nombre; public Modulo() { nota = 8; nombre = "Programacion"; } public Modulo(int _nota, String _nombre) { this.nota = _nota; this.nombre = _nombre; } public String calificacion() { String notaTextual; switch (nota) { case 0: case 1: notaTextual = "Muy deficiente"; break; case 2: case 3: case 4: notaTextual = "Insuficiente"; break; case 5: notaTextual = "Suficiente"; break; case 6: notaTextual = "Bien"; break; case 7: case 8: notaTextual = "Notable"; break; case 9: case 10: notaTextual = "Sobresaliente"; break; default: notaTextual = "Fuera de rango"; } return notaTextual; } static int calificacionMaxima() { return 10; } }

Input

Bases de Datos 13 7 Sistemas 12 5
Sistemas 12 5 Bases de Datos 13 7

Output

Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Bases de Datos Nota: 7 Calificacion textual: Notable Escriba el nombre del modulo: Nombre del modulo: Programacion Nota: 8 Calificacion textual: Notable Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Sistemas Nota: 5 Calificacion textual: Suficiente
Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Sistemas Nota: 5 Calificacion textual: Suficiente Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Bases de Datos Nota: 7 Calificacion textual: Notable Escriba el nombre del modulo: