Mostrando las entradas con la etiqueta clases base. Mostrar todas las entradas
Mostrando las entradas con la etiqueta clases base. Mostrar todas las entradas

jueves, 5 de diciembre de 2024

Herencia y polimorfismo

Herencia y Polimorfismo en C++


 La Programación Orientada a Objetos (POO) en C++ nos permite crear software más modular, reutilizable y fácil de mantener. Dos de los conceptos fundamentales de la POO son la herencia y el polimorfismo. Estos conceptos nos permiten extender y modificar el comportamiento de clases existentes, facilitando la creación de jerarquías y la interacción entre objetos de manera eficiente.

Explicación Teórica

Herencia:

  • Herencia es un mecanismo que permite a una clase derivada (o subclase) heredar atributos y métodos de una clase base (o superclase). La herencia promueve la reutilización del código y la creación de jerarquías de clases, lo que facilita la organización y gestión del código.

  • Clase Base (Superclase): Es la clase original de la cual derivan otras clases. Contiene atributos y métodos que son comunes a todas las subclases.

  • Clase Derivada (Subclase): Es la clase que hereda de la clase base. Puede tener atributos y métodos adicionales o redefinir los métodos heredados de la clase base.

Polimorfismo:

  • Polimorfismo significa "muchas formas" y se refiere a la capacidad de las funciones para tomar diferentes formas. En programación, esto permite que una misma interfaz funcione para diferentes tipos de datos.

  • Sobrecarga de Métodos: Permite definir múltiples métodos con el mismo nombre pero con diferentes parámetros.

  • Polimorfismo en Tiempo de Ejecución (Dynamic Polymorphism): Permite que el método que se ejecuta dependa del objeto al que se hace referencia, y no del tipo de referencia. Esto se logra mediante el uso de funciones virtuales en C++.

Ejemplos en Python

  1. Herencia:

    python
    class Animal:
        def __init__(self, nombre):
            self.nombre = nombre
    
        def hacer_sonido(self):
            raise NotImplementedError("Este método debe 
                                       ser implementado
                                       por subclases")
    
    class Perro(Animal):
        def hacer_sonido(self):
            print("Guau!")
    
    class Gato(Animal):
        def hacer_sonido(self):
            print("Miau!")
    
    # Crear objetos de las clases derivadas
    perro = Perro("Fido")
    gato = Gato("Michi")
    
    perro.hacer_sonido()  # Imprime "Guau!"
    gato.hacer_sonido()  # Imprime "Miau!"
    
  2. Polimorfismo:

    python
    def hacer_sonido_animal(animal):
        animal.hacer_sonido()
    
    hacer_sonido_animal(perro)  # Imprime "Guau!"
    hacer_sonido_animal(gato)  # Imprime "Miau!"
    

Ejemplos en C++

  1. Herencia:

    cpp
    #include <iostream>
    using namespace std;
    
    class Animal {
    public:
        string nombre;
    
        Animal(string n) : nombre(n) {}
    
        virtual void hacer_sonido() {
            cout << "Sonido de animal" << endl;
        }
    };
    
    class Perro : public Animal {
    public:
        Perro(string n) : Animal(n) {}
    
        void hacer_sonido() override {
            cout << "Guau!" << endl;
        }
    };
    
    class Gato : public Animal {
    public:
        Gato(string n) : Animal(n) {}
    
        void hacer_sonido() override {
            cout << "Miau!" << endl;
        }
    };
    
    int main() {
        Perro perro("Fido");
        Gato gato("Michi");
    
        perro.hacer_sonido();  // Imprime "Guau!"
        gato.hacer_sonido();  // Imprime "Miau!"
    
        return 0;
    }
    
  2. Polimorfismo:

    cpp
    #include <iostream>
    using namespace std;
    
    class Animal {
    public:
        virtual void hacer_sonido() {
            cout << "Sonido de animal" << endl;
        }
    };
    
    class Perro : public Animal {
    public:
        void hacer_sonido() override {
            cout << "Guau!" << endl;
        }
    };
    
    class Gato : public Animal {
    public:
        void hacer_sonido() override {
            cout << "Miau!" << endl;
        }
    };
    
    void hacer_sonido_animal(Animal &animal) {
        animal.hacer_sonido();
    }
    
    int main() {
        Perro perro;
        Gato gato;
    
        hacer_sonido_animal(perro);  // Imprime "Guau!"
        hacer_sonido_animal(gato);  // Imprime "Miau!"
    
        return 0;
    }
    

Conclusión

La herencia y el polimorfismo son esenciales para el diseño de software orientado a objetos. La herencia facilita la creación de nuevas clases basadas en clases existentes, promoviendo la reutilización del código y la organización jerárquica. El polimorfismo permite que las mismas operaciones actúen de manera diferente según el objeto, proporcionando flexibilidad y extensibilidad en el desarrollo del software.

Practicar estos conceptos te ayudará a dominar la POO y aplicar estas técnicas en tus propios proyectos, mejorando tanto la calidad del código como tu capacidad para enfrentar desafíos de programación más complejos.

Índice   <<Anterior   Siguiente>>


Entradas populares