Java - [Noob] ¿Privado, público, protegido, sin modificador?

 
Vista:
Imágen de perfil de Jhon

[Noob] ¿Privado, público, protegido, sin modificador?

Publicado por Jhon (14 intervenciones) el 28/05/2015 22:39:37
Hola gente.

Supongo que les parecerá un tema muy básico pero he leído mil cosas y sigo sin entender muy bien el tema.
En realidad no es Java, estoy viendo UML pero como sé que esto luego nos lo van a mandar a hacer en Java busco ayuda aquí (No vi un foro de UML aunque hay uno de pseudo).
La cosa es que no entiendo muy bien estas caracterísiticas de las clases. Por ejemplo, en un banco yo creo una clase "Cajero" (El empleado, no la máquina xD) por decir algo y una clase "cliente". El cliente tiene un atributo "saldo" que es la cantidad de dinero que posee.
¿Sería público o privado? Al profesor no le entiendo muy bien la explicación. Usa el término visibilidad y no sé si eso se refiere a la capacidad de modificarlo, por ejemplo.
Al mismo ejemplo él me dijo que lo pondría privado pero no me dijo mucho más (Supongo que porque lo debo investigar yo), pero yo quedo con la duda de si al ser privado la clase "Cajero" puede acceder a ese atributo o no.
¿Alguien podría, por favor, explicarme con más claridad estos conceptos? He leído mucho y no termino de aclararme.
Por ejemplo no entiendo que diferencia hay entre privado y protegido.

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 214
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

[Noob] ¿Privado, público, protegido, sin modificador?

Publicado por juanki (131 intervenciones) el 29/05/2015 10:37:31
Hola

private, public, etc tiene que ver con la programación orientada a objetos y el encapsulamiento. Cuando creas una clase y creas dentro una variable public, podrás acceder a ella desde fuera de la clase, y si la creas como private solo podrás acceder a ella desde dentro de la clase, por ejemplo, si tenemos una clase Animal:

1
2
3
4
5
6
7
class Animal {
	private String raza;
 
	public Animal(String raza) {
		this.raza = raza;
	}
}

Ahí el String raza es private, así que si intentamos:

1
2
Animal animal = new Animal("Perro");
animal.raza = "Gato";

Nos saldrá un error en la segunda línea por que es private y no podemos acceder a ella, en cambio, si lo cambias y lo pones como public, no tendrás problemas para acceder a esa variable.

Si quieres crearla private y poder acceder a ella, tendrás que declarar unos métodos public para permitirte leer y modificar su contenido (setters y getters).

Y tú dirás, bueno, y para qué tanto lio, lo hago todo public y escribo menos código. Pues no, al menos para mi no, lo correcto es hacerlo private y hacer unos métodos para acceder a ella. El motivo es la prevención de errores y la facilidad para mantener el código.

Aquí tienes una pequeña tabla con la visibilidad según el modificador:
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=665:public-private-y-protected-javatipos-de-modificadores-de-acceso-visibilidad-en-clases-subclases-cu00693b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Personalmente lo hago casi todo private, aunque yo java lo uso muy poco, empecé a trastear con java por el tema de Android, yo suelo programar en C++ y una de las cosas que me llamó la atención cuando empecé a ver código hecho en java era precisamente que hay mucha gente que lo hace todo public y no sé porque.

Una vez vi un comentario en un foro, bueno, creo que estaba en la firma de alguien, que decía algo así:
"java es un buen ejemplo de cómo debe ser un lenguaje de programación. Los programas en java son un buen ejemplo de como NO debe hacerse un programa". Y uno de los motivos pienso que es precisamente por la costumbre que veo de hacerlo todo public en java.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhon

[Noob] ¿Privado, público, protegido, sin modificador?

Publicado por Jhon (14 intervenciones) el 29/05/2015 22:31:17
Creo que lo pillo un poco más y lo que me has dicho más lo comentado TOM me ha dado pistas de por dónde enfocarme.
Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

[Noob] ¿Privado, público, protegido, sin modificador?

Publicado por Tom (1831 intervenciones) el 29/05/2015 10:53:21
Hay varios temas.
Lo primero es que aunque sea parecido no tienen por qué ser iguales las definiciones de visibilidad en UML y en Java.
Lo segundo es que necesitas comprender primero algunos aspectos básicos de la programación orientada a objetos (asuntos como clases, subclases -herencia-, implementación -objeto-, ...).

El que un objeto (o atributo) "visible" sea modificable o no depende de más cosas. Está claro que si no lo puedes "ver" no lo puedes cambiar, pero que lo tengas accesible no significa necesariamente que lo puedas modificar.

Probablemente, tendrás que leer más (aún). Básicamente un atributo privado solamente es accesible en la clase que lo declara, y uno protected lo es también en las subclases de ésta y en las clases que heredan de ella.

El ejemplo del banco no es demasiado bueno, porque se tiende a identificar al "cliente persona" con el "objeto cliente". La persona es un actor y el objeto es una entidad perteneciente al banco.

Por otra parte, el objeto Cajero no tiene por qué conocer el atributo Saldo del objeto Cliente. Lo que seguramente sí tendrá accesible serán las operaciones proporcionadas por Cliente que lo modificarán indirectamente (por ejemplo la operación ingreso() y la operación retirada()).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhon

[Noob] ¿Privado, público, protegido, sin modificador?

Publicado por Jhon (14 intervenciones) el 29/05/2015 22:31:48
Creo que me han puesto más en la pista. Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar