Definición de una clase

public class NombreClase {
    // Declaración de las propiedades
    // Declaración de los comportamientos
}

El nombre de la clase comienza con mayúscula y se capitaliza el inicio de cada palabra. Ejemplos: Persona, VentanaTipoA, ImpresoraLaser.

Declaración de las propiedades

Las propiedades constituyen el conjunto de características atribuibles a la clase, denominadas variables miembro o campos:

public class Empleado {
    public String nombre = null;
    public String apellido1, apellido2, cargo;
    public double salario = 1000;
    public Date fechaAlta, fechaBaja, fechaNacim;
    public Boolean estaDeBaja = false;
}

Declaración de los comportamientos

Los métodos definen los comportamientos de una clase. Requieren nombre, parámetros de entrada (0 a N) y parámetro de salida (0 a 1). Se nombran en minúsculas capitalizando el inicio de cada palabra excepto la primera:

public void cambioDeCargo(String nuevoCargo) {  }
public String obtenerCargo() {  }

Ejemplo completo con la clase Bombilla:

public class Bombilla {
    public boolean encendida = false;
    public int potencia = 100;
    public int numEncendidos = 0;

    public void encender() {
        encendida = true;
        numEncendidos++;
        System.out.println("Bombilla de " + potencia + " vatios encendida");
    }

    public void apagar() {
        encendida = false;
        System.out.println("Bombilla de " + potencia + " vatios apagada");
    }
}

Clase Bombilla en Eclipse

Características de las clases

  • Abstracción: Todas las clases abstraen propiedades y comportamientos de conjuntos de objetos.
  • Estado: Las clases poseen propiedades capaces de almacenar el estado de un objeto, que evoluciona con el tiempo.
  • Responsabilidad: Deben garantizar que los objetos permanezcan siempre en un estado coherente.

Constructores

Los constructores son métodos especiales que permiten crear objetos, garantizando la inicialización de propiedades a valores coherentes:

public NombreDeLaClase(lista de parámetros) {
    
}

Características:

  • Se llaman exactamente igual que la clase.
  • No requieren tipo de retorno.
public class Bombilla {
    public int potencia;
    public int numEncendidos;
    public boolean encendida, fundida;

    public Bombilla(int potenciaInicial, int numEncendidosInicial) {
        encendida = false;
        fundida = false;
        potencia = potenciaInicial;
        if (potencia <= 0)
            potencia = 20;
        numEncendidos = numEncendidosInicial;
        if (numEncendidos < 0)
            numEncendidos = 0;
    }

    public void encender() {
        encendida = true;
        numEncendidos++;
        System.out.println("Bombilla de " + potencia + " vatios encendida");
    }

    public void apagar() {
        encendida = false;
        System.out.println("Bombilla de " + potencia + " vatios apagada");
    }
}

El compilador añade automáticamente inicializaciones antes de ejecutar el constructor: números y char a cero, lógicos a false, referencias a null.

Si no se escribe un constructor, el compilador genera uno por defecto (público, sin parámetros ni código).

Instanciación y utilización de objetos

Bombilla b;
b = new Bombilla(100, 5);

O en una sola línea:

Bombilla b = new Bombilla(100, 5);

Usando los objetos:

Bombilla b1 = new Bombilla(100, 5);
Bombilla b2 = new Bombilla(60, 0);
if (b1.fundida == false)
    b1.encender();
b2.encender();
b1.apagar();

El método main

Es el punto de comienzo de un programa orientado a objetos. Siempre se incluye en una clase con el prototipo:

public static void main(String[] args) {
    
}

El parámetro args recibe los argumentos pasados desde la línea de comandos.

Clase PruebaBombilla con el método main

public class PruebaBombilla {
    public static void main(String args[]) {
        int i;
        Bombilla b = new Bombilla();

        for (i = 1; i <= 1000; i++) {
            b.encender();
            b.apagar();
        }

        b.encender();
        b.apagar();
    }
}

Salida del programa en Eclipse

Características de los objetos

  • Poseen espacio de memoria propio.
  • Cada objeto tiene identidad propia y conserva su estado interno.
  • Deben mantener siempre un estado interno coherente; esta responsabilidad recae en la clase.