Programación Orientada a Objetos (POO): Conceptos Fundamentales

1. Conceptos Básicos

Definición: La POO modela el mundo real usando objetos que tienen datos (atributos) y comportamientos (métodos).

Ejemplo:

class Persona {
    String nombre;
    int edad;

    void saludar() {
        System.out.println("Hola, soy " + nombre);
    }
}

// Creación y uso de un objeto
Persona p = new Persona();
p.nombre = "Ana";
p.edad = 25;
p.saludar();  // Imprime: Hola, soy Ana

2. Clases y Objetos

Clase: Es un molde o plantilla (por ejemplo, la clase Coche).

Objeto: Es una instancia de una clase.

Ejemplo:

class Coche {
    String modelo;
}

// Creación de un objeto
Coche miCoche = new Coche();
miCoche.modelo = "Toyota";
System.out.println("Modelo: " + miCoche.modelo);

3. Encapsulación

Definición: Consiste en ocultar los datos internos de una clase (usando private) y exponerlos mediante métodos get y set.

Ejemplo:

class Cuenta {
    private double saldo;

    public double getSaldo() {
        return saldo;
    }

    public void setSaldo(double s) {
        saldo = s;
    }
}

// Uso de encapsulación
Cuenta c = new Cuenta();
c.setSaldo(1000);
System.out.println("Saldo: " + c.getSaldo());

4. Constructores

Función: Inicializan los objetos al crearlos.

Tipos:

  • Por defecto: Sin parámetros.
  • Parametrizado: Reciben valores específicos.

Ejemplo:

class Libro {
    String titulo;

    // Constructor por defecto
    Libro() {
        titulo = "Desconocido";
    }

    // Constructor parametrizado
    Libro(String t) {
        titulo = t;
    }
}

Libro libro1 = new Libro();
Libro libro2 = new Libro("Java Básico");
System.out.println("Libro1: " + libro1.titulo); // Desconocido
System.out.println("Libro2: " + libro2.titulo); // Java Básico

5. Métodos

Definición: Son funciones que definen el comportamiento de una clase.

Ejemplo:

class Calculadora {
    int sumar(int a, int b) {
        return a + b;
    }
}

Calculadora calc = new Calculadora();
System.out.println("Suma: " + calc.sumar(5, 3));  // Imprime: 8

6. Herencia

Concepto: Permite que una clase (subclase) herede atributos y métodos de otra (superclase).

Ejemplo:

class Animal {
    void hacerSonido() {
        System.out.println("Sonido animal");
    }
}

class Perro extends Animal {
    // Se redefine el método de la superclase
    @Override
    void hacerSonido() {
        System.out.println("Guau");
    }
}

Perro p = new Perro();
p.hacerSonido();  // Imprime: Guau

7. Polimorfismo

Definición: Permite que una variable de tipo superclase referencie objetos de subclases y se invoque el método sobrescrito.

Ejemplo:

Animal a = new Perro();
a.hacerSonido();  // Imprime: Guau (ejecuta el método de Perro)

8. Abstracción

Objetivo: Enfocarse en lo esencial, ocultando detalles innecesarios. Se logra mediante clases abstractas o interfaces.

Ejemplo:

abstract class Figura {
    abstract double area();
}

class Rectangulo extends Figura {
    double ancho, alto;

    Rectangulo(double a, double h) {
        ancho = a;
        alto = h;
    }

    @Override
    double area() {
        return ancho * alto;
    }
}

Figura f = new Rectangulo(5, 4);
System.out.println("Área: " + f.area());  // Imprime: 20.0