Dudas.

Iniciado por Gm3z, 27 Febrero 2012, 21:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Gm3z


Desarrollar una clase llamada Asignatura que:

•   Tenga dos atributos private de tipo int (el identificador) y de tipo double (la calificación).
•   Tenga un constructor con un parámetro de tipo int.
•   Tenga un getter para cada uno de los atributos.
•   Tenga un setter para la calificación.

Desarrollar una clase llamada Alumno que:

•   Tenga tres atributos private de tipo Asignatura.
•   Tenga un constructor con tres parámetros de tipo Asignatura que inicialice los tres atributos.
•   Tenga un constructor con tres parámetros de tipo int que inicialice los tres atributos.
•   Tenga un getter para cada uno de los atributos.

Desarrollar una clase llamada Profesor que:

•   Tenga un método ponerNotas que recibe un parámetro de tipo Alumno y que no devuelve nada. Pondrá una calificación aleatoria a cada una de las asignaturas del alumno.
•   Tenga un método calcularMedia que recibe un parámetro de tipo Alumno y devuelve un double.

Desarrollar una clase llamada Actividad1 que en su método main:

•   Cree e inicialice tres Asignaturas.
•   Cree un Alumno con las tres Asignaturas.
•   Cree un Profesor que le ponga calificaciones al Alumno y muestre por pantalla la media del Alumno.

Hola y deciros que muchas gracias por vuestra atención antes que nada.
Os pego aquí el enunciado que tengo sobre un ejercicio a realizar, lo que pasa que no se como empezar:

Mis dudas son las siguientes:
1º. Cada clase tiene que ir en un archivo distinto y luego llamarlo desde el proyecto princiapal , y si es correcto que es asi, seria como llamarlo directamente es decir Asignatura.getnombre() ¿?

2º. Estoy un poco perdido en que son los contrusctores,getter y setter.
Lo que yo entiendo por esos conceptos son:
-Constructor: no se muy bien como explicarlo.
-Getter: Es el que devuelve el valor como si fuera el return.
-Setter: El que modifica las variables no.

Es que no entiendo muy bien esos conceptos con lo cual no se como se estructuraría para poder empezar a montar el ejercicio.

Muchas gracias ^^



Proteus1989

Cada clase por separado como bien has dicho.

El getter es para recuperar un valor de una instancia y el setter para añadirlo.

Asignatura.getnombre() no exactamente. Te pongo un ejemplito de un main.

Código (java) [Seleccionar]
public class prueba{
public static void main(String adr[])
{
Asignatura a = new Asignatura(9);
}
}



El constructor es el método que se ejecuta cuando haces la instanciación (new Asignatura(paramentros))
Código (java) [Seleccionar]
public class Asignatura{
private int identificador;
private double calificacion;
public Asignatura(int valor)
{
identificador = valor;
}
}

Gm3z

Vale y el identificador se puede quedar vació o que valor debería darle?

En el apartado del main dice que cree e inicialice 3 asignaturas deberia hacerlo asi

Citarpublic class prueba{
public static void main(String adr[])
{
Asignatura a = new Asignatura(9);
Asignatura b = new Asignatura(9);
Asignatura c = new Asignatura(9);
}
}

El 9 porque es?

Puff bueno intentare montarlo a ver si me sale.

Gracias ^^

Proteus1989

El 9 es el valor que tu quieras pero cada asignatura debe tener un número diferente porque es el codigo identificador de la asignatura (de ahí el nombre).
Por ejemplo
Código (java) [Seleccionar]

public class prueba{
public static void main(String adr[])
{
Asignatura matematicas = new Asignatura(1); // La asignatura matematicas tiene un identificador único que es el 1
Asignatura lengua = new Asignatura(56); // Lo mismo para el resto
Asignatura fisica = new Asignatura(6);
}
}


Obviamente no puede quedar vacío porque es el identificador de la clase.

Gm3z

#4
Muchas gracias proteus ^^
vale lo del identificador ya lo he entendido =)
ahora luego me quedara darle valores a las asignaturas :D
Eso lo intentare, si tengo alguna duda la pondré

De verdad muchas gracias =)

Edito:
Citar•   Tenga un getter para cada uno de los atributos.
•   Tenga un setter para la calificación.

En esta parte que quiere decir que la tiene que tener un metodo para guardar el valor y otro para luego recogerlo o directamente lo hago en el principal?

Citarque recibe un parámetro de tipo Alumno o Asignatura
Como paso eso?
Seria Objeto.Variable = Valor ?

Proteus1989

Error Objeto.Variable = Valor
Las variables en java son privadas (o se intenta) por lo tanto no puedes acceder a variables de objetos como cualquier cosa.
Para eso existen los get & set.

valor = obj.getVariable();
obj.setVariable(valor);

Son los métodos get & set los encargados de gestionar las variables, y no la clase externa que "invoca" a Asignatura.

Gm3z

#6
Ok, creo que me he enterado ya con el get recojo el valor de esa variable para podre mostrarla y luego con el set le paso el valor y la modifico en el set que haya creado en la clase, supongo que sera asi no?

y eso de:
Citarque recibe un parámetro de tipo Alumno o Asignatura

Como se pasa esa variable tipo objeto?

Asi llevo el Código:
CitarParte de Actividad1:
import java.util.*;
public class Actividad1
{

/**
* @param args
*/
public static void main(String[] args)
{
String nombre,nombre1,nombre2,nombre3,aux;
Scanner leer = new Scanner (System.in);
Asignatura a = new Asignatura(1);
System.out.println("Introduce el nombre del Alumno");
nombre=leer.next();
System.out.println("Introduce el nombre de las Asignaturas");
nombre1=leer.next();
nombre2=leer.next();
nombre3=leer.next();
Alumno b = new Alumno (2,nombre1,nombre2,nombre3);
Profesor c = new Profesor (3);
c.PonerNotas(b.identificador);
}

}


CitarParte de Alumno:

public class Alumno
{
int identificador;
double Nota1,Nota2,Nota3;
private String Asignatura1,Asignatura2,Asignatura3;
public Alumno (int valor,String nombre1,String nombre2,String nombre3)
{
identificador = valor;
Asignatura1 = nombre1;
Asignatura2 = nombre2;
Asignatura3 = nombre3;
}
public String getAsignatura1()
{
return Asignatura1;
}
public String getAsignatura2()
{
return Asignatura2;
}
public String getAsignatura3()
{
return Asignatura3;
}
public double getNota1()
{
return Nota1;
}
public double getNota2()
{
return Nota2;
}
public double getNota3()
{
return Nota3;
}
}


En la parte del profesor no empezado ya que no se como se le pasan los atributos tipo Alumno.

Y la de Asignatura solo le puse el Identificador y la califacacion como pide en el enunciado.

Proteus1989

Para pasar objetos es igual que para pasar enteros
Código (java) [Seleccionar]

Alumno b = new Alumno();
Profesor a = new Profesor();
a.setAlumno(b);


Solo necesitas que tu profesor tenga un setAlumno() que le entre por parametro un Alumno
Código (java) [Seleccionar]

public setAlumno(Alumno alum)
{
miAlumno = alum;
}


Es un ejemplo al azar, no se si te piden eso, pero así es como se pasan objetos.
Por supuesto la variable miAlumno es una variable privada de la clase Profesor inicialmente sin valor (private Alumno miAlumno);

Gm3z

Uff. bueno entonces si yo lo que quiero es mandar al metodo ponerNotas para que me ponga las notas aleatoriamente.

deberia hacerlo asi:
Citarc.PonerNotas(b); // cuando c es el objeto de profesor
y en la clase profesor lo recibo asi:

public void PonerNotas (Alumno Alum)
{
aux=Alum;

}


y ya con la variable auxiliar ya puedo coger los set, get y demas de la clase Alumno?
para poder con el set modificar el valor de las notas?

Un saludo! y Gracias por aguantar ^^

Proteus1989

Puedes hacerlo directamente con Alum, no necesitas aux. Aux es necesario si quieres guardar dentro de profesor el alumno.