Instanciación.

Concepto de clase/Instancia.

Como hemos comentado una clase es el tipo que tendrán nuestros objetos, también llamados instancias de esa clase, es decir, la clase es la forma que tendrán los objetos empleados por nuestra aplicación. Un ejemplo puede ser el plano de una casa, el plano sería nuestra clase, pero con ese mismo plano podremos contruir diversas casas que serían los objetos. El plano en sí no es nada es sólamente la especificación de lo que será una casa una vez construida.

Alcance de los miembros: de instancia o de clase.

El comportamiento, la funcionalidad de la clase, es la concreción de qué puede hacer cada una de las instancias de la clase, cómo cambian su estado, o cómo se relaciona con otras.

Por ejemplo, en la clase Coche podríamos determinar la siguiente funcionalidad:

Para definir el comportamiento de los objetos definiremos métodos, que no serán más que funciones o procedimientos definidas dentro de la clase que se ejecutan y operan sobre instancias de esa clase. Notar que estos métodos se encapsulan dentro de la clase, es decir, encapsulamos conjuntamente datos y funcionalidad relativa a un mismo objeto, cada objeto debe proveer el mecanismo de almacenamiento y gestión de sus datos, y la funcionalidad relativa a dicho objeto como una entidad cerrada.

Igual que los atributos, también hay métodos de instancia (se aplican sobre una instancia: son los más comunes, sobre un objeto concreto) y métodos de clase (se aplican sobre la propia clase). Lo veremos.

Mensajes y métodos.

A menudo se habla de mensaje en terminología de orientación a objetos. Aunque pueda parecer un concepto extraño, concretando es realmente fácil de entender: cuando alguien llama al método X de un objeto se dice que le está pasando el mensaje X.

Y algo hay que entender y es muy importante. No sólo el programador llama a los métodos (pasa mensajes) de los objetos. También el sistema puede ejecutar algunos métodos. Por ejemplo, cuando el usuario mueve el ratón el sistema llamará a algún método determinado con ciertos parámetros (por ejemplo, coordenadas) para indicar que el ratón ha sido movido.

Notación.

Veamos cómo se definiría una clase de ejemplo:

class Coche {
}

Bueno, esto es hasta el momento una clase Java. Vamos a hacerla un poco más útil poniéndole atributos:

class Coche {

        String color, modelo;
        int velocidadMaxima;
        boolean motorEncendido;

}

Y añadamos unos métodos sencillos:

class Coche {

        String color, modelo;
        int velocidadMaxima;
        boolean motorEncendido;

        Coche(String sColor, String sModelo, int iVelocidadMaxima) {
            color=sColor;
            modelo=sModelo;
            velocidadMaxima=iVelocidadMaxima;
            motorEncendido=false;
        }

        void arrancar() {
                if (motorEncendido == true)
                        System.out.println( "El motor ya estaba encendido" );
                else {
                        motorEncendido = true;
                        System.out.println( "El motor está ahora encendido" );
                }
        }

        void visualizar() {
                System.out.println( "Este coche es un " + modelo + ", de color " + color );
                if (motorEncendido == true)
                        System.out.println( "El motor está encendido." );
                else    System.out.println( "El motor está apagado." );
        }

}

Esto es hasta el momento lo que podría ser la definición de una clase en Java, pero como hemos comentado, una clase en sí no es nada más que el esquema de lo que serán los objetos o instancias de esa clase, por tanto, veremos ahora como hacer los objetos asociados al tipo de esa clase.

Bien, desde algún punto del programa (ya veremos desde dónde) queremos crear una instancia de Coche llamada tuCoche. Lo hacemos con new como sigue:

        Coche tuCoche = new Coche("verde", "Seat 600", 40);

Una vez ejecutada esta sentencia ya está creada la instancia. Para acceder a sus atributos simplemente se indican detrás del nombre de la instancia y un punto:

        tuCoche.color = "amarillo con lunares rojos";

Con la misma sintaxis se accede a los métodos como si fueran llamadas a función:

        tuCoche.arrancar();
        tuCoche.visualizar();

La notación para la distinción de los atributos de clase de los de instancia será:

Class Coche {

    int velocidadMaxima;  // de instancia (una copia para cada objeto de la clase).
    static int numeroDeCoches;  // de clase (una sóla copia para todos los objetos de la clase).

    int obtenerVelocidadMaxima() {
        /* Método de instancia */
        return velocidadMaxima;
    }

    static int obtenerNumeroDeCoches() {
        /* Método de clase */
        return numeroDeCoches;
    }

}
 
 

Seguir