PYC2BACH Presentación
Bienvenidos a 2º de Programación y Computación. Sea cual sea vuestra vía —Ciencias y Tecnología o Humanidades y Ciencias Sociales—, el contenido de esta asignatura es el mismo, y este año pesa de otra manera: es vuestro último curso antes de la universidad o de un ciclo superior, y buena parte de lo que vamos a hacer aquí es, literalmente, lo mismo que os vais a encontrar en primero de una ingeniería, de un grado en Informática o en cualquier itinerario donde se programe en serio.
Qué vamos a hacer este curso
El curso se organiza en tres bloques, uno por trimestre:
- 1º trimestre — Programación: repasamos rápido Python (ya lo visteis el curso pasado) y entramos de lleno en Programación Orientada a Objetos: clases, objetos, herencia, polimorfismo. También pseudocódigo, diagramas de flujo y control de versiones (sí, vais a usar Git).
- 2º trimestre — Datos y Web: bases de datos relacionales y SQL, nociones de Big Data y NoSQL, y desarrollo web completo: HTML, CSS, y ya con lógica de servidor y consumo de APIs REST.
- 3º trimestre — Computación física y proyecto final: robótica, microcontroladores, IoT y Smart Cities, y cerramos el curso con un proyecto integrador que junta todo lo anterior.
Si el curso pasado en 1º programasteis casi siempre ejercicios sueltos, este año la lógica cambia: vais a construir cosas con estructura, pensadas para crecer y para que otra persona pueda entender y modificar vuestro código. Eso es, en el fondo, lo que hace un programador de verdad.
Antes de nada
La actividad de hoy: de instrucciones sueltas a una clase
Si habéis pasado por Computación y Robótica en la ESO, en algún momento programasteis un robot dando órdenes sueltas: avanza, gira, repite. Funciona, pero tiene un problema que hoy vamos a poner sobre la mesa: si queréis dos robots distintos, tenéis que duplicar todo el programa. Cada robot es un caso aparte.
La Programación Orientada a Objetos resuelve exactamente esto. En vez de programar un robot, se diseña la clase Robot: un plano que define qué datos tiene un robot (su estado) y qué puede hacer (sus acciones). A partir de ese plano, se pueden crear tantos robots como queráis, cada uno con sus propios datos, sin repetir una sola línea de código.
El ejercicio
Trabajad en parejas. Vais a diseñar una clase en papel, sin ordenador, con esta estructura:
CLASE Robot:
Atributos (los datos que tiene cada robot):
- nombre
- posición (x, y)
- dirección (norte / sur / este / oeste)
- energía (empieza en 100)
Métodos (lo que puede hacer un robot):
- avanza(): mueve el robot una casilla en su dirección actual y resta 5 de energía
- gira(sentido): cambia la dirección (izquierda o derecha) y resta 1 de energía
- reporta_estado(): dice su nombre, posición, dirección y energía actuales
- Copiad y ajustad esta clase si queréis (podéis añadir un atributo o método propio, con sentido).
- Cread dos objetos distintos de esta clase: por ejemplo,
robot1 = Robot("Nico", posición=(0,0), dirección=norte, energía=100)yrobot2 = Robot("Vega", posición=(3,3), dirección=este, energía=100). - En una tabla, simulad a mano qué pasa cuando llamáis a métodos concretos sobre cada objeto por separado. Por ejemplo:
robot1.avanza(),robot2.gira("derecha"),robot1.avanza(),robot2.avanza()… Vosotros decidís la secuencia, al menos 6 llamadas en total repartidas entre los dos. - Después de cada llamada, apuntad en la tabla cómo queda el estado de ese objeto (posición, dirección, energía). El otro objeto no cambia, porque cada uno tiene sus propios datos.
Una tabla de ejemplo, con las tres primeras llamadas:
| Llamada | Objeto afectado | Posición | Dirección | Energía |
|---|---|---|---|---|
| Estado inicial | robot1 | (0,0) | norte | 100 |
| Estado inicial | robot2 | (3,3) | este | 100 |
robot1.avanza() | robot1 | (0,1) | norte | 95 |
robot2.gira("derecha") | robot2 | (3,3) | sur | 99 |
Lo que tenéis que responder al final
Con vuestra tabla delante, contestad por escrito, entre los dos, a esto: ¿qué es exactamente lo que comparten robot1 y robot2, y qué es lo que no comparten? La respuesta a esa pregunta es la idea central de la Programación Orientada a Objetos, y si la tenéis clara hoy, el resto del trimestre os va a costar mucho menos.
Para quien vaya sobrado
Diseñad una segunda clase, RobotExplorador, que hereda de Robot (tiene todo lo suyo) y añade un atributo extra, por ejemplo muestras_recogidas, y un método recoge_muestra() que solo tiene sentido para este tipo de robot. No hace falta saber la sintaxis exacta de herencia en Python todavía —eso lo vemos en las próximas semanas—, basta con que expliquéis con vuestras palabras qué heredaría y qué añadiría de nuevo.
Al terminar
Entregad la clase diseñada, los dos objetos, la tabla de simulación y la respuesta final, con vuestros nombres. Los recojo yo.
