Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: jaivcaba en 21 de Octubre 2014, 07:15

Título: Ejercicio curso Java CU00641B Relación de uso entre clases...
Publicado por: jaivcaba en 21 de Octubre 2014, 07:15
PARA LA CLASE CASA
Código: [Seleccionar]
/**
 * Write a description of class Casa here.
 *
 * @author (jaivcaba)
 * @version (19/10/2014)
 */
public class Casa
{
    // instance variables - replace the example below with your own
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;

    /**
     * Constructor for objects of class Casa
     */
    public Casa()
    {
        // initialise instance variables
        superficie = 0.0;
        direccion = " calle _ carrera _";
        salonCasa = new SalonCasa ();
        cocina = new CocinaCasa ();
               
    }

    public void setSuperficie (double valorSuperficie){
        superficie = valorSuperficie;
    }
    public void setDireccion (String valorDireccion){
        direccion = valorDireccion;
    }
   
    public double getSuperficie (){return superficie;}
    public String getDireccion () {return direccion;}
}
   

PARA LA CLASE SalonCasa

Código: [Seleccionar]
/**
 * Write a description of class SalonCasa here.
 *
 * @author (jaivcaba)
 * @version (19/10/14)
 */
public class SalonCasa
{
    // instance variables - replace the example below with your own
    private int numeroDeTelevisores;
    private String tipoSalon;

    /**
     * Constructor for objects of class SalonCasa
     */
    public SalonCasa()
    {
        // initialise instance variables
        numeroDeTelevisores = 0;
        tipoSalon = "Desconocido";
    }
   
    public void setNumeroDeTVs (int valorNumeroDeTVs){
        numeroDeTelevisores = valorNumeroDeTVs;
    }
    public void setTipoSalon (String valorTipoSalon){
        tipoSalon = valorTipoSalon;
    }

    public int getNumeroDeTVs (){return numeroDeTelevisores;}
    public String getTipoSalon (){return tipoSalon;}
}

   


PARA LA CLASE CocinaCasa

Código: [Seleccionar]
/**
 * Write a description of class CocinaCasa here.
 *
 * @author (jaivacaba)
 * @version (19/10/14)
 */
public class CocinaCasa
{
    // instance variables - replace the example below with your own
    private boolean esIndependiente;
    private int numeroDeFuegos;

    /**
     * Constructor for objects of class CocinaCasa
     */
    public CocinaCasa()
    {
        // initialise instance variables
        esIndependiente = false;
        numeroDeFuegos = 0;
    }
   
    public void setEsIndependiente (boolean valorEsIndependiente){
        esIndependiente = valorEsIndependiente;
    }
    public void setNumeroDeFuegos (int valorNumeroDeFuegos){
        numeroDeFuegos = valorNumeroDeFuegos;
    }
   
    public boolean getEsIndependiente (){return esIndependiente;}
    public int getNumeroDeFuegos () {return numeroDeFuegos;}
}


Título: Re:Ejercicio CU00641B Relación de uso entre clases...
Publicado por: toni_apr en 21 de Octubre 2014, 20:37
Hola jaivcaba
Tu ejercicio está bien en parte.

En primer lugar, sin ser un error, en la clase SalonCasa, tienes los métodos del atributo 'numeroDeTelevisores' que has bautizado
setNumeroDeTVs
getNumeroDeTVs

acortando los nombres para que no sean tan largos. Tienes que acostumbrarte a que los setters y getters se compongan con el nombre del atributo anteponiéndoles los prefijos 'set' y 'get'.
Esta convención facilita las cosas al programador. Piensa que si dentro de un mes vuelves a este proyecto vas a tener que pararte a pensar porque son diferentes estos métodos a lo estipulado.
También que podías arreglarlo cambiando el atributo a
int numeroDeTVs
Y así los métodos son correctos.

En segundo lugar en la clase Casa te faltan los setters y getters de los atributos salonCasa y cocinaCasa que en lugar de ser de tipo primitivo como int o boolean son de tipo SalonCasa y CocinaCasa (tipos creados por nosotros en sus clases respectivas)

Estos métodos deberían ser:
public void setSalonCasa (SalonCasa salonCasa){
        this.salonCasa = salonCasa;     
    }
 public void setCocinaCasa (CocinaCasa cocinaCasa){
        this.cocinaCasa = cocinaCasa;
    }
public SalonCasa getSalonCasa (){return salonCasa;}
public CocinaCasa getCocinaCasa (){return cocinaCasa;}


Esto de trabajar con atributos de tipos que hemos creado nosotros con nuestras clases (o las que nos proporciona el API de java) lo vamos a ver a menudo a partir de ahora.
Así que debes empezar a practicar.

Saludos
Título: Re:Ejercicio CU00641B uso entre clases ... que indica this?
Publicado por: jaivcaba en 22 de Octubre 2014, 05:01
gracias por tomarte el tiempo y responder

aqui las correcciones.

para Casa

Código: [Seleccionar]
/**
 * Write a description of class Casa here.
 *
 * @author (jaivcaba)
 * @version (19/10/2014)
 */
public class Casa
{
    // instance variables - replace the example below with your own
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;

    /**
     * Constructor for objects of class Casa
     */
    public Casa()
    {
        // initialise instance variables
        superficie = 0.0;
        direccion = " calle _ carrera _";
        salonCasa = new SalonCasa ();
        cocinaCasa = new CocinaCasa ();
               
    }

    public void setSuperficie (double valorSuperficie){
        superficie = valorSuperficie;
    }
    public void setDireccion (String valorDireccion){
        direccion = valorDireccion;
    }
    public void setSalonCasa (SalonCasa valorsalonCasa){
        this.salonCasa = valorsalonCasa;
    }
    public void setCocinaCasa (CocinaCasa valorcocinaCasa){
        this.cocinaCasa = valorcocinaCasa;
    }
   
    public double getSuperficie (){return superficie;}
    public String getDireccion () {return direccion;}
    public SalonCasa getsalonCasa () { return salonCasa;}
    public CocinaCasa getcocinacasa (){return cocinaCasa;}
}
   

para SalonCasa

Código: [Seleccionar]
/**
 * Write a description of class SalonCasa here.
 *
 * @author (jaivcaba)
 * @version (19/10/14)
 */
public class SalonCasa
{
    // instance variables - replace the example below with your own
    private int numeroDeTelevisores;
    private String tipoSalon;

    /**
     * Constructor for objects of class SalonCasa
     */
    public SalonCasa()
    {
        // initialise instance variables
        numeroDeTelevisores = 0;
        tipoSalon = "Desconocido";
    }
   
    public void setNumeroDeTelevisores (int valorNumeroDeTelevisores){
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
    public void setTipoSalon (String valorTipoSalon){
        tipoSalon = valorTipoSalon;
    }

    public int getNumeroDeTelevisores (){return numeroDeTelevisores;}
    public String getTipoSalon (){return tipoSalon;}
}

   

He entendido tus recomendaciones... muchas gracias por responder.

Me pregunto porque en los métodos de los atributos cocinaCasa y salonCasa se debe escribir This.¿ podrian explicarme un poco mas acerca de esta orden?

gracias.
Título: Re:Ejercicio CU00641B Relación de uso entre clases...
Publicado por: toni_apr en 22 de Octubre 2014, 19:40
Hola jaivcaba
Ahora tu ejercicio de clases que utilizan objetos está perfecto. OK

En cuanto al uso de la palabra clave 'this', me he avanzado a la entrega CU00652B donde se explica su uso.
Un caso particular del uso de this es el que te puse en el código

public void setSalonCasa (SalonCasa salonCasa){
        this.salonCasa = salonCasa;     
    }

Como ves, el atributo de la clase se llama salonCasa, y el parámetro que recibe el método se llama igual. Pues bien, para que el compilador sepa quien es quien, le decimos.
El atributo de esta clase salonCasa (this.salonCasa) es igual al parámetro recibido que se llama también (salonCasa)

Este mismo método se puede usar sin 'this' haciendo los siguientes cambios
public void setSalonCasa (SalonCasa valorSalonCasa){
        salonCasa = valorSalonCasa;     
    }

Donde al no haber coincidencia de nombres no es necesario el uso de 'this'.
Aunque la siguiente signatura no solo es válida sino que se explica ella sola identificando quién es el atributo de la clase.

public void setSalonCasa (SalonCasa valorSalonCasa){
        this.salonCasa = valorSalonCasa;     
    }


Hay programadores que evitan si pueden el uso de this, y otros lo utilizan a la mínima oportunidad. Eso depende de cada cual

Saludos
Título: Re:Ejercicio CU00641B Relación de uso entre clases...
Publicado por: jaivcaba en 23 de Octubre 2014, 00:13
muchas gracias!! me ha quedado claro.