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...