Curso de python nivel medio

Estos conceptos son fundamentales para entender cómo organizar y estructurar tu código de manera efectiva cuando trabajas con clases y objetos.

1. Encapsulación

Encapsulación es el concepto de ocultar los detalles internos de un objeto y exponer solo lo necesario a través de métodos públicos. Esto ayuda a proteger el estado interno de un objeto y asegura que solo se pueda modificar a través de métodos controlados.

En Python, puedes hacer que un atributo sea "privado" (no accesible directamente desde fuera de la clase) utilizando un guion bajo _ o doble guion bajo __ antes del nombre del atributo.

Ejemplo de encapsulación

1class Coche:
2    def __init__(self, marca, modelo):
3        self.marca = marca          # Atributo público
4        self.__modelo = modelo      # Atributo privado
5
6    def obtener_modelo(self):
7        return self.__modelo
8
9    def actualizar_modelo(self, nuevo_modelo):
10        self.__modelo = nuevo_modelo
11
12# Crear una instancia de la clase Coche
13mi_coche = Coche("Toyota", "Corolla")
14
15# Acceder a un atributo público
16print(mi_coche.marca)  # Esto funciona
17
18# Intentar acceder a un atributo privado (esto dará un error)
19# print(mi_coche.__modelo)  # Esto no funciona
20
21# Usar los métodos públicos para interactuar con el atributo privado
22print(mi_coche.obtener_modelo())  # Esto sí funciona
23mi_coche.actualizar_modelo("Camry")
24print(mi_coche.obtener_modelo())
Salida de Consola!:
Toyota
Corolla
Camry

2. Herencia

Herencia es un mecanismo que permite crear una nueva clase a partir de una clase existente. La nueva clase (clase hija) hereda los atributos y métodos de la clase existente (clase padre), y puede añadir o modificar funcionalidades.

Ejemplo de herencia

1class Animal:
2    def __init__(self, nombre):
3        self.nombre = nombre
4
5    def hacer_sonido(self):
6        print("El animal hace un sonido")
7
8class Perro(Animal):  # Perro hereda de Animal
9    def hacer_sonido(self):
10        print(f"{self.nombre} dice: Guau guau!")
11
12# Crear una instancia de la clase Perro
13mi_perro = Perro("Fido")
14mi_perro.hacer_sonido()
Salida de Consola!:
Fido dice: Guau guau!

3. Polimorfismo

Polimorfismo significa "muchas formas". En el contexto de la OOP, permite que una función o un método se comporte de manera diferente dependiendo del objeto que lo llame, incluso si esos objetos comparten el mismo nombre de método.

Ejemplo de polimorfismo

1class Animal:
2    def __init__(self, nombre):
3        self.nombre = nombre
4
5    def hacer_sonido(self):
6        print("El animal hace un sonido")
7
8
9class Gato(Animal):
10    def hacer_sonido(self):
11        print(f"{self.nombre} dice: Miau!")
12
13class Vaca(Animal):
14    def hacer_sonido(self):
15        print(f"{self.nombre} dice: Muu!")
16
17# Crear instancias de Gato y Vaca
18mi_gato = Gato("Pelusa")
19mi_vaca = Vaca("Lola")
20
21# Llamar al mismo método en diferentes objetos
22mi_gato.hacer_sonido()
23mi_vaca.hacer_sonido()
Salida de Consola!:
Pelusa dice: Miau!
Lola dice: Muu!

4. Abstracción

Abstracción es el proceso de ocultar los detalles complejos de un sistema y exponer solo las funcionalidades esenciales. En Python, la abstracción se puede lograr usando clases y métodos abstractos, que son métodos definidos en una clase base pero que no tienen implementación y deben ser implementados en las clases hijas.

Para implementar abstracción en Python, utilizamos el módulo abc (Abstract Base Classes).

Ejemplo de abstracción

1from abc import ABC, abstractmethod
2
3class Forma(ABC):  # Clase abstracta
4    @abstractmethod
5    def area(self): pass
6
7class Rectangulo(Forma):
8    def __init__(self, ancho, alto):
9        self.ancho = ancho
10        self.alto = alto
11
12    def area(self):
13        return self.ancho * self.alto
14
15class Circulo(Forma):
16    def __init__(self, radio):
17        self.radio = radio
18
19    def area(self):
20        return 3.14159 * (self.radio ** 2)
21
22# Crear instancias de Rectangulo y Circulo
23mi_rectangulo = Rectangulo(4, 5)
24mi_circulo = Circulo(3)
25
26print(f"Área del rectángulo: {mi_rectangulo.area()}")
27print(f"Área del círculo: {mi_circulo.area()}")
Salida de Consola!:
Área del rectángulo: 20
Área del círculo: 28.27431

Resumen de los conceptos

  • Encapsulación: Protege los datos de un objeto ocultando su estado interno y permitiendo el acceso solo a través de métodos específicos.
  • Herencia: Permite crear una nueva clase que reutiliza y extiende el comportamiento de una clase existente.
  • Polimorfismo: Permite que diferentes clases usen el mismo nombre de método, pero implementen comportamientos diferentes.
  • Abstracción: Oculta los detalles de implementación y muestra solo las funcionalidades esenciales.

Conclusión

Estos conceptos fundamentales de la Programación Orientada a Objetos te ayudan a escribir código más organizado, reutilizable y fácil de mantener. La encapsulación protege los datos, la herencia promueve la reutilización del código, el polimorfismo permite flexibilidad, y la abstracción simplifica la complejidad. ¡Practica estos conceptos con tus propias clases y objetos para dominarlos en Python!

  • Loading...