Conceptos básicos de POO.

La Programación Orientada a Objetos (POO) es un paradigma de programación que se basa en el concepto de «objetos». Aquí tienes algunos de los conceptos básicos de la POO:

  1. Objeto:
    • Un objeto es una instancia concreta de una clase.
    • Puede representar entidades del mundo real y tiene atributos (datos) y métodos (funciones).
  2. Clase:
    • Una clase es una plantilla o un modelo para crear objetos.
    • Define los atributos y métodos que los objetos de esa clase tendrán.
    • Es como un plano o un molde para construir objetos.
  3. Atributo:
    • Un atributo es una característica o propiedad de un objeto.
    • Puede ser cualquier tipo de dato, como números, cadenas, otros objetos, etc.
  4. Método:
    • Un método es una función asociada a una clase.
    • Define el comportamiento de los objetos de esa clase.
    • Puede realizar operaciones sobre los atributos del objeto o interactuar con otros objetos.
  5. Encapsulamiento:
    • Es el principio que sugiere que los datos (atributos) de un objeto y los métodos que operan sobre esos datos deben estar encapsulados en la misma unidad (clase).
    • Ayuda a ocultar la complejidad y proteger la integridad de los datos.
  6. Herencia:
    • Permite que una clase herede atributos y métodos de otra clase.
    • Promueve la reutilización del código y la creación de jerarquías de clases.
  7. Polimorfismo:
    • Permite que objetos de diferentes clases respondan a un mismo mensaje (llamada a un método) de manera diferente.
    • Puede ser de dos tipos: polimorfismo de tiempo de compilación (sobrecarga de métodos) y polimorfismo de tiempo de ejecución (sustitución de métodos).
  8. Instancia:
    • Una instancia es un objeto específico creado a partir de una clase.
    • Cada objeto es una instancia de alguna clase.
  9. Constructor:
    • Es un método especial que se llama automáticamente al crear una instancia de una clase.
    • Se utiliza para inicializar los atributos de la instancia.
  10. Destructor:
  • Es un método especial que se llama automáticamente al destruir una instancia de una clase.
  • Se utiliza para liberar recursos o realizar tareas de limpieza.

Estos son solo algunos de los conceptos básicos de la Programación Orientada a Objetos. La POO proporciona un enfoque estructurado y modular para el desarrollo de software, facilitando la organización y mantenimiento del código.

Veamos un ejemplo que ilustre todos estos puntos:

// Definición de una clase (punto 2)
public class Animal {
    // Atributos (punto 3)
    private String nombre;
    private int edad;

    // Constructor (punto 9)
    public Animal(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }

    // Método (punto 4)
    public void hacerSonido() {
        System.out.println("Haciendo algún sonido genérico.");
    }
}

// Herencia (punto 6)
public class Perro extends Animal {
    // Atributo adicional (punto 3)
    private String raza;

    // Constructor personalizado utilizando super() (punto 9)
    public Perro(String nombre, int edad, String raza) {
        super(nombre, edad);  // Llamada al constructor de la clase padre
        this.raza = raza;
    }

    // Polimorfismo (punto 7)
    @Override
    public void hacerSonido() {
        System.out.println("Guau guau");
    }
}

// Creación de instancias (punto 1)
public class Main {
    public static void main(String[] args) {
        Animal gato = new Animal("Whiskers", 3);
        gato.hacerSonido();

        Perro perro = new Perro("Buddy", 2, "Labrador");
        perro.hacerSonido();
    }
}

Este ejemplo incluye una clase base Animal con un constructor y un método, y una clase derivada Perro que hereda de Animal y proporciona una implementación diferente del método hacerSonido. El programa principal crea instancias de ambas clases y llama a sus métodos.