domingo, 22 de abril de 2012

POO: El problema de los alumnos

En esta entrada trataremos sobre la resolución de un problema de programación orientado a objetos: "Defina una clase Alumnos con atributos nrocarnet, nombre y promedio. Luego muestre el mejor y peor alumno y el promedio de todos los alumnos."


La clase Alumno

En primer lugar, creamos una clase Alumno en donde programaremos los atributos de los alumnos que nos pide el problema: numero de carnet, nombre y promedio. No hay que confundirse con la clase Alumnos que nos dice el problema. Esta clase Alumnos se va a encargar de mostrar el mejor alumno, el peor alumno y el promedio de todos los alumnos. Para que la clase Alumnos pueda realizar estas operaciones, debe tener una colección de objetos de tipo alumno que es lo que vamos a definir en el código siguiente.
package Principal;

public class Alumno {
    private int nroCarnet;
    private String nombre;
    private double promedio;
    
    public int getNroCarnet() {
        return nroCarnet;
    }

    public void setNroCarnet(int nroCarnet) {
        this.nroCarnet = nroCarnet;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public double getPromedio() {
        return promedio;
    }

    public void setPromedio(double promedio) {
        this.promedio = promedio;
    }
}
Como podemos observar, definimos los atributos de la clase Alumno y sus métodos get y set respectivamente.

La clase Alumnos
package Main;

import java.util.ArrayList;

public class Alumnos {
    private ArrayList<Alumno> lista;
    
    public Alumnos(){
        this.lista = new ArrayList<Alumno>();
    }
    
    public ArrayList<Alumno> getLista(){
        return this.lista;
    }
    
    public void AgregarAlumno(Alumno alumno){
        this.lista.add(alumno);
    }    
        
    public double getPromedio(){
        double contador = 0.0;
        for (int i = 0; i < this.lista.size(); i++) {
            contador += this.lista.get(i).getPromedio();
        }
        return contador / this.lista.size();
    }
    public Alumno MejorAlumno(){
        Alumno alumno = new Alumno();
        alumno.setPromedio(-1.0);
        for (int i = 0; i < this.lista.size(); i++) {
            if(this.lista.get(i).getPromedio() > alumno.getPromedio()){
                alumno = this.lista.get(i);
            }
        }
        return alumno;
    }
    
    public Alumno PeorAlumno(){
        Alumno alumno = new Alumno();
        alumno.setPromedio(10000.0);
        for (int i = 0; i < this.lista.size(); i++) {
            if(this.lista.get(i).getPromedio() < alumno.getPromedio()){
                alumno = this.lista.get(i);
            }
        }
        return alumno;
    }
}

Como podemos observar, nuestra clase Alumnos contiene una colección de la clase Alumnos. Esta colección se encuentra implementada como un objeto ArrayList (Linea 6) y se inicializa dentro del constructor de la clase (Linea 9). Ademas, si queremos mostrar al usuario todos los alumnos de la clase debemos de implementar su método get para que pueda ser llamado desde Main (Lineas 12-14). Para poder agregar objetos a nuestra colección implementamos el método AgregarAlumno(Lineas 16-18). Finalmente, las operaciones del mejor alumno, el peor alumno y el promedio de los alumnos se implementan en las lineas siguientes (Lineas 20-47)

La clase Main

En nuestra clase principal Main declaramos e inicializamos un objeto Alumnos (Linea 4) y un objeto Alumno (Linea 5), luego creamos nuevos alumnos y los agregamos a la lista de alumnos (Lineas 6-23), luego mostramos todos los alumnos de la lista de alumnos (Lineas 25-32) y finalmente mostramos el resultado de las operaciones de mejor alumno, peor alumno y promedio de los alumnos que nos pide el problema (Lineas 33-39).
package Main;
public class Main {
   public static void main(String[] args) {
        Alumnos listaAlumnos = new Alumnos();
        Alumno alumno = new Alumno();
        alumno.setNombre("Juan Perez");
        alumno.setNroCarnet(001);
        alumno.setPromedio(15.00);
        listaAlumnos.AgregarAlumno(alumno);
        alumno = new Alumno();
        alumno.setNombre("Julio Paz");
        alumno.setNroCarnet(002);
        alumno.setPromedio(09.00);
        listaAlumnos.AgregarAlumno(alumno);
        alumno = new Alumno();
        alumno.setNombre("Maria Ramirez");
        alumno.setNroCarnet(003);
        alumno.setPromedio(13.00);
        listaAlumnos.AgregarAlumno(alumno);
        alumno = new Alumno();
        alumno.setNombre("Diana Martinez");
        alumno.setNroCarnet(004);
        alumno.setPromedio(16.00);
        listaAlumnos.AgregarAlumno(alumno);
        for (int i = 0; i < listaAlumnos.getLista().size(); i++) {
            alumno = listaAlumnos.getLista().get(i);
            System.out.println("Alumno " + (i+1));
            System.out.println("NroCarnet: " + alumno.getNroCarnet());
            System.out.println("Nombre: " + alumno.getNombre());
            System.out.println("Promedio: " + alumno.getPromedio());
            System.out.println("-----------------------------");
        }
        alumno = listaAlumnos.MejorAlumno();
        System.out.println("El mejor alumno es " + alumno.getNombre() + " con promedio " 
                + alumno.getPromedio());
        alumno = listaAlumnos.PeorAlumno();
        System.out.println("El peor alumno es " + alumno.getNombre() + " con promedio " 
                + alumno.getPromedio());
        System.out.println("El promedio de todos los alumnos es de " + listaAlumnos.getPromedio()); 
   }
}

No hay comentarios:

Publicar un comentario