Chisme 174 del Lince: objetos en Python, los avistamientos del mapa
Sierra Bermeja, un mapa extendido sobre la mesa de la cueva. Víctor Vílchez, el Lince de la Noche, clava chinchetas de colores: aquí vi un zorro, aquí un búho, aquí otro lince.
—Cada chincheta es un avistamiento —dice—. Una columna y una fila. Lo paso a Python y listo.
Escribe las coordenadas del primero. Luego las del segundo. Luego las del tercero. A la cuarta chincheta ya va por el cuaderno de las variables.
La Gata Montesa observa la pantalla.
—Lince, ¿cuántos nombres de variable llevas?
—Ocho. No, diez. Espera.
Introducción
Hoy empezamos la programación orientada a objetos por el principio: por qué hace falta. Antes de aprender nada nuevo, vamos a sentir la incomodidad de trabajar con datos que van juntos pero se guardan sueltos.
Antes de la clase, pruébalo en el simulador de avistamientos del Chisme 174. Son cinco minutos: tocas el mapa, el código crece y tú miras qué se complica.

El programa
Cada avistamiento tiene cinco datos: dónde está (x, y), qué animal es, de qué especie y a qué hora se vio. Con variables sueltas se escribe así:
# Avistamientos en el mapa (x = columna, y = fila)
x1 = 4; y1 = 3
x2 = 9; y2 = 7
x3 = 8; y3 = 2
def marcar(x, y, nombre, especie, hora):
print(nombre, especie, hora, "en", x, y)
marcar(x1, y1, "Lince", "ibérico", "22:10")
marcar(x2, y2, "Zorro", "común", "23:30")
marcar(x3, y3, "Búho", "real", "01:15")
Funciona. El mapa lo dibuja bien. El problema no está en que falle, sino en lo incómodo que es.
Qué se complica
Fíjate en tres cosas mientras añades avistamientos en el simulador.
Las variables se multiplican. Con cada avistamiento hay que inventar dos nombres nuevos: x4, y4, x5, y5. Con seis puntos, doce variables.
Los datos que van juntos no están juntos. Para Python, x1 y y1 no tienen nada que ver. Eres tú quien sabe que son las dos mitades de un mismo punto.
La función tiene cinco parámetros y el orden importa. Elige en el simulador «Equivocarme en la llamada» y escribe y3, x3 en lugar de x3, y3. Python no da ningún error. El búho aparece en otro sitio, y solo te das cuenta si miras el mapa.

Cómo probar los avistamientos en Python
- Mira el mapa y el programa: ¿dónde está cada punto?
- Toca el mapa para añadir un avistamiento. Mira qué líneas nuevas aparecen en el código.
- Fíjate en el contador de variables sueltas.
- Elige una llamada en «Equivocarme» y mira dónde acaba el punto.
Preguntas de comprobación
Las comentamos en voz alta al empezar la clase.
- ¿Cuántas variables sueltas hacen falta para 4 avistamientos, si cada uno tiene x e y?
- ¿Qué ha pasado cuando el punto sale en un sitio que no es el suyo y Python no da ningún error?
- ¿Qué datos «viajan juntos» en cada avistamiento?
Qué hemos aprendido
- Varios datos que van juntos (x e y de un punto, o los cinco de un avistamiento) son incómodos si se guardan en variables sueltas.
- Una función con muchos parámetros es fácil de confundir: Python solo mira el orden.
- Un error de orden no avisa: el programa se ejecuta y el resultado está mal.
Para seguir investigando
- Cómo lo resuelve Python: el tutorial oficial sobre objetos.
- La solución explicada con un zorrito: el Chisme 76, programación orientada a objetos en Python.
- Todos los chismes, en el catálogo de los Chismes del Lince.
Y ahora, una pregunta
El Lince tiene el mapa lleno de chinchetas y un programa lleno de variables. Mira a la Gata.
—Lo que yo quiero es decirle a Python: «esto es un avistamiento». Y que lo entienda como una sola cosa, con su x, su y, su nombre y su hora.
—Eso —sonríe la Gata— no existe en Python. Todavía. ¿Y si pudiéramos crear nuestro propio tipo de dato?
Eso lo resolvemos en clase.
Ejemplo educativo: los avistamientos y las horas son inventados.
