Creación de clases en Java

  video[Tutorial]  Creación y utilización de clases

Java es un lenguaje orientado a objetos, donde casi todo se realiza utilizando objetos. Por lo tanto va a resultar vital conocer cómo definir clases de objetos de Java.

Antes conviene definir estos términos:

Objeto: entidad que dispone de unas propiedades (atributos) y comportamiento (métodos).

Clase: define un tipo de objeto concreto.

Por ejemplo, si quisiéramos escribir un programa en Java para gestionar los libros de una biblioteca, crearíamos la clase Libro, y luego un objeto de esta clase, por cada libro que tengamos en la biblioteca.

Una clase en Java está formada por:

  • Atributos: (o campos/propiedades) Almacenan algún tipo de información del objeto. Definen su estado.
  • Constructor(es): Método que se utiliza para inicializar un objeto.
  • Métodos: Son utilizados para modificar o consultar el estado de un objeto. Equivalentes a las funciones o procedimientos de otros lenguajes.

NOTA: En Java solo hay dos excepciones al uso de objetos, además de estos podemos utilizar variables simples y arrays. La forma de hacerlo es muy similar a como lo haríamos en C o C++. En la siguiente tabla se muestra una tabla con los tipos simples disponibles en Java.

Para crear una nueva clase, lo primero que tienes que hacer es crear un fichero que ha de llamarse exactamente igual que la clase y con extensión .java. Recuerda, siempre un fichero por clase.

Al principio de este fichero se suele indicar el paquete al que pertenecerá esta clase. Por ejemplo:

package org.upv.cursoandroid.unidad0;

seguido de otros paquetes definidos previamente que queremos utilizar:

import android.app.Activity;
import android.content.BroadcastReceiver;
import …

Cómo las clases son agrupadas en paquetes será explicado más tarde. De momento no es imprescindible para trabajar con los primeros ejemplos.

Para declarar una clase sigue el siguiente esquema:

class <clase>  {
   //declaración de atributos
  [visibilidad] [modificadores] <tipo> <atributo> [= valor];
  ...

  //declaración de constructor
  public <clase>(<argumentos>) {
    <instrucciones>;
  }

  //declaración de métodos
  [visibilidad] [modificadores] <tipo> <método>(<argumentos>) {
    <instrucciones>;
  }
  ...
}

donde:

[visibilidad] = public, protected o private
[modificadores] = final, static y abstract

El significado de estas palabras se explica más adelante.

Una clase comienza por la palabra reservada class seguida del nombre de la clase. Por convenio los nombres con la inicial mayúsculas. Si queremos usar varias palabras, las concatenamos sin espacios con las iniciales en mayúscula. A continuación se definen los atributos, seguido del constructor/es y de la declaración de métodos.

Un ejemplo de una clase se muestra a continuación:

/** Clase que representa un número complejo. */
 class Complejo {

  //declaración de atributos
  private double real, imaginario;

  //declaración de constructor
  public Complejo(double real, double imaginario) {
    this.real= real; 
    this.imaginario= imaginario;
  }

  //declaración de métodos
  /** Transcribe el complejo a String.
   * @returnun string con la parte entera y la imaginaria
   */

  public String toString() {
    return real + "+"+ imaginario + "i";
  }

  /** Suma al complejo de este objeto otro complejo.
   * @param v  el complejo que sumamos
   */

  public void suma(Complejo v) {
    real = real + v.real;
    imaginario = imaginario + v.imaginario;
  }
}

Una clase necesita almacenar algún tipo de información que defina el objeto en cuestión. Esto se hará en los atributos o campos de la clase. En el ejemplo queremos representar un número complejo, y por lo tanto vamos a necesitar almacenar la parte real y la parte imaginaria del número.

El siguiente paso suele ser declarar el constructor. Un constructor es un método que tiene el mismo nombre de la clase y que se utiliza para inicializar un objeto. Tiene una serie de parámetros separados por comas, en nuestro ejemplo, la parte real y la parte imaginaria del número complejo. El código de este método (las instrucciones entre {} ) se limita a copiar estos valores en los atributos del objeto. Aunque aquí aparece un problema, los parámetros del método (real, imaginario) y los atributos de la clase (real, imaginario) se llaman igual. Para resolverlo podemos anteponer a los atributos la palabra reservada this. De esta forma indicamos que nos referimos a los atributos del objeto.

Para terminar declaramos los métodos de la clase. Los métodos son equivalentes a las funciones o procedimientos de otros lenguajes y son utilizados para modificar o consultar el estado de nuestro objeto.

Los métodos suelen comenzar indicando su visibilidad (public,protected o private). El significado de cada una de estas palabras se explica más adelante. A continuación los métodos indican el tipo de datos que devuelven. En el ejemplo el primer método devuelve un String y el segundo void, o lo que es lo mismo nada. Luego sigue el nombre del método y los parámetros. Dentro del primer método se utiliza la palabra reservada return para indicar el valor devuelto por el método.