You are on page 1of 2

Variables de Instancia y Variables de Clase La manera de utilizar un mtodo por un objeto es

utilizando el formato objeto.m todo(parm etros); .


Cuando se define una clase en POO, las variables que se
definen dentro de ella son variables que tendrn El siguiente es un ejemplo que muestra el uso de las
diferentes valores con cada una de las instancias que se variables de instancia y variables estticas. Supongamos
generan al crear objetos nuevos de la clase. que tenemos en la clase Punto una variable de clase
llamada puntos, esta variable nos servir para saber el
Una variable de instancia normalmente se define como nmero de objetos que se han creado en la clase, la clase
privada, para que no se pueda modificar desde otra clase, Punto a usar sera:
solo a travs de los mtodos (como lo vimos en la clase
Punto con el obtenX() y el cambiaX()), pero puede ser
public class Punto
definida como pblica y en ese caso no se requiere de
hacer uso de algn mtodo para tomar su valor o
modificarla (no es recomendable por el control de la {
variable por la misma clase). private int x; // variable para la coordenada en x
private int y; // variable para la coordenada en y
Una variable de clase es aquella que solamente tiene un private static int puntos=0;
valor para toda la clase y debe ser definida como static
(esttica) para que no se cree un nuevo valor con cada public Punto() { // metodo para construir un objeto sin parmetros
instancia. x = 0;
y = 0;
La palabra static nos sirve para definir algo que no tiene puntos++;
que ver con las instancias de la clase, sino con toda la }
clase. public Punto(int x, int y) { / / mto do pa ra constr uir un objet o con va lores e nteros
this.x = x;
Cuando a alguna variable o a algn mtodo le this.y = y;
anteponemos la palabra static, esto define que ser nica puntos++;
(variable) o nico (mtodo) para toda la clase. }
public Punto(double x, double y) { // mtodo para c ons truir un obje to c on valo res double

Las variables de instancia se utilizan a travs de los this.x = (int) x;


mtodos de la clase y estos son utilizados por objetos. Es this.y = (int) y;
decir si tenemos la clase Cuenta, para utilizar la cuenta puntos++;
bancaria, con el constructor vacio Cuenta() y el }
Constructor(double saldo) con parmetro y definimos public Punto(Punto obj) { // m todo para co nstru ir un objeto co n otro o bjeto
algunos objetos como lo siguiente: this.x = obj.obtenX();
this.y = obj.obtenY();
Cuenta juan, pedro, luis; puntos++;
juan = new Cuenta(); }
pedro = new Cuenta(1500.0); public int obtenX() { / / mto do qu e te d e l val or de la coord ena da x
luis = new Cuenta(3000.0); return x;
}
Al usar la palabra new estamos creando un nuevo objeto public int obtenY() { // m todo que te d el va lor de la coo rde nada y
de la clase y con esto estamos utilizando una nueva return y;
plantilla de variables de instancia para el objeto creado, }
juan, pedro y luis son objetos nuevos de la clase Cuenta y public void cambiaX(int x) { // mt od o q u e sirve p ara c amb iar el va lor //d e l a co ord en ad a x

por cada variable que tiene definida Cuenta en this.x = x; // this s e utiliz a porque s e es ta utili zando (x)como par metro y c omo variable de ins tanc ia y es to es para que no s e c onf

la clase, cada uno de estos objetos podr tener un valor }


diferente. public void cambiaY(int y) { // mt od o q u e t e s irve p ara camb iar el val or d e la c oord en ad a y

this.y = y; / / this se util iza porque se es ta utiliz ando (y) //c omopar metro y c omo // variable de in s ta nc ia y es to es

IMPORTANTE. Es sumamente importante que despus }


de declarar un objeto para una clase (Cuenta public void dibujaPunto(Graphics g) { // dibuja un punto

objeto;) hagamos la creacin del objeto, es decir g.fillOval(x,y, 5, 5);


utilicemos la instruccin new Cuenta() para ese objeto ( }
objeto = new Cuenta(); ) de otra manera el objeto no ha
sido creado y no se pueden utilizar los mtodos, pues public String toString() { // p ara o btene r un o bjeto P unto e n format o St rin g
Java marcar el error NullPointerException. return "(" + obtenX() + "," + obtenY() + ")";
}
En el ejemplo anterior, si tenemos el mtodo public static int getPuntos() { // para ac ceder a la cantid ad de objeto s c reados

setSaldo(double saldo), para modificar el saldo de la return puntos;


cuenta y el mtodo getSaldo(), para acceder al saldo de }
la cuenta, las siguientes pudieran ser instrucciones
vlidas: }

luis.setSaldo(2200.0);
juan.setSaldo(350.50); Nota que la variable puntos y el mtodo getPuntos()
System.out.println("Saldo de pedro = " + ambos fueron definidos como estticos, esto implica que
pedro.getSaldo()); ser un solo valor de esto para toda la clase, no un valor
diferente por instancia (objeto) creada de la clase. System.out.println(" Punto a = " + a.toString());
Tambin observa como la variable puntos es System.out.println("Puntos creados =" +
incrementada en uno cada vez que se crea un objeto de a.getPuntos());
la clase (en cualquier constructor). Esta clase la b = new Punto(1, 2);
podemos utilizar con la aplicacin: c = new Punto(3.0, 4.0);
System.out.println(" Punto b = " + b.toString());
public class AplicacionPunto1 System.out.println(" Punto c = " + c.toString());
{ System.out.println("Puntos creados =" +
private static Punto a, b, c, d, e; b.getPuntos());
d = new Punto(b);
public static void main(String[] args) e = new Punto(c);
{ System.out.println(" Punto d = " + d.toString());
a = new Punto(); System.out.println(" Punto e = " + e.toString());
System.out.println(" Punto a = " + a.toString()); System.out.println("Puntos creados =" +
System.out.println("Puntos creados =" + e.getPuntos());
Punto.getPuntos()); }
b = new Punto(1, 2); }
c = new Punto(3.0, 4.0); En esta aplicacin podemos observar como es que el
System.out.println(" Punto b = " + b.toString()); mtodo esttico getPuntos() tambin puede ser usado a
System.out.println(" Punto c = " + c.toString()); travs de un objeto de la clase, pero es importante
System.out.println("Puntos creados =" + recordar que es una sola variable para toda la clase.
Punto.getPuntos()); Recoleccin de Basura
d = new Punto(b); En Java cada vez que utilizamos la palabra new, estamos
e = new Punto(c); creando una nueva referencia a memoria y mas tarde
System.out.println(" Punto d = " + d.toString()); cuando ya no la usemos, no necesitamos borrarla (como
System.out.println(" Punto e = " + e.toString()); se hara normalmente en C++), ya que Java
System.out.println("Puntos creados =" + automticamente los borra debido a una clase llamada
Punto.getPuntos()); GarbageCollector, la cual se encarga de estar revisando
} los objetos que ya son obsoletos y no se vuelven a
} El resultado que nos mostrara sera: utilizar.

La recoleccin de memoria es una facilidad que permite a


Java reutilizar la memoria que se tena bloqueada para el
uso de algn dato primitivo (int, double, etc) o algn
objeto.

Gracias a esta facilidad de Java, el programador se olvida


de tener que estar liberando la memoria y se enfoca ms
a la mejor utilizacin de las variables y objetos de la
clase.

Observamos como es que despus de crear el elemento a


y desplegar el valor de puntos creados, solo despliega 1,
despus al crear b y c, se tienen 3 y al final ya se tienen
los 5.

Tambin es importante hacer notar que el mtodo


getPuntos() fue utilizado a travs de la clase Punto, ya
que es un mtodo esttico y debe ser utilizado a travs
de la clase.

Lo anterior no es un requisito, pero es lo ms comn, ya


que podemos tener una llamada a un mtodo esttico,
pero a travs de un objeto de la clase y funciona
exactamente igual, veamos ahora una aplicacin que est
ligeramente cambiada, pero nos da el mismo resultado
que la anterior:

public class AplicacionPunto1


{
private static Punto a, b, c, d, e;

public static void main(String[] args)


{
a = new Punto();

You might also like