You are on page 1of 8

II.

Desarrollo de aplicaciones con interfaz grfica y manejo de clases y objetos

Mtodos Los mtodos son utilizados para definir un grupo de instrucciones que son separadas y que definen un comportamiento, que requieren en algunos casos de valores para su proceso. Un mtodo es algo muy utilizado en la programacin de Java y en POO representa las conductas de los objetos que se traten. El mtodo nos ayuda a definir un cambio en algn objeto y es importante que entendamos como funciona un mtodo ya definido y como utilizarlo al hacer alguna aplicacin o un applet, pues el mtodo es clave, pieza principal de la programacin orientada a objetos. Los mtodos pueden ser de un tipo especfico como int, double, String, Cuenta, etc. o simplemente no tener algn tipo como void. Cuando un mtodo es void, este mtodo no se espera que regrese algn valor a la aplicacin que utiliz algn objeto que tenga es mtodo como parte de la definicin de la clase. Si un mtodo es definido como int, entonces debe utilizar la instruccin return y el valor int calculado. Algunos ejemplos son: public int obtenValor() {

return valor; // donde valor es de tipo entero } public double obtenSaldo() { return saldo; // donde saldo es de tipo double } public void cambiaSaldo(saldo) { this.saldo = saldo; //igualando la variable de la clase al parmetro }

Paso de Parmetros Al utilizar un parmetro, la manera en la que el mtodo utiliza el parmetro que le es pasado es la que define que tipo de paso de parmetro es. Por valor Cuando a un mtodo se le pasa un parmetro de algn tipo de datos primitivo (char, int, double, etc), lo que hace el mtodo internamente en memoria es sacar una copia del valor que se est pasando para no afectar a la variable que ha sido enviada a travs del mtodo, por ejemplo: Si tenemos la variable int x en un mtodo llamado uno y este mtodo llama al mtodo dos y este mtodo dos tambin tiene una variable x, el mtodo dos saca una copia de x, y aunque es bautizada con el mismo nombre, se respeta el valor de x en el mtodo uno. Veamos el caso: public void uno() { int x = 10; dos(x); System.out.println( x en uno = + x); } public void dos (int x) { x = x + 2; System.out.println( x en dos = + x); } Al ejecutar estos mtodos en alguna aplicacin, observaramos como se despliega: x en dos = 12 x en uno = 10 Mientras que la x que se mando a dos se copio con el valor 10 y se le sumaron 2, dando 12, la x que esta en uno sigue valiendo 10, porque se saca una copia del valor para mandarse a dos. Paso de parmetros por Referencia Esto se ver en la siguiente unidad temtica, donde se explica Clases y Objetos.

Utilicemos en este momento la definicin de la clase Punto, esta clase nos ayuda a visualizar el comportamiento de cualquier objeto Punto, con sus diferentes tipos de mtodos: public class Punto { private int x; // variable para la coordenada en x private int y; // variable para la coordenada en y public Punto() { // mtodo para construir un objeto sin parmetros x = 0; y = 0; } // mtodo para construir un objeto con parmetros public Punto(int x, int y) { this.x = x; this.y = y; } public int obtenX() { // mtodo que te d el valor de la coordenada x return x; } public int obtenY() { // mtodo que te d el valor de la coordenada y return y; } // mtodo que sirve para cambiar el valor //de la coordenada x public void cambiaX(int x) { this.x = x; // this se utiliza porque se esta utilizando (x) // como parmetro y como // variable de instancia y esto es para que no se confunda } // mtodo que te sirve para cambiar el valor de la coordenada y public void cambiaY(int y) { this.y = y; // this se utiliza porque se esta utilizando (y) //como parmetro y como // variable de instancia y esto es para que no se confunda Java } } Variables de Instancia Esta clase utiliza primero que nada las variables de la clase, llamadas variables de instancia, ya que con cada objeto que se cree de la clase, se crea una instancia de estas variables para cada objeto diferente. Estas variables se deben definir como privadas. Mtodos Constructores Posteriormente revisamos que tiene dos mtodos que se llaman igual a la clase, pero que no manejan algn tipo, es decir o int, o double o String, etc., solamente se dice son pblicos. A estos mtodos se les llama constructores y son los que se utilizan cuando se crea un objeto de la clase. Es muy importante que un mtodo constructor tenga definido internamente la asignacin para cada una de las variables de instancia. Mtodos de Acceso

Posteriormente se definen los mtodos obtenVariable(), llamados mtodos de acceso, es decir se define un mtodo por cada variable de instancia (de acuerdo al tipo de cada variable), esto es algo que nos permite obtener el valor de cada variable, ya que las variables han sido definidas como privadas, para que alguien de otra clase no las pueda modificar directamente. Mtodos Modificadores Luego se definen los mtodos modificadores cambiaVariable(), de tipo void (ya que no regresan valor), estos mtodos deben cambiar el valor de cada variable, y solo a travs de ellos es que se deben cambiar los valores de las variables de instancia, ya que ellas son privadas. Por convencin de Java , inclusive dentro de la misma clase, si se desea cambiar el valor de una variable debern utilizarse para esto los mtodos modificadores y de acceso, es decir, aunque sabemos que si queremos incrementar la x en 1, podemos hacer: x++; O x = x + 1; Para respetar las normas de convencin de cdigo Java, debemos utilizar los mtodos modificadores y de acceso, de tal manera que quedara de la siguiente manera: cambiaX ( obtenX() + 1 ); Aunque se ve mucho ms largo o mucho ms difcil de entender, tiene su porque, el porque es debido a que si algo se debe de hacer cuando se modifique el valor de x o cuando se obtenga el valor de x, por ejemplo, entonces se hace en el mtodo modificar o el mtodo de acceso, correspondientemente, de esta manera no se pierde el control del comportamiento de las variables de instancia del objeto y es as como se mantiene la intregridad, este es un muy buen hbito de programacin. *** Solo los mtodos constructores y mtodos de acceso o mtodos de modificacin pueden acceder directamente las variables de instancia de la clase.*** Esta clase queremos que contenga un mtodo que nos sirva para dibujar un punto en la coordenada (x,y), entonces crearemos un nuevo mtodo llamado dibujaPunto(), el cual requerir un elemento grfico como el que hasta ahora hemos utilizado con un applet public void paint(Graphics g) Si el mtodo dibujaPunto() de la clase Punto no recibe como parmetro el objeto grfico de la clase Graphics, no habr manera que pueda dibujar el punto. Veamos como quedara ahora nuestra clase Punto modificada: public class Punto {

private int x; // variable para la coordenada en x private int y; // variable para la coordenada en y public Punto() { // mtodo para construir un objeto sin parmetros x = 0; y = 0; } // mtodo para construir un objeto con parmetros public Punto(int x, int y) { this.x = x; this.y = y; } public int obtenX() { // mtodo que te d el valor de la coordenada x return x; } public int obtenY() { // mtodo que te d el valor de la coordenada y return y; } // mtodo que sirve para cambiar el valor //de la coordenada x public void cambiaX(int x) { this.x = x; // this se utiliza porque se esta utilizando (x) // como parmetro y como // variable de instancia y esto es para que no se confunda } // mtodo que te sirve para cambiar el valor de la coordenada y public void cambiaY(int y) { this.y = y; // this se utiliza porque se esta utilizando (y) //como parmetro y como // variable de instancia y esto es para que no se confunda Java } public void dibujaPunto(Graphics g) { g.fillOval(obtenX() , obtenY(), 5, 5); } } Es importante aqu hacer notar que para dibujar el Punto, se utiliza el mtodo obtenX() y el mtodo obtenY(), aun y cuando se pudieran utilizar directamente x y y, directamente, se usan los mtodos, ya que esto representa una norma de la programacin orientada a objetos. Esta clase se utiliza creando un objeto de ella dentro de un applet y haciendo uso de sus mtodos: import java.awt.*; import java.applet.*; import java.awt.event.*; // <applet width="200" height="200" code="AppletMetodos1"></applet> public class AppletMetodos1 extends Applet implements ActionListener { Label l1, l2, l3,l4; TextField t1, t2, t3,t4; Button b; Punto p;

public AppletMetodos1() { l1 = new Label("X"); t1 = new TextField(4); l2 = new Label("Y"); t2 = new TextField(4); b = new Button("DIBUJA PUNTO"); add(l1); add(t1); add(l2); add(t2); add(b); b. addActionListener(this); } public void paint(Graphics g) { p.dibujaPunto(g); } public void actionPerformed(ActionEvent ae) { int x = Integer.parseInt(t1.getText()); int y = Integer.parseInt(t1.getText()); p = new Punto(x, y); repaint(); } } El applet ejecutado quedara:

En el se puede observar un punto grande en la coordenada 100, 100, ahora hicimos este punto grande con el mtodo fillOval y mandndole un dimetro de mas de un pixel para que se viera la diferencia. Al utilizar un mtodo, o al llamar (invocar) un mtodo, nosotros le podemos pasar valores al

mtodo y a su vez, el mtodo puede utilizar aquellos valores que han sido definidos en forma global, por ejemplo, nosotros en la clase Punto, dentro del mtodo paint(), podemos utilizar x, o y, ya que ambas son variables de instancia definidas arriba de todos los mtodos, por lo tanto todos los mtodos pueden utilizar el valor de x o el valor de y. Por otro lado la clase Punto no es un applet y no tiene la capacidad de dibujar en un elemento grfico por si solo, por eso desde el mtodo paint() del applet, le pasamos al mtodo paint de la clase Punto, el parmetro grfico g, y de esa manera dentro del mtodo paint() de la clase Punto es como este mtodo puede dibujar. Es importante tambin que notes que en la clase Punto al introducir el mtodo paint(), se hizo el import java.awt.*; ya que ahora que se dibuja, se requiere utilizar el mtodo fillRect() el cual pertenece a los elementos de la clase Graphics que est dentro de ese paquete. Un mtodo es definido como void cuando no requiere regresar un valor a quien lo llam. En caso de requerir regresar un valor este puede ser de los mismos tipos que las variables definidas al principio:

Tipo de mtodo Byte Short int long float double char boolean NombreClase

descripcin formato/tamao entero de tamao byte 8-bits a complementos a dos entero corto 16-bits a complementos a dos entero 32-bits a complementos a dos entero grande 64-bits a complementos a dos punto flotante de precision sencilla 32-bits IEEE 754 punto flotante de doble precision 64-bits IEEE 754 un solo caracter caracter de 16-bits de tipo Unicode valor boleano (true o false) true o false Alguna clase existente representar un objeto de alguna clase conocida

Las variables y objetos definidos y creados dentro de un mtodo se consideran locales al mtodo y solo pueden ser utilizados dentro de l. Si al llamar a otro mtodo se quiere que el mtodo llamado utilice alguna variable o algn objeto, dicho mtodo debe de tomarlo a travs de un parmetro para tal efecto. Es muy importante que los mtodos se llamen con el nmero exacto de variables y/o objetos definidos como parmetros, asi como el tipo correspondiente de cada uno de ellos. Posibles Problemas con la creacin de un objeto. Es muy comn que cuando se ejecute el mtodo paint() en el applet anterior, el applet no haya creado aun el objeto punto p, de tal manera que no hay objeto creado para dibujar, una modificacin a este applet para que funcionara sin problemas es revisar que el objeto p haya

sido creado para poder dibujarlo, entonces el mtodo recomendado para paint() sera: public void paint(Graphics g) { if (p != null) { p.dibujaPunto(g); } } Esto entonces revisara primero si el objeto no es null (o sea que ya tiene algo adentro) y entonces se dibujara el punto p, utilizando para ello el mtodo dibujaPunto de la clase Punto.

You might also like