#1077 Dudo al menos de la lista por ciudades, que este mi profesora que solo lo utilizo para decirnos que existía y que nos daban repositorios si nos enlazabamso con ella...
#1089 #1090 lo veo perfectamente valido... salvo que estes comprobando con 256 porque eso muy seguramente implique hacer un casting a int en cada iteracion, y usar char en lugar de unsigned char para asegurarse de tener rango de 0 a 255 y no -127 a 128.
De hecho en muchos lenguajes/librerias se hace un typedef unsigned char byte cuando se trabaja con datos binarios a pelo.
Vengo aquí a salsear un poco el foro porque he estado conversando acerca de los métodos get y set en el paradigma de la POO
Yo estoy EN CONTRA de usar métodos get y set. ¿Por qué?
- Si usas estos métodos en tu código de grandes dimensiones y el día de mañana cambia dicha variable (por ejemplo, antes te daban unas coordenadas y eso lo cogías con el get, y ahora en vez de darte la coordenada directamente te dan 2 rectas de las cuales tienes que calcular el punto donde se cruzan...) mejor pegarse un tiro xD
¿Y vosotros? ¿Estáis a favor o en contra?
#1094 me colé con las 2 primeras xD ahora mejor.
BTW, sigo bien problemas a usarlos. Si yo desde cualquier clase puedo hacer un get/set de otra clase en vez de seguir un esquema... no sabría explicarme, "piramidal", y piramidal tampoco sería la palabra exacta. Digamos que yo tengo una clase principal, en la cual tengo, pongamos, otros 5 tipos de clases, y dentro de cada tipo otros 5 más. Por qué usar un método get de la última de ellas y no ir invocando métodos hasta llegar a dicha clase y que haga/devuelva lo que le he pedido?
#1093 por qué a favor?
#1092 Yo no sé si estoy en contra o a favor [diría más en contra] pero me parece una gran contradicción que las variables estén privadas me digan que eso es para protegerlas y movidas varias y luego plantemos el get y el set... no es muy coherente
#1096 eso es lo que me han enseñado a mí y por eso abro el debate. Si me dicen que privado y luego pongo un get para qué me sirve? para eso hago todo public xD
#1097 te doy la razón, pero no siempre se diseña todo perfecto a la primera. Pues anda que no se han cometido cagadas a lo largo de la historia de la informática y luego para cambiarlo era imposible xD
#1098 Soy de 1º de DAW y no tengo ni idea. Así que igual suelto alguna barbaridad. Pero la razón de poner una clase privada y luego hacer getters y setters está en que puedes controlar los valores que se asignan a las variables. Si pones la clase pública, se podrían meter valores que no te interesan.
#1097 Supongo que por esa justificación también debes usar los gets y los sets dentro de tu propia clase aunque puedas acceder a los datos privados por ser miembro de esa clase ¿no? [excepto en los propios get y set claro está, pero en otras funciones si las utilizas]
#1098 El tema es que hay muchas situaciones en las que es recomentable / casi necesario utilizar setters y/o getters y los inconvenientes son practicamente nulos (que en algunos lenguages es un coñazo escribirlos).
Ese caso que has puesto antes es una castaña. Porque se le puede dar la vuelta y el caso contrario es MUCHO más común (ej: quieres cambiar como almacenas una propiedad en una clase y como no tienes setters / getters tiene que perseguir todos los usos de esa clase en todo el código)
Esto es un no-debate. No hay inconvenientes y aunque en un determinado momento no veas la ventaja de utilizar setteres y getters, si en el futuro necesitas validar los valores que puedes asignar / devolver o algo así vas a sudar tinta por no hacer las cosas bien.
#1099 si los atributos de la clase son privados y los métodos get y set públicos vas a poder seguir cometiendo errores, pero en vez de hacer objeto.atributo para acceder harás objeto.métodoGet(). No se si me explico xD
#1100 si la clase la diseñas y no la vuelves a modificar no los necesitas. También puedes diseñarla con ellos directamente. Vamos, yo los he usado para acceder a los atributos de su propia clase, así si el día de mañana debo modificarlos, simplemente cambio get/set (los cuales son privados) y ea.
#1101 el caso que tú dices. si yo por ejemplo quiero cambiar como almaceno una propiedad de una clase, mi clase tendrá un método llamado almacenar() donde le paso por parámetros lo que quiero guardar, y simplemente tendré que modificar dicho método. Si en vez de usar almacenar, uso get y set, a lo mejor tengo 100 gets/sets repartidos por mi código, telita para cambiarlos. Creo que eso querías decir, a lo mejor no lo entendí bien.
Dices por ejemplo que necesito validar valores que puedo asignar o devolver. ¿Puedes explicarlo un poco más?
#1102 Creo que el problema es que entendeis que un setter / getter sólo puede ser:
public class Radio {
private int volumen;
public void setVolumen(int vol) {
this.volumen = vol
}
public int getVolumen() {
return this.volumen;
}
}
pero la idea es que pueden necesitar ser:
public class Radio {
private final int MAX_VOL = 11;
private int volumen;
public void setVolumen(int vol) {
this.volumen = max(vol, MAX_VOL);
}
public int getVolumen() {
return this.volumen;
}
}
Imaginate que necesitas limitar el volumen máximo de Radio y no tienes el setter. Tienes que ir añadiendo conocimiento sobre Radio a la clase User, o a la clase MandoDistancia, etc...
#1094 me habia olvidado que en C/C++ los chars siguen siendo de 8 bits... :p
https://msdn.microsoft.com/en-us/library/x9h8tsay.aspx
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Los que estais en contra de los get/set, sinceramente no habeis trabajado en un proyecto no trivial en vuestra vida.
#1105 Dime un solo caso en el que escribir un getter/setter te suponga un problema más allá de gastar 100 bytes más en disco.
Por favor, por favor, por favor ¿estar en contra CATEGÓRICAMENTE de los getter/setters? Bueno, como veo que has intentado razonar y exponer tu punto de vista, haré lo mismo:
- si los atributos de la clase son privados y los métodos get y set públicos vas a poder seguir cometiendo errores.
Veamos. Esto no se trata de evitar cometer errores. Esto se trata de programar una aplicación / lo que sea. Tienes una clase que tiene propiedades cuyos valores pueden/deben modificarse. ¿Qué es mejor, entrar a pelo y modificar el atributo (acceso público) o que sólo unos responsables (getter & setter) se encarguen de ello?
- [...] Si en vez de usar almacenar, uso get y set, a lo mejor tengo 100 gets/sets repartidos por mi código, telita para cambiarlos.
Veamos de nuevo. ¿No te fijas que lo que propones con el método almacenar es lo mismo que un set? Un método al que le pasas por parámetros los atributos de una clase que quieres almacenar. Eso es un set.
- Si usas estos métodos en tu código de grandes dimensiones y el día de mañana cambia dicha variable (por ejemplo, antes te daban unas coordenadas y eso lo cogías con el get, y ahora en vez de darte la coordenada directamente te dan 2 rectas de las cuales tienes que calcular el punto donde se cruzan...)
Hmmm. ¿Alguna vez has participado/desarrollado algún proyecto? No es peyorativo ni pretendo descalificarte, en absoluto; sólo quiero señalar que si alguna vez te ha pasado esto en algún proyecto, deberías plantearte seguir con ese equipo/empresa/cliente lo que sea. Eso que dices no se da NUNCA, y si se da, es debido a una planificación y desarrollo NEFASTOS. Que el desarrollo de software no es tirar código y ya está.
#1107 que qué es mejor? Pues no lo sé. Si lo pregunto es por algo. Me he encontrado profesores que dicen si a usarlos. También he tenido otros que habiendo desarrollado varios compiladores/lenguajes de programacion y proyectos de gran envergadura internacionales dicen no a usarlos salvo que sea estrictamente necesario
#1108 Hasta donde yo sé los compiladores/lenguajes no se desarrollan con POO, si no los usaron es porque no los necesitaban.
#1095 A favor por lo que dice #1103 exactamente.
Otro ejemplo:
public class Cosa{
private Vector posicion;
public void setPosicion(int x, int y) {
if(posicion == null)
posicion = new Vector();
posicion.set(x, y);
}
Para qué voy a instanciar posicion al crear la cosa, y si no voy a usar ese atributo en todas las cosas que vaya a crear?