Autor Tema: cómo crear un atributo referenciado a un objeto Java diferencia tipos primitivos  (Leído 1561 veces)

pperboz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Buenas noches a todos.

Estoy empezando a la vejez a programar con Java y se me plantea una duda con una tarea que me han puesto en el curso. Os copio el enunciado.

Creamos una clase de objeto llamada “Movil” con los siguientes atributos:
........
.........
• sistemaOperativo: objeto So: con los atributos tipo de tipo texto y versión de tipo entero, ejemplo: Android, 12
• camaraFrontal: objeto Cam: con los atributos: resolución y número de cámaras de tipo entero y estabilizador de tipo verdadero y falso.
• camaraTrasera: objeto Cam: con los atributos: resolución y número de cámaras de tipo entero y estabilizador de tipo verdadero y falso.


Tengo claro como crear los atributos con datos primitivos. Pero estos atributos que hacer referencia a otros objetos no tengo ni idea de como meterle mano.

Cualquier ayuda será bien recibida.

Gracias
« Última modificación: 18 de Abril 2022, 20:00 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: NOVATO. Peleándome para crear un atributo referenciado a un objero
« Respuesta #1 en: 08 de Marzo 2022, 00:42 »
Buenas.

Es más intuitivo de lo que parece.
Veamos, un atributo sería la clase SistemaOperativo, que podría ser esta:
Código: [Seleccionar]
public class SistemaOperativo {

private String tipo;
private int version;

public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}

}

Y luego dos atributos para la camara delantera y para la trasera, que como sus atributos son los mismos, no hace falta escribir dos clases, nos bastaría con una sola clase Camara
Código: [Seleccionar]
public class Camara {

private int resolucion;
private int numCamaras;
private boolean estabilidador;

public int getResolucion() {
return resolucion;
}

public void setResolucion(int resolucion) {
this.resolucion = resolucion;
}

public int getNumCamaras() {
return numCamaras;
}

public void setNumCamaras(int numCamaras) {
this.numCamaras = numCamaras;
}

public boolean tieneEstabilidador() {
return estabilidador;
}

public void setEstabilidador(boolean estabilidador) {
this.estabilidador = estabilidador;
}

}

Fíjate que a estas clases no les he puesto constructor. Podríamos ponérselos, pero para este ejemplo no será necesario (aunque esto va un poco a gusto del programador)

El caso es que ahora hay que crear la clase Movil con estos objetos como atributos:
Código: [Seleccionar]
public class Movil {

private SistemaOperativo so;
private Camara camDelantera;
private Camara camTrasera;


}

No está completa, falta constructor y métodos get/set. Y es que aquí es cuando hay que parase a pensar que es lo que podemos necesitar.
Podemos hacer un constructor que reciba TODOS los parámetros necesarios para dar valores a todos los objetos que componen este teléfono móvil. Así que iremos construyendo cada atributo y les seteamos sus valores
Código: [Seleccionar]
public class Movil {

private SistemaOperativo so;
private Camara camDelantera;
private Camara camTrasera;

public Movil(String tipoSo, int version, int resolCamDelan, int numCamDelan, boolean estabilDelan,
int resolCamTras, int numCamTras, boolean estabilTras) {
//Construimos SO
so = new SistemaOperativo();
so.setTipo(tipoSo);
so.setVersion(version);
//Construimos camara delantera
camDelantera = new Camara();
camDelantera.setResolucion(resolCamDelan);
camDelantera.setNumCamaras(numCamDelan);
camDelantera.setEstabilidador(estabilDelan);
//Construimos la trasera
camTrasera = new Camara();
camTrasera.setResolucion(resolCamTras);
camTrasera.setNumCamaras(numCamTras);
camTrasera.setEstabilidador(estabilTras);
}

}

Pero puede que no siempre vayamos a querer usar un constructor al que haya que pasarle taaaantos parámetros.
Así que podemos darle un segundo constructor a nuestra clase, un constructor "por defecto" el cuál no recibe ningún parámetro.
Simplemente construimos los atributos sin darles valores, con la idea de que ya luego en el programa donde se utilice nuestra clase, ya le darán esos valores con unos setters.
Código: [Seleccionar]
public class Movil {

private SistemaOperativo so;
private Camara camDelantera;
private Camara camTrasera;

//Constructor que recibe valores
public Movil(String tipoSo, int version, int resolCamDelan, int numCamDelan, boolean estabilDelan,
int resolCamTras, int numCamTras, boolean estabilTras) {
//Construimos SO
so = new SistemaOperativo();
so.setTipo(tipoSo);
so.setVersion(version);
//Construimos camara delantera
camDelantera = new Camara();
camDelantera.setResolucion(resolCamDelan);
camDelantera.setNumCamaras(numCamDelan);
camDelantera.setEstabilidador(estabilDelan);
//Construimos la trasera
camTrasera = new Camara();
camTrasera.setResolucion(resolCamTras);
camTrasera.setNumCamaras(numCamTras);
camTrasera.setEstabilidador(estabilTras);
}

//Constructor que no recibe valores.
public Movil() {
so = new SistemaOperativo();
camDelantera = new Camara();
camTrasera = new Camara();
}

}

Y ahora, unos getters/setters.
Código: [Seleccionar]
public class Movil {

private SistemaOperativo so;
private Camara camDelantera;
private Camara camTrasera;

//Constructor que recibe valores
public Movil(String tipoSo, int version, int resolCamDelan, int numCamDelan, boolean estabilDelan,
int resolCamTras, int numCamTras, boolean estabilTras) {
//Construimos SO
so = new SistemaOperativo();
so.setTipo(tipoSo);
so.setVersion(version);
//Construimos camara delantera
camDelantera = new Camara();
camDelantera.setResolucion(resolCamDelan);
camDelantera.setNumCamaras(numCamDelan);
camDelantera.setEstabilidador(estabilDelan);
//Construimos la trasera
camTrasera = new Camara();
camTrasera.setResolucion(resolCamTras);
camTrasera.setNumCamaras(numCamTras);
camTrasera.setEstabilidador(estabilTras);
}

//Constructor que no recibe valores.
public Movil() {
so = new SistemaOperativo();
camDelantera = new Camara();
camTrasera = new Camara();
}

public SistemaOperativo getSo() {
return so;
}

public void setSo(SistemaOperativo so) {
this.so = so;
}

public Camara getCamDelantera() {
return camDelantera;
}

public void setCamDelantera(Camara camDelantera) {
this.camDelantera = camDelantera;
}

public Camara getCamTrasera() {
return camTrasera;
}

public void setCamTrasera(Camara camTrasera) {
this.camTrasera = camTrasera;
}

}

Hay que tener en cuenta que estos getters/setters trabajan también con objetos. Es decir, si quiero obtener la versión de sistema operativo de un móvil, tendré que pedirle al móvili que me retorne su so, y a este so pedirle que me retorne su versión.

Por ejemplo, si ejecutamos este programa de prueba:
Código: [Seleccionar]
public class Prueba {

public static void main(String[] args) {

Movil miMovil = new Movil("Android", 13, 600, 3, true, 400, 2, false);

System.out.println("Tipo de SO: " + miMovil.getSo().getTipo());
System.out.println("Versión: " + miMovil.getSo().getVersion());

}

}

En pantalla obtendremos los datos que hemos buscado:
Código: [Seleccionar]
Tipo de SO: Android
Versión: 13

Y bueno, creo que con esto queda explicado.
Si tuvieras más dudas, solo tienes que preguntar.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

pperboz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re: NOVATO. Peleándome para crear un atributo referenciado a un objero
« Respuesta #2 en: 08 de Marzo 2022, 10:13 »
Muchísimas gracias Kabuto. Lo leo con detenimiento y lo aplico.


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".