Fundamentos: Programación Orientada a Objetos

Fundamentos
Fundamentos
Actualizado: 30/06/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

Programación orientada a objetos

La programación orientada a objetos (POO) representa un paradigma fundamental que revolucionó la forma de diseñar y estructurar software. Este enfoque permite modelar problemas del mundo real mediante la creación de entidades digitales que encapsulan tanto datos como comportamientos, proporcionando una base sólida para el desarrollo de aplicaciones complejas y mantenibles.

Fundamentos conceptuales

En el núcleo de la POO encontramos la abstracción, un proceso mental que nos permite identificar las características esenciales de un objeto mientras ignoramos los detalles irrelevantes. Esta capacidad de simplificación resulta crucial para transformar conceptos del mundo físico en representaciones digitales funcionales.

Consideremos un ejemplo práctico: al modelar un vehículo en software, nos interesa su marca, modelo, velocidad y capacidad de acelerar o frenar. Sin embargo, detalles como el color específico de los asientos o la textura del volante pueden ser irrelevantes para nuestro sistema.

class Vehiculo:
    def __init__(self, marca, modelo):
        self.marca = marca
        self.modelo = modelo
        self.velocidad = 0
    
    def acelerar(self, incremento):
        self.velocidad += incremento
        return f"Acelerando a {self.velocidad} km/h"
    
    def frenar(self, decremento):
        self.velocidad = max(0, self.velocidad - decremento)
        return f"Frenando a {self.velocidad} km/h"

Clases y objetos: la base estructural

Las clases funcionan como plantillas o moldes que definen la estructura y comportamiento de los objetos. Establecen qué atributos (características) y métodos (acciones) tendrán las instancias creadas a partir de ellas.

Un objeto representa una instancia específica de una clase, con valores concretos para sus atributos. Esta distinción resulta fundamental: la clase define el "qué", mientras que el objeto materializa el "cómo".

# Definición de la clase
class Estudiante:
    def __init__(self, nombre, edad, carrera):
        self.nombre = nombre
        self.edad = edad
        self.carrera = carrera
        self.calificaciones = []
    
    def agregar_calificacion(self, nota):
        self.calificaciones.append(nota)
    
    def calcular_promedio(self):
        if self.calificaciones:
            return sum(self.calificaciones) / len(self.calificaciones)
        return 0

# Creación de objetos específicos
estudiante1 = Estudiante("Ana García", 20, "Ingeniería")
estudiante2 = Estudiante("Carlos López", 22, "Matemáticas")

Encapsulación: protección y organización

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

La encapsulación constituye uno de los pilares fundamentales de la POO, permitiendo agrupar datos y métodos relacionados dentro de una unidad cohesiva. Este principio establece niveles de acceso que controlan cómo otros componentes del sistema pueden interactuar con los elementos internos de una clase.

Los atributos privados y métodos privados permanecen ocultos al exterior, accesibles únicamente desde dentro de la propia clase. Esta restricción protege la integridad de los datos y previene modificaciones no autorizadas.

class CuentaBancaria:
    def __init__(self, titular, saldo_inicial=0):
        self.titular = titular
        self.__saldo = saldo_inicial  # Atributo privado
    
    def depositar(self, cantidad):
        if cantidad > 0:
            self.__saldo += cantidad
            return f"Depósito realizado. Saldo actual: {self.__saldo}"
        return "Cantidad inválida"
    
    def retirar(self, cantidad):
        if 0 < cantidad <= self.__saldo:
            self.__saldo -= cantidad
            return f"Retiro realizado. Saldo actual: {self.__saldo}"
        return "Fondos insuficientes o cantidad inválida"
    
    def consultar_saldo(self):
        return self.__saldo

Herencia: reutilización y especialización

La herencia permite crear nuevas clases basadas en clases existentes, heredando sus atributos y métodos. Este mecanismo facilita la reutilización de código y establece relaciones jerárquicas entre conceptos relacionados.

Una clase padre (superclase) define características generales, mientras que las clases hijas (subclases) pueden añadir funcionalidades específicas o modificar comportamientos heredados.

class Animal:
    def __init__(self, nombre, especie):
        self.nombre = nombre
        self.especie = especie
    
    def hacer_sonido(self):
        return "El animal hace un sonido"
    
    def moverse(self):
        return f"{self.nombre} se está moviendo"

class Perro(Animal):
    def __init__(self, nombre, raza):
        super().__init__(nombre, "Canino")
        self.raza = raza
    
    def hacer_sonido(self):  # Sobrescritura del método
        return f"{self.nombre} ladra: ¡Guau!"
    
    def buscar_pelota(self):  # Método específico
        return f"{self.nombre} está buscando la pelota"

Polimorfismo: flexibilidad en la ejecución

El polimorfismo permite que objetos de diferentes clases respondan al mismo mensaje de manera específica. Esta característica proporciona flexibilidad al código, permitiendo tratar objetos diversos de forma uniforme.

def entrenar_animales(lista_animales):
    for animal in lista_animales:
        print(animal.hacer_sonido())  # Cada animal responde diferente
        print(animal.moverse())

# Diferentes tipos de animales
perro = Perro("Max", "Labrador")
gato = Gato("Luna", "Siamés")
pajaro = Pajaro("Pío", "Canario")

# Tratamiento uniforme
animales = [perro, gato, pajaro]
entrenar_animales(animales)

La programación orientada a objetos proporciona un marco conceptual robusto para abordar la complejidad del desarrollo de software. Sus principios fundamentales permiten crear sistemas modulares, mantenibles y escalables, estableciendo las bases para arquitecturas de software profesionales.

Completa Fundamentos y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración