¿Diseño Diagrama De Clases?

Saludos :)

Tengo serias dudas con el diseño de un diagrama de clases correcto. Los atributos de una clase son privados, eso he leido, pero tambien he leido algo sobre los metodos SET y GET. El problema es que no se donde van, ni como plantearlos, en cuales metodos. Pongo un ejemplo de 2 clases que tengo.

Tengo la Clases Curso, que tiene como atributos privados: Codigo Adiestramiento, Nombre_Adiestramiento, Fecha_Inicio, Cantidad_Horas.

Tambien tengo la clase Asesor, la cual tiene como atributos Privados: Nombre Asesor, Codigo Asesor, Apellido Asesor

Cuales metodos corresponderian a esas 2 clases y de que manera usaria los metodos SET y GET en ese caso?.

Muchisimas Gracias +.+

Comments

  • Así es. Tus atributos dentro de la clase, sin uso exclusivo para el funcionamiento interno de esa clase deben ser privados. Hay algunos momentos en los que recomienda que sean protegidos (cuando hay que heredar el atributo a subclases), pero por lo general se ponen privados.

    Ahora, los métodos Set y Get (comunmente los verás en referecias como los Setters y Getters), sirven para modificar y obtener, respectivamente, el valor del atributo.

    Por ejemplo, tienes tu clase Asesor, de los cuales quieres exponer el nombre, obviamente sin exponer la propiedad. Por ejemplo, quiero obtener el nombre del Asesor para mostrarlo en una lista. Es tan simple como crear un método algo asi (sintaxis Java):

    public String getNombreAsesor(){

    return this.nombreAsesor; //dando por hecho que tu atributo se llama nombreAsesor

    }

    Ahora, obviamente no voy a estarle cambiando el nombre al Asesor, asi que no le elaboraré un Setter. Pero si alo mejor necesito cambiar la cantidad de horas. Entonces para eso si realizaré un Getter. Sería algo así:

    public void setCantidadHoras(int cantidadHoras){

    this.cantidadHoras = cantidadHoras; // dando por hecho que el atributo se llama cantidadHoras

    }

    No es estrictamente necesario que hagas Setter y Getter para todos tus atributos. Solo para los que los necesites. Y por lo general son de nivel de acceso público o de paquete.

    Los usos principales en Java es para la concurrencia. Por lo general los Setters (no tanto así los Getters), son métodos sincronizados.

    Nota: esto es Java! el concepto de Setter y Getter es el mismo para todos los lenguajes Orientados a objetos pero la sintaxis entre lenguajes cambia.

  • Hola Tarasios,

    Por lo que describes pareciera ser que estás trabajando con Java.

    Una primera apreciación diría que ambos métodos deberían ser públicos.

    Yo de Java no se. Independientemente del lenguaje los métodos Getxxx y Setxxx son los métodos de lectura y escritura para escribir y leer de los campos o atributos. Por lo general estos métodos cuentan con mecanismos de control para garantizar que tanto el valor a guardar (set) como al leer (get) permitan que no se altere o se pierda el valor del campo, y se evitan posibles inconsistencias o "valores no esperados". Por ejemplo, en ocasiones es deseable contar con un método Set para chequear que no se ingresen valores negativos, etc.

    Por lo general estos métodos get y set no se usan de forma directa. Sino de forma indirecta gracias a el uso de propiedades (property).

    Cuando hace algo como:

    variable = objeto.propiedad

    Indirectamente esta invocando al método get. Y cuando hace:

    objeto.propiedad = algo

    se invoca al método Set.

    Las propiedades, para hacerlo simple (y sin llegar a los tecnicismos), es como un campo público pero que está vinculada a un campo privado.

    Entendiendo esto es de esperarse, y es una buena práctica (de hecho, hay un patrón para esto), que los métodos set y get tengan una visibilidad privada. Puesto que como he dicho: se accede a los métodos (y en última al campo) mediante las propiedades (y éstas si son públicas).

    Ahora bien, como he dicho... yo de Java no se. Desconozco si en dicho lenguaje existe el concepto propiedad. De otra manera, intuyo y sería oportuno que fueran públicos.

    Espero que entienda.

    Saludos,

  • Para la clase curso los metodos serian:

    public int getCodigoAdiestra() { return this.codigoAdiestra; }

    public void setCodigoAdiestra(int codigo)

    { this.codigoAdiestra = codigo; }

    y asi con todos los demas.

Sign In or Register to comment.