Por qué se declaran atributos de tipo private y no de tipo public

Iniciado por LoQueSeaPI, 20 Diciembre 2016, 18:26 PM

0 Miembros y 2 Visitantes están viendo este tema.

LoQueSeaPI

Hola a todos! Estoy aprendiendo java por mi propia cuenta durante las vacaciones.  ;-) Pero en este camino de aprendizaje me tope con los atributos de tipo private(dentro de otras clases que no son el main), y me gustaría saber porque se declaran de esta manera, y no de forma publica. Yo he llegado a la conclusión de que puede ser por seguir el paradigma, segmentar el programa, en métodos, pero no se si es por eso.  :-[

~ Yoya ~

Uno de los principios de la programacion orientada objeto se llama encasulamiento que tiene que ver con tu duda.

Cita de: http://es.ccm.net/contents/410-poo-encapsulacion-de-datos
El concepto de encapsulación

La encapsulación es un mecanismo que consiste en organizar datos y métodos de una estructura, conciliando el modo en que el objeto se implementa, es decir, evitando el acceso a datos por cualquier otro medio distinto a los especificados. Por lo tanto, la encapsulación garantiza la integridad de los datos que contiene un objeto.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

miltonprogramador

hola... es una respuesta muy concreta la que te brinda yoya... todas los atributos por defecto son de tipo publica, por lo que se puede llegar a ellos desde cualquier programa para obtener o alterar su valor. Colocas privada para asegurarte que sea su misma clase a través de sus métodos la que tenga acceso a esa variable. Por ejemplo: si haces una clase llamada combustible para un que será instanciada en una clase llamada carro, la clase combustible tendrá una propiedad llamada nivelDeCombustible, bueno a esa clase la colocas privada para que solo puedas modificarla desde la instancia creada utilizando los métodos get y set en la clase cumbustible... espero no haberte confundido más jejeje...
Aprendiendo de los mejores se llega a ser uno de ellos...

engel lex

Citarpor lo que se puede llegar a ellos desde cualquier programa

no desde cualquier programa... será desde cualquier clase o sección del codigo... los otros programas no pueden acceder a tu programa así como así
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

4dr14n31t0r

Cita de: miltonprogramador en 21 Diciembre 2016, 14:20 PMtodas los atributos por defecto son de tipo publica, por lo que se puede llegar a ellos desde cualquier programa para obtener o alterar su valor.
Te equivocas, por defecto son de tipo "package", que significa que ese atributo (o metodos, si estos tampoco se declaran con public o private o protected) puede ser accedido desde cualquier clase que este dentro del mismo paquete. Una cosa curiosa del tipo de dato "package" es que la unica forma de declararlo como tal es omitiendo el tipo de acceso (public, private o protected, como ya he dicho). De modo que si no se escriben ninguna de estas 3 palabras solo entonces es package.
Cita de: QueenAlejandra en 20 Diciembre 2016, 18:26 PMme gustaría saber porque se declaran de esta manera, y no de forma publica. Yo he llegado a la conclusión de que puede ser por seguir el paradigma, segmentar el programa, en métodos, pero no se si es por eso.  :-[
Lo normal no solo es declararlo de forma private los atributos sino ademas crear un metodo getAtributo() y setAtributo() para obtener el atributo y cambiar el valor del mismo.
Antes que nada tienes que entender que java es completamente POO, y la POO se hizo mas que nada para trabajar en equipo. Cada programador crea una clase de forma independiente y al final las combinan todas para formar el programa mas facilmente.
La idea mas que nada es la siguiente: Imaginate que en un proyecto ENORME se utiliza en muchiiisimos sitios un atributo de una clase. Ahora imaginate que, por alguna razon, cada vez que se accede a dicho atributo necesitas ejecutar una funcion o cambiar algunos datos de la misma clase. Si el atributo fuera publico esto seria un problemón, ya que tienes que adaptar el codigo de 300 clases en donde quiera que sea que se haya utilizado ese atributo para cada vez que lo haga hacer lo que sea que se tenga que hacer. Bueno pues si en vez de eso hicieras el atributo privado e hicieras los metodos getter y setter (asi es como se le llaman a los metodos setAtributo y getAtributo) entonces solamente tendrias que modificar el metodo getter y voilá, ya está hecho.
También es util para control de errores: supongamos que tienes un atributo de tipo int al que solo te interesa que se le de un valor entre 5 y 20. Entonces dentro del setter tendrias que mostrar un mensaje de error y terminar el programa si el valor que se le pasa por parametro no cumple la condicion de que esté entre 5 y 20. (No se si habrás visto el control de errores con el bloque try catch y los throw que sirven para controlar cuando se produce un error como meter un valor que no este entre 5 y 20 en este caso, pero lo suyo seria utilizar throw)