4  Conceptos Generales de la POO

La Programación Orientada a Objetos (POO) es un paradigma de programación que organiza el código en torno a “objetos” que representan entidades del mundo real. La POO permite una estructura modular, reutilizable y escalable, haciendo el código más fácil de entender y mantener.

4.1 Principios Fundamentales de la POO

La POO se basa en cuatro principios clave: Clases y Objetos, Encapsulación, Herencia y Polimorfismo. A continuación, veremos cada uno en detalle.


4.2 1 Clases y Objetos

4.2.1 Clases

Una clase es una plantilla o modelo que define las propiedades y comportamientos de un tipo de objeto. Es como un plano que describe cómo debe ser un objeto.

public class Persona { // NOMBRE DE LA CLASE
    String nombre;     // ATRIBUTO
    int edad;

    public void presentarse() { // METODO
        System.out.println("Hola, soy " + nombre + " y tengo " + edad + " años.");
    }
}

4.2.2 Objetos

Un objeto es una instancia concreta de una clase. Cuando se crea un objeto, se asigna un espacio en memoria y se puede interactuar con sus atributos y métodos.

public class Main {
    public static void main(String[] args) {
        Persona persona = new Persona();
        persona.nombre = "Ana";
        persona.edad = 25;
        persona.presentarse();
    }
}

En este ejemplo, persona es un objeto de la clase Persona con atributos nombre y edad.

4.3 2. Encapsulación

La encapsulación consiste en restringir el acceso directo a ciertos datos de un objeto, protegiendo sus atributos para que solo se modifiquen a través de métodos específicos.

4.3.1 Ejemplo de Encapsulación

class Persona {
    public String nombre;
    private int edad;

    public Persona(String nombre) {
        this.nombre = nombre;
    }

    public String getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }
}

En este caso, el atributos nombre es público y edad es privados, y solo se pueden acceder mediante los métodos getEdad() y setEdad().

4.4 3 Herencia

La herencia permite que una clase (subclase) herede atributos y métodos de otra clase (superclase), permitiendo reutilizar código y extender funcionalidades.

Ejemplo de Herencia

class Animal {
  public String nombre;
  public Animal (String nombre){
    this.nombre = nombre;
  } 
  public void sonido() {
        System.out.println("El animal hace un sonido");
  }
}

class Perro extends Animal {
  @Override
  public void sonido() {
      System.out.println("El perro ladra");
  }
}

Aquí, Perro es una subclase de Animal y hereda el atributo nombre y su método sonido(), que luego sobrescribimos (@verride) para proporcionar un comportamiento específico.

5 Polimorfismo

El polimorfismo permite que objetos de diferentes clases respondan al mismo método de formas distintas, aumentando la flexibilidad del código.

5.0.1 Ejemplo de Polimorfismo

class Animal {
    public void sonido() {
        System.out.println("El animal hace un sonido");
    }
}

class Perro extends Animal {
    public void sonido() {
        System.out.println("El perro ladra");
    }
}

class Gato extends Animal {
    public void sonido() {
        System.out.println("El gato maúlla");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal miAnimal = new Perro();
        miAnimal.sonido();
    }
}

En este ejemplo, el método sonido() se comporta de manera distinta dependiendo del tipo de objeto (Perro o Gato) que lo invoque.

TEST