Este documento explica los conceptos de métodos get y set en programación orientada a objetos. Los métodos get devuelven el valor de atributos privados, mientras que los métodos set permiten cambiar el valor de atributos privados desde fuera de la clase. Ambos tipos de métodos son útiles para acceder y modificar el estado interno de un objeto.
1. Que mier.. es un get y
set!!!
Hecha por un tipo harto de escuchar conversaciones que envuelven estudiante de progra1
confundidos por sus maestros.
2. Para entender que es un get y set, hay que entender primero
que es un metodo. Una vez entendido eso, la pregunta inicial
parecerá estúpida y en el mejor de los casos estarás
avergonzado de haberte hecho la pregunta en cuestion.
Se espera que luego de ver esta presentacion puedas hacer
esto con tu compañeros:
3. Metodos
Un metodo es algo que hacen los objetos y ya.
Pueden recibir “parámetros” o no, dependiendo de lo que
se necesita hacer.
4. Pero que pu.. es un parámetro?
Un parametro es informacion adicional que se necesita para que
un objeto realice un tarea. Por ejemplo:
Supongamos que soy una calculadora (de las caras :D ) y me
pedís: “Sumale algo a 4 y me decís cuanto es”. Yo no soy un
maldito adivino y no puedo saber cuánto debo sumarle, eso que
necesito para realizar mi tarea se llama PARAMETRO.
La instrucción correcta debe ser: “Sumale 20 a 4 y me decis
cuanto es”.
Yo he definido mi metodo sumar como: la suma de 4 más lo que
sea que me den de parámetro. Algo así:
Public Int sumar(int cuanto){
return cuanto + 4;
}
5. Metodos que devuelven algo y
metodos que NO
• Algunas veces se necesita saber que rayos hizo el metodo
para poder usarlo en algun calculo.
Si un metodo no devolverá NADA su tipo de retorno será
VOID, void es algo así como NI MIER..
6. Ejemplo
• Considerese el siguiente metodo:
public void raiz(int x){
• double algo = Math.sqrt(x);
• }
7. El anterior metodo NO puede usarse en algun calculo como:
8 + raiz(10), porque su tipo de retorno es VOID. Cualquier
intento de retornar algo en un metodo void, resulta en un
compilador frustrado que se negará a generar bytecode.
Como lo siguiente:
bla bla void metodo(){
return algo;
}
8. Y para que rayos usamos los
metodos void?
• Para que un objeto haga algo y ya, no importandonos
que fue lo que hizo. Considerese la siguiente
conversacion entre dos objetos:
• A: mae movete cinco pasos porfa.
B: ok.
A: y?
B: Y que? Mover es void.
A: no me dijiste si lo hiciste o no.
• B: no fue lo que me pediste.
9. Explicacion cientifica
El objeto B tiene definido su metodo mover asi:
public void mover(int pasos){
miPosicion += 5;
}
El objeto A sos vos un programador chiflado que escribio
todo el codigo de B y que no se acuerda de como lo hizo.
10. Que hago para que B me diga si
hizo lo que le pedí o no?
Debe definirse el metodo mover() así:
public boolean mover(int pasos){
miPosicion += pasos;
Return true;
}
11. Con el anterior metodo la conversacion siguiente finaliza con
todos felices:
A: mae movete cinco pasos porfa.
B: ok. Si lo hice.
A: ok! ^_^
12. Y como me devolvería false? Te estarás preguntanto. Pues como
está el metodo escrito, jamás devolverá false.
14. • A un metodo se le puede dar el nombre que a uno se le antoje
al momento de crearlo. Algunas veces tenemos atributos
PRIVADOS en una clase y queremos que se puedan usar
afuera de ella cuando se ocupen. No podemos invocarlo por
el poder de greiscol así:
objeto.atributo. Porque el atributo es PRIVADO!
Para solucionar eso, creamos un metodo que devuelva el
atributo.
15. • Programadores sensatos usualmente nombran a estos
metodos así:
verboIndicandoObtencion + nombreAtributo
Dado un atributo X en una clase cualquiera, un metodo para
devolver ese valor podría llamarse:
obtenerEquis();
Pero pudo haberse llamado de cualquier forma. Algunos
programadores spanglishistas nombran esos metodos así:
verbIndicatingGet + nombreAtributo
• Nuestro metodo anterior se habría llamado:
getEquis()
• Si un programador spanglish lo hubiera hecho
16. Puedo tener un get que se
void?
• Claro que puedes, deberas depues atenerte a las
consecuencias de tener un metodo void, no poder usarlo
en calculos y NO poder asignarselo a una variable.
17. Si tengo un atributo privado que es un arreglo de String, como
uso sus elementos afuera de la clase?
• Paso 1. Planear el metodo.
Segun el problema se necesita devolver los elementos
individuales del arreglo NO el arreglo. Entonces algo como:
Public String[] getArreglo(){
return this.arreglo;
}
Seria tan util como un control inalambrico sin baterias.
18. Rapidamente podemos darnos cuenta de que para
sacar un elmento del arreglo necesitamos
informacion adicional. Un parámetro. Ese parámetro
es el índice.
Paso 2. Escribir el metodo.
Public String getElementoEnPosicion(int indice){
return this.arreglo[indice];
}
El nombre aqui es muy largo pero ilustra lo que se
quiere hacer. En la vida real el perro de la derecha se
burlaría despiadadamente de vos si le pones ese
nombre.
20. • Siguiendo con la situacion de tener un atributo privado X, si se
necesita cambiar ese valor desde afuera no podemos hacer
algo así:
• objeto.atributoX = algo;
• Porque el atributo es PRIVADO.
• Para solucionar eso creamos un metodo que me permita
cambiar ese valor desde adentro del objeto.
21. • Programadores sensatos, usualmente nombran a estos metodos
así:
verboIndicandoModificacion + nombreAtributo
• Asi que nuestro metodo para cambiar el valor de X se llamaría
así:
establecerEquis()
• Y si es spanglish:
setEquis()
• Y si es ingles puro:
setX();
22. • Puedo tener un metodo Set que devuelva algo?
• Por supuesto que sí. Puedes definir tus metodos como se te
venga a la mente en el momento.
Sin embargo, usualmente los metodos que cambian el valor
de un atributo, sólo lo hacen y ya.
Al hacer que devuelva algo, te arriesgas a que programadores
inexpertos, hagan lo que el perro de la esquina.
23. • Los metodos set generalmente necesitan de un parámetro
para realizar su tarea. Considerese la siguiente conversacion:
A: oye B, cambia el valor de tu atributo X.
B: ok! ..un momento, pero, a qué valor? Que hago Dios mio!
Ahhhhh!!!
• En la situacion anterior se observa que el programador quiere
cambiar el valor de X de B, pero no le dice el nuevo valor.
24. • Paso 1. Pensar el metodo
Se necesita un parametro, ese parametro será el nuevo valor
para X.
• Paso2. Escribir el metodo
Public void setX(Tipo valor){
this.X = valor;
}
25. • En que caso puedo tener un establecer si parametros?
• En caso de que el nuevo valor este cambiando en otro lado.
Por ejemplo:
Public void setX(){
this.X = Y + 8;
}
Si resulta que ‘Y’ siempre es igual el perro de la esquina se
sentirá muy feliz.
26. • Si yo se que esperabas al mismo perro otra vez :D