- ¿Qué es la composición de objetos?
- Caso práctico: un sistema para un hospital
- Usar la composición
- ¿Por qué usar este enfoque?
Cuando nosotros vamos desarrollando programas más grandes en Python, empezamos a ver que las cosas se vuelven más complejas: muchas clases, muchas relaciones entre ellas, y mantener todo organizado puede ser un reto.
Aquí es donde nos ayuda un principio muy útil y poderoso: la composición de objetos.
¿Qué es la composición de objetos?
Este enfoque hace que nuestro código sea:
- Más fácil de entender
- Más flexible para cambiar o mejorar
- Más sencillo de mantener a medida que el proyecto crece
Vamos a ver cómo funciona esto en un caso real.
Caso práctico: un sistema para un hospital
Imaginemos que estamos creando una aplicación sencilla para gestionar información de un hospital. ¿Qué actores podríamos tener?
👩⚕️ Doctores
🤒 Pacientes
🏥 Departamentos
Empezamos creando tres clases muy simples para representarlos:
class Doctor:
def __init__(self, name):
self.name = name
class Patient:
def __init__(self, name):
self.name = name
class Department:
def __init__(self, name):
self.name = name
Hasta acá, cada clase tiene solo un atributo: el nombre. Pero si lo miramos bien, en la vida real estos elementos están conectados:
- Cada doctor trabaja en un departamento
- Cada doctor atiende varios pacientes
Así que, vamos a usar composición para modelar estas relaciones.
Usar la composición
En este paso, vamos a hacer que un objeto de tipo Doctor contenga otros objetos:
- Un objeto de tipo Department, que representa el departamento donde trabaja
- Una lista de objetos Patient, que son los pacientes que atiende
class Doctor:
def __init__(self, name, department):
self.name = name
self.department = department # Objeto de tipo Department
self.patients = [] # Lista de objetos Patient
def add_patient(self, patient):
# Agrega un nuevo paciente al doctor
self.patients.append(patient)
Fíjate cómo ahora un doctor tiene un departamento asignado y puede tener varios pacientes. Esto es justamente lo que queremos lograr con la composición: juntar objetos dentro de otros para formar algo más completo.
Ahora creemos algunos datos para que funcione.
# Creamos un departamento
surgery = Department("Cirugía")
# Creamos un doctor que trabaja en ese departamento
dr_smith = Doctor("Dr. Smith", surgery)
# Creamos algunos pacientes
patient1 = Patient("Juan Pérez")
patient2 = Patient("Ana Gómez")
# Asociamos los pacientes al doctor
dr_smith.add_patient(patient1)
dr_smith.add_patient(patient2)
Y así, sin necesidad de crear clases gigantescas ni complicadas herencias, podemos representar una relación realista entre departamentos, doctores y pacientes.
¿Por qué usar este enfoque?
La composición de objetos nos permite:
- Reutilizar código (por ejemplo, podemos usar la clase
Patientpara otros doctores sin cambiar nada) - Separar responsabilidades (cada clase tiene una única labor)
- Cambiar partes del sistema sin afectar todo (podemos cambiar la lógica del departamento sin tocar los doctores)
En vez de hacer todo en una sola clase gigante, lo separamos en piezas que podemos manejar mejor y combinar como necesitemos.
Tabla: Comparación entre herencia y composición
| Característica | Herencia | Composición |
|---|---|---|
| Relación | "Es un tipo de" | "Tiene un/a" |
| Flexibilidad al combinar | Más rígida | Más flexible |
| Reutilización de componentes | Limitada por jerarquía | Muy alta |
| Cambiar una parte sin afectar otra | Difícil si hay muchas clases heredadas | Fácil, cada parte es independiente |
Resumen
- La composición es una técnica para crear objetos complejos de objetos más simples.
- Permite describir relaciones del tipo “un objeto contiene a otros”.
- Con esto, logramos un código más flexible, claro y fácil de expandir.
- En Python, la composición se implementa creando atributos que son otros objetos.
- Es una alternativa a la herencia que muchas veces resulta más útil y manejable.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.