4. Clases y objetos en Java.

1. Clases y objetos en Java.

Atributos y métodos.

En la clase  se declararán los atributos y métodos de la clase:

Modificador de la clase:

Modificador de atributo:

De acceso.

Otros.

Modificador de método:

 

Formato de los mensajes: Llamada a los métodos

objeto.método(lista de argumentos);

En caso de sobrecarga, usaremos el nombre del método y la lista de argumentos,  para distinguir cuál es el que queremos ejecutar.

2   Paso  de parámetros a un método.

 


Ejemplo:

public class PorValor{

public void metodo(int i, int j)

 {

i=i+2;

j=j+2;

}

}

public class PruebaPorValor{

public static void main (String args[]){

PorValor obj = new PorValor();

int a = 15, b = 20;

System.out.println (“\n antes de la llamada: “ + a + “ “ + b);

        obj.metodo(a,b);

        System.out.println (“\n después de la llamada: “ + a + “ “ + b);

        }

}

La salida:

antes de la llamada: 15 20

después de la llamada: 15 20


 

Ejemplo:

public class PorReferencia{

private int a, b;

public PorReferencia (){

this.a=0;

this.b=0;

}

public PorReferencia (int a, int b){

this.a=a;

this.b=b;

}

public String toString(){

String  s=»»;

s = s + «valor de a= «+ this.a + » valor de b= » + this.b;

return s;

}

public void metodo (PorReferencia o){

// aquí tenemos dos referencias this y o, lo que modifique desde this se verá desde el main()

//lo que modifique desde o se verá desde main()

o.a =5;

this.b=4;

        }

}

porReferencia

public class PruebaPorReferencia{

public static void main (Strings args[]){

PorReferencia   unObjeto = new PorReferencia ();

PorReferencia   otroObjeto = new PorReferencia ();

System.out.println (“unObjeto  antes de la llamada: “ + unObjeto);//llama al método toString()

System.out.println (“otroObjeto  antes de la llamada: “ + otroObjeto);//llama al método toString()

unObjeto.metodo(otroObjetob);

System.out.println (“unObjeto  después de la llamada: “ + unObjeto);

System.out.println (“otroObjeto  después de la llamada: “ + otroObjeto);

}

}


Nota:

3.  Construcción de objetos.

Constructores.

Son un tipo especial de métodos que tienen el mismo nombre de la clase, pueden tener cero o más parámetros y no declaran devolver  ningún tipo de resultado, ni siquiera void. La misión de un constructor es  inicializar  los atributos y crear los abjetos asociados a estos atributos cuando no son de tipos simples.

La sintaxis del operador new es:

variable = new NombreClase(lista de argumentos..)

La creación de un objeto mediante new implica la invocación de un método constructor, encargado de realizar las funciones necesarias para que el objeto se inicialice a un estado coherente.

Java incorpora por defecto un constructor sin parámetros que no realiza ninguna operación especial:

public NombreClase ( ) { };

Cuando se crea una clase, se está creando un nuevo tipo de datos que se utilizará para declarar referencias y crear   objetos de ese tipo.

La creación  de un objeto de una clase consta de dos etapas:

new. 

Ejemplo para un objeto de la clase PorReferencia  en la que el constructor sin argumentos asignaba para a y b el valor 0

PorReferencia objetoCreado = new PorReferencia()

creacionobjeto

Asigna dinamicamente (durante el tiempo de ejecución), memoria a un objeto, devolviendo una referencia al mismo. El sistema  reserva espacio para almacenar el objeto  y  devuelve una referencia que apunta al  espacio de memoria reservado.

En Java todos los objetos son creados dinamicamente. .


 

EJEMPLO

public class Punto{

private int x;

private int y;

public Punto (int x, int  y){

//dentro de cada método tengo una referencia this al objeto

this.x = x;

this. y =y;

}

public Punto (){

x = 0;

y = 0;

}

public void mover (int incX, int incY){

x = x + incX;

y = y + incY;

}

public void mover (Punto p){

this.x =this. x + p.x;

this.y = this.y + p.y;

}

public String toString(){

//devuelve una cadena

return “(“ + x + “,” + y + “)”;

}

}

public class Test{

public static void main(String arg[]){

Punto p1 = new Punto();

Punto p2 = new Punto(2,5);

System.out.println(«El punto p1 vale: » + p1);//llama a toString para p1

System.out.println(«El punto p2 vale: » + p2);//llama a toString para p2

p1.mover(3,7);

System.out.println(«El punto p1 vale: » + p1);

p2.mover(p1);

System.out.println(«El punto p2 vale: » + p2);

}

}


 

4.    Sobrecarga de métodos.

Java permite la sobrecarga de métodos; es decir, permite crear varios métodos de la misma clase con el mismo nombre y diferentes listas de argumentos.

Dos métodos sobrecargados se diferencian en el número de argumentos y/o en su tipo. La elección de ejecutar un método u otro dependerá de la colección de argumentos que se emplea en la llamada al método, dentro de un mensaje.

El tipo devuelto en los métodos sobrecargados también puede ser distinto.

Inicialmente, se busca un método en la clase que tenga la misma distribución de argumentos de la llamada; si no existe ninguno, se intenta lo mismo buscando argumentos  promoviéndolos al nivel superior (un char intentaría convertirse en un int, un int en un long y float en un double). Si se sigue sin encontrar ningún método,  se debe introducir un “casting” para que los argumentos coincidan con los definidos en los métodos.

Los constructores de una clase se pueden sobrecargar.

(La sobrecarga de un método es distinta que la redefinición de un método en la herencia.)

5. Recolección de basura.

Java no permite al usuario destruir objetos mediante una orden, sino que lo hace automáticamente para aquellos objetos que no son referenciados desde ninguna parte.

El encargado de esta operación es el “Recolector de Basura” (Garbage Collector (GC)), que el sistema lanza periódicamente.

6. Control de acceso.

Mediante el mecanismo de  se puede controlar el acceso a los atributos y métodos de una clase, para impedir el mal uso de los mismos. Si sólo se permite  el acceso a los datos a través de unos métodos bien definidos, impedimos que sean mal utilizados.

El modificador de acceso a un dato y a un método determina como se podrá acceder  a ese dato o a ese  método y debe aparecer en su declaración.

Modificador Elementos Mismo paquete Otras   clases Heredado
public clase o interfacemétodo, atributo
protected método, atributo No
ninguno clase o interfacemétodo, atributo No Subclases del mismo paquete
private método, atributo No No No

7. this y super.

this

Se utiliza cuando un método quiere hacer referencia al objeto que lo invocó. Se utiliza dentro de cualquier método para referirse al objeto actual.

Cada método de una clase tiene un argumento implícito, que no se muestra en la declaración del método. Este argumento se llama this y hace referencia al objeto mediante el cual se invoca al método de la clase.

porReferencia

Se le da el nombre de puntero this.

Cuando desde un método se hace referencia  a los atributos de la clase utilizando  su identificador, se  está accediendo a los atributos del objeto referenciado por this, de forma implícita.

Cuando se invoca un método desde otro, dentro de la clase, se invoca de forma implícita mediante el objeto this.

super.

Es un término que, empleado dentro de un objeto de une clase, permite hacer referencia a los métodos y atributos de la superclase correspondiente (en la herencia).

Puede emplearse de dos formas:

super.atributo

super.metodo()

Para invocar el constructor de la superclase correspondiente.

 

super(lista de argumentos…)

No puede ser utilizado en métodos estáticos.

8. static.

Si se  define un atributo o método static podrá ser utilizado independientemente de cualquier objeto de la clase.

Existirá una única copia de ese atributo para todos los objetos de la clase.

Un atributo o método static puede ser utilizado por sí mismo, sin instancia de la clase específica; sin referencia a ningún objeto.

NombreClase.metodoStatic()

NombreClase.atributoStatic

El ejemplo más  habitual es el método main() que será llamado antes de que exista cualquier objeto.

Si un atributo es declarado static será compartido por todos los objetos de la clase.

Si un método es declarado static:

Puede utilizarse un bloque de inicialización static, es un bloque que sólo se ejecuta una vez, cuando se carga la clase por primera vez.

1 comentario »

  1. alexander said,

    de verdad gracias aclare muchas dudas con este tutorial…


Deja un comentario