Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Gm3z en 27 Febrero 2012, 21:33 pm



Título: Dudas.
Publicado por: Gm3z en 27 Febrero 2012, 21:33 pm

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 ^^




Título: Re: Dudas.
Publicado por: Proteus1989 en 27 Febrero 2012, 21:49 pm
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
  1. public class prueba{
  2. public static void main(String adr[])
  3. {
  4. Asignatura a = new Asignatura(9);
  5. }
  6. }


El constructor es el método que se ejecuta cuando haces la instanciación (new Asignatura(paramentros))
Código
  1. public class Asignatura{
  2. private int identificador;
  3. private double calificacion;
  4. public Asignatura(int valor)
  5. {
  6. identificador = valor;
  7. }
  8. }


Título: Re: Dudas.
Publicado por: Gm3z en 27 Febrero 2012, 21:57 pm
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

Citar
public 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 ^^


Título: Re: Dudas.
Publicado por: Proteus1989 en 27 Febrero 2012, 22:24 pm
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
  1. public class prueba{
  2. public static void main(String adr[])
  3. {
  4. Asignatura matematicas = new Asignatura(1); // La asignatura matematicas tiene un identificador único que es el 1
  5. Asignatura lengua = new Asignatura(56); // Lo mismo para el resto
  6. Asignatura fisica = new Asignatura(6);
  7. }
  8. }

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


Título: Re: Dudas.
Publicado por: Gm3z en 27 Febrero 2012, 23:27 pm
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?

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


Título: Re: Dudas.
Publicado por: Proteus1989 en 28 Febrero 2012, 02:44 am
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.


Título: Re: Dudas.
Publicado por: Gm3z en 28 Febrero 2012, 15:49 pm
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:
Citar
que recibe un parámetro de tipo Alumno o Asignatura

Como se pasa esa variable tipo objeto?

Asi llevo el Código:
Citar
Parte de Actividad1:
Código:
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);
}

}

Citar
Parte de Alumno:
Código:
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.


Título: Re: Dudas.
Publicado por: Proteus1989 en 28 Febrero 2012, 19:05 pm
Para pasar objetos es igual que para pasar enteros
Código
  1. Alumno b = new Alumno();
  2. Profesor a = new Profesor();
  3. a.setAlumno(b);
  4.  

Solo necesitas que tu profesor tenga un setAlumno() que le entre por parametro un Alumno
Código
  1. public setAlumno(Alumno alum)
  2. {
  3. miAlumno = alum;
  4. }
  5.  

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);


Título: Re: Dudas.
Publicado por: Gm3z en 28 Febrero 2012, 20:56 pm
Uff. bueno entonces si yo lo que quiero es mandar al metodo ponerNotas para que me ponga las notas aleatoriamente.

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

Código:
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 ^^


Título: Re: Dudas.
Publicado por: Proteus1989 en 28 Febrero 2012, 21:12 pm
Puedes hacerlo directamente con Alum, no necesitas aux. Aux es necesario si quieres guardar dentro de profesor el alumno.


Título: Re: Dudas.
Publicado por: Gm3z en 28 Febrero 2012, 22:07 pm
Vale , muchas gracias proteus!
Hice ya la practica ;)

Ahora a por la siguiente.

Un saludo!


Título: Re: Dudas.
Publicado por: Proteus1989 en 29 Febrero 2012, 07:38 am
Me alegra :)


Título: Re: Dudas.
Publicado por: Gm3z en 29 Febrero 2012, 14:19 pm
Citar
Cree e inicialice tres Asignaturas.
Cuando dice esto, tengo que crear 3 objetos o con en la misma clase le paso el nombre de 3 variables recogidas en el main y se la paso a la clase?


Título: Re: Dudas.
Publicado por: Proteus1989 en 29 Febrero 2012, 15:09 pm
Así
http://foro.elhacker.net/java/dudas-t354870.0.html;msg1723457#msg1723457


Título: Re: Dudas.
Publicado por: Gm3z en 29 Febrero 2012, 16:02 pm
Okis muchas gracias ;)
entonces tengo que cambiarlo.


Título: Re: Dudas.
Publicado por: Gm3z en 12 Marzo 2012, 17:07 pm
•   Tenga un método aceptarCoche que recibe un parámetro de tipo Coche y la avería asociada. El garaje solo podrá atender a un coche en cada momento. Si ya esta atendiendo uno, que devuelva un false.

Hola, este es el apartado de una practica que estoy realizando , y queria saber si hay alguna funcion predefinida para comprobar si dicha funcion tiene algun parametro? y si no que me orientarais un poco.