Apuntes Java: Clases – Introducción

Clases

Las clases son el mecanismo por el que se pueden crear nuevos Tipos en Java. Las clases son el punto central sobre el que giran la mayoría de los conceptos de la Orientación a Objetos.

Una clase es una agrupación de datos y de código que actúa sobre esos datos, y a la que se le da un nombre.

Una clase contiene:

  • Datos (se denominan Datos Miembro, o también atributos). Estos pueden ser de tipos primitivos o referencias.
  • Métodos (se denominan Métodos Miembro).

La sintaxis general para la declaración de una clase es:

modificadores class nombre_clase {
       declaraciones_de_miembros ;
}

Por ejemplo:

class Punto { // definimos una clase a la que llamamos punto
     int x; // Con dos atributos (datos miembro). Dos enteros (tipos primitivos) x e y
     int y;
}

Los modificadores son palabras clave que afectan al comportamiento de la clase. Los iremos viendo progresivamente en las sucesivas lecciones.

Objetos, miembros y referencias

Con la definición anterior de la clase Punto sólo hemos creado un nuevo tipo. Hemos definido sus características. Para poder usar el nuevo tipo debemos crear un elemento de ese tipo. A estos elementos de una clase se les denomina genéricamente objetos.

Es decir que un objeto es una instancia (ejemplar) de una clase. La clase es la definición general y el objeto es la materialización concreta (en la memoria del ordenador) de una clase. El fenómeno de crear objetos de una clase se llama instanciación.

Los objetos se manipulan con referencias. Una referencia es una variable que apunta a un objeto. Las referencias se declaran igual que las variables de Tipos primitivos (Con la sintaxis: tipo nombre). Los objetos se crean (se instancian) con el operador de instanciación new.

Ejemplo:

Punto p;
p = new Punto();

La primera línea del ejemplo declara una referencia (p) que es de Tipo Punto. La referencia no apunta a ningún sitio, todavía. En la segunda línea se crea un objeto de Tipo Punto y se hace que la referencia p apunte a él. Se puede hacer ambas operaciones en la misma expresión:

Punto p = new Punto();

Los miembros de un objeto, tanto datos como métodos se usan de forma distinta según desde donde se referencien. Si se referencian desde un método de la propia clase entonces se usan normalmente, pero si se usan externamente (desde fuera de la clase) entonces debe indicarse de que objeto se trata con la sintaxis:

referencia_objeto.nombre_miembro

Por ejemplo:

class Circulo {
        Punto centro;   // dato miembro. Referencia a un objeto punto
        int radio;      // dato miembro. Valor primitivo
        float superficie() {                 // método miembro. 
                return 3.14 * radio * radio;
        }                                    // fin del método superficie
}                                            // fin de la clase Circulo

Y en nuestro programa podemos usar la clase Circulo de la siguiente forma:

Circulo c = new Circulo();
c.centro.x = 2;
c.centro.y = 3;
c.radio = 5;
float s = c.superficie();
  • Creamos un objeto de tipo Circulo con la expresión new Circulo() y hacemos que la referencia c apunte a él.
  • Asignamos valores a las variables de c. c.centro.x se lee como el valor x del objeto centro del objeto Circulo
  • Usamos el método superficie() de circulo con la misma sintaxis: referencia_objeto.nombre_miembro
  • Observar que en la definición del método superficie, más arriba, se usa el valor del dato miembro radio
  • Los datos miembro pueden ser tanto primitivos como referencias. La clase Circulo contiene un dato miembro de tipo Punto (que es el centro del círculo).
  • Aunque el método superficie no recibe ningún argumento los paréntesis son obligatorios (Distinguen los datos de los métodos).
  • Existe un Objeto Punto para cada instancia de la clase Circulo (que se crea cuando se crea el objeto Circulo).

Se puede visualizar gráficamente los datos primitivos, referencias y objetos de la siguiente forma:

  • Datos primitivos: Por ejemplo: int i = 5;
  • Referencias y objetos:
Punto p = new Punto();
p.x = 1;
p.y = 3;

clases1

Es importante señalar que en el ejemplo, p no es el objeto. Es una referencia, de tipo Punto que apunta al objeto.

Resumen

  • Una Clase es una definición de un nuevo Tipo, al que se da un nombre.
  • Una Clase contiene Datos Miembro y Métodos Miembro que configuran el estado y las operaciones que puede realizar.
  • Un Objeto es la materialización (instanciación) de una clase. Puede haber tantos Objetos de una Clase como resulte necesario.
  • Los Objetos se crean (se les asigna memoria) con el Operador new.
  • Los Objetos se manipulan con Referencias.
  • Una Referencia es una Variable que apunta a un Objeto.
  • El acceso externo a los elementos de un Objeto (Datos o métodos) se hace con el operador . (punto) : nombre_referencia.miembro
  • El acceso interno a los elementos de un Objeto no requiere el operador . (punto)

Última actualización: 27/10/2016