Conceptos básicos de la programación orientada a objeto
|
Una clase es una plantilla o molde para crear objetos. Define qué atributos y métodos tendrán los objetos creados a partir de ella. Una clase describe el comportamiento y las propiedades comunes de los objetos que pertenecen a esa clase.
class Coche:
def __init__(self, marca, modelo):
self.marca = marca # Atributo
self.modelo = modelo # Atributo
def conducir(self): # Método
print(f"El {self.marca} {self.modelo} está conduciendo")
Objeto
Un objeto es una instancia de una clase. Cuando creas un objeto de una clase, ese objeto tiene acceso a los atributos y métodos definidos en la clase. Instanciación: El proceso de crear un objeto a partir de una clase
mi_coche = Coche("Toyota", "Corolla") # Instanciación del objeto
mi_coche.conducir() # Llamada a un método del objeto
Atributos
Los atributos son variables asociadas a un objeto o clase. Estos representan el estado o las propiedades del objeto. Los atributos pueden ser de dos tipos:
Atributos de instancia: Son específicos de cada objeto. Se definen dentro del constructor __init__ y se accede usando self.
Atributos de clase: Son compartidos por todas las instancias de la clase. Se definen dentro de la clase, pero fuera de cualquier método.
class Coche:
def __init__(self, marca, modelo):
self.marca = marca # Atributo de instancia
self.modelo = modelo # Atributo de instancia
Métodos
Los métodos son funciones que están definidas dentro de una clase y describen el comportamiento de los objetos. Los métodos pueden acceder a los atributos de la instancia y modificar su estado.
Métodos de instancia: Son los métodos que actúan sobre una instancia (objeto) específica. Se definen con def y el primer parámetro siempre es self, que hace referencia a la instancia actual.
class Coche:
def __init__(self, marca, modelo):
self.marca = marca
self.modelo = modelo
def conducir(self):
print(f"El {self.marca} {self.modelo} está conduciendo")
Encapsulamiento
El encapsulamiento es el concepto de ocultar la implementación interna de un objeto y exponer solo lo necesario para su uso. Esto ayuda a proteger el estado interno del objeto y garantiza que los datos sean accedidos y modificados solo a través de métodos específicos.
En Python, se puede hacer encapsulamiento usando convenciones como el uso de un guion bajo (_) o dos guiones bajos (__) al principio de un atributo o método para indicar que debe ser tratado como privado, aunque no es una restricción estricta.
class Coche:
def __init__(self, marca, modelo):
self._marca = marca # Atributo protegido
self.__modelo = modelo # Atributo privado
def obtener_modelo(self):
return self.__modelo # Método para acceder al atributo privado
Herencia
La herencia es un mecanismo que permite crear una nueva clase (subclase) a partir de una clase existente (superclase). La subclase hereda los atributos y métodos de la superclase y puede modificar o extender su comportamiento.
class Vehiculo:
def __init__(self, marca, modelo):
self.marca = marca
self.modelo = modelo
def conducir(self):
print(f"El {self.marca} {self.modelo} está conduciendo")
class Coche(Vehiculo): # Coche hereda de Vehiculo
def __init__(self, marca, modelo, puertas):
super().__init__(marca, modelo) # Llama al constructor de la superclase
self.puertas = puertas
def abrir_puertas(self):
print(f"Abriendo las {self.puertas} puertas del {self.marca} {self.modelo}")
Polimorfismo
El polimorfismo permite que diferentes clases tengan métodos con el mismo nombre, pero con comportamientos diferentes. En otras palabras, un mismo método puede comportarse de manera diferente dependiendo del objeto que lo llame.
class Gato:
def hacer_sonido(self):
print("Miau")
class Perro:
def hacer_sonido(self):
print("Guau")
def hacer_sonido_animal(animal):
animal.hacer_sonido()
gato = Gato()
perro = Perro()
hacer_sonido_animal(gato) # Miau
hacer_sonido_animal(perro) # Guau