¿( atributos publicos = mala programacion = sacrilegio) ?

Ignacio jorge
07 de Diciembre del 2005
Hola, gracias por hecharle un vistazo a mi post :)

Un doctor informatico me dice que en una clase un atributo nunca deve de ser publico.

Quisiera saber si alguien sabe de alguna clase de java desarrollada por sun o algo de similar prestigio, en la que use un atributo publico.

O en su defecto que me argumenteis porque un atributo puede ser publico.

Para finalizar estoy pensando en argumentarselo de esta manera:
Classe perro
public string hablar = " GUAUUUU"
demas cosas del la classe perro.
Fin clase perro

//Luego meto a unos perros en un mundo virtual y quiero que en vez de hacer guauuu esos perros (objetos) hagan GRRRR GUAU GUAUUU.
Si no pongo el atributo publico no puedo hacerlo de una forma sencilla.


Markoz
07 de Diciembre del 2005
Pues efectivamente, la sencilles es lo que saquificas...

Lo voy a codificar asi... imagina que tu eres un objeto... Y un atributo es tu pantalon. ¿Que pasaría si dejas que tu pantalon sea publico? Estoy seguro que no quisieras que nadie se metiera con ese atributo.

con los objetos pasa algo similar... solo ellos mismos, deben manipular sus propios atributos.

Por el bien de los pantalones.

x
07 de Diciembre del 2005
el chiste de la encapsulación es que no se acceda directamente a los atributos de una clase
si quieres modificar sus valores deberas crear métodos que te sirvan para eso
algo como

public void setAlgo(String texto)
{
this.hablar = texto; // con esto logras lo que quieres
}

cerodriguezl
07 de Diciembre del 2005
Lo mejor es dejar los atributos como private y proporcionar métodos public set y get para trabajar con esos atributos. De esta manera el exterior no tiene un control directo sobre los métodos de la clase y podría realizar validación extra sobre los valores asignados a los atributos.

chuidiang
07 de Diciembre del 2005
Hola:

El único argumento para dejar un atributo público es comodidad de programación. Sin embargo, todo lo demás son pegas.

En tu ejemplo, si haces "guau" protegido o privado y pones un metodo getGuau() que retorne eso "guau", es igual de sencillo cambiar guau por otra cosa. Lo único que te has ahorrado es hacer el método getGuau().

Sin embargo, pegas de hacerlo publico:
- La clase pude necesitar enterarse de los cambios en su atributo (para hacer cuentas o lo que sea). Si es publico, cualquiera puede cambiar su valor sin que la clase se entere. Si es privado y hay un metodo setValor() para cambiarlo, la clase, ademas de cambiar el valor, puede hacer otras cosas que sean necesarias.
- Por encapsulamiento. Si un atributo es un Date y las otras clase lo usan directamente, cambiar ese Date por otra cosa, te obliga a cambiar muchas lineas de codigo. Si haces Date privado y haces un getDate(), si luego necesitas cambiar Date por otra cosa, puede manntener el metodo getDate() y dentro del metodo arreglarte para construir el Date y devolverlo. Solo tienes que cambiar el metodo getDate() y no a todo el mundo que lo usa.

De todas formas, estos son buenas practicas de programacion y las buenas practicas de programacion SOLO sirven para programas que piensen reutilizarse o tocarse mas adelante por ti o por otras personas. Si vas a hacer un programa rapido para usarlo y luego nunca mas piensas modificarlo ni reutilizar partes de el ni nadie va a tener que revisar el fuente ni mantenerlo ni añadirle mejoras, entonces puedes progmarlo de la forma mas rapida y sencilla, es decir, variables globales, goto, atributos publicos y sin comentarios.

Se bueno.