Si acabas de aprobar IIC1103 y ahora te toca IIC2233 Programación Avanzada en la UC, te tengo una noticia: el ramo cambia de cancha. Ya no se trata de imprimir un triángulo de asteriscos, sino de modelar problemas con objetos, entender cómo se guardan los datos por dentro y escribir código que otro humano pueda leer. La I1 es el primer filtro real, y mucha gente que venía volando en programación introductoria se pega el primer costalazo acá. En esta guía te explico qué entra, dónde se cae la gente y cómo llegar a la prueba con la cabeza tranquila.
Cómo está armada la I1 de IIC2233 en San Joaquín
La I1 de Programación Avanzada suele caer entre la cuarta y la quinta semana, cuando ya pasaste por sintaxis avanzada de Python y entraste de lleno a programación orientada a objetos. A diferencia de IIC1103, la prueba pesa harto y se combina con tareas grandes que corren en paralelo, así que no puedes dejar todo para la noche anterior.
El formato típico mezcla preguntas conceptuales cortas (qué imprime este código, qué error lanza, cuál es la complejidad) con uno o dos ejercicios donde tienes que escribir clases desde cero. Casi siempre es en papel o en un editor sin autocompletado, así que la sintaxis la tienes que tener en la yema de los dedos. Ojo con esto: en IIC2233 el ayudante no solo mira si el código funciona, también revisa si modelaste bien. Una solución que corre pero con clases mal pensadas pierde puntos igual.
Del enfoque de IIC1103 a POO: el salto que descoloca
El error mental más común es seguir programando como en introductoria: todo en funciones sueltas y variables globales. En IIC2233 la pregunta ya no es “¿cómo resuelvo esto?”, sino “¿qué objetos hay en este problema y cómo se relacionan?”. Si el enunciado habla de una biblioteca con libros y socios, tú tienes que ver de inmediato que ahí hay al menos dos clases, con atributos y métodos propios.
Ese cambio de chip es lo que más cuesta las primeras dos semanas. Te recomiendo que, antes de escribir una línea, hagas el ejercicio de listar los sustantivos del problema (esos son tus candidatos a clase) y los verbos (esos son tus métodos). Es simple, suena obvio, pero te ordena la cabeza y evita que entregues un archivo de 200 líneas imposible de leer.
Programación orientada a objetos: clases, herencia y polimorfismo
Este es el corazón de la I1. Tienes que dominar cómo se define una clase en Python, la diferencia entre atributos de instancia y de clase, y para qué sirve el __init__. Suena básico, pero en la prueba te van a pedir cosas más finas: sobrescribir métodos, usar super() bien, y entender qué pasa cuando una subclase hereda de una superclase.
La herencia es donde más se enreda la gente. Un patrón clásico de pregunta es darte una jerarquía (por ejemplo Vehiculo, y luego Auto y Moto que heredan de ella) y pedirte que expliques qué método se ejecuta al llamar cierta función. Ahí entra el polimorfismo: el mismo llamado se comporta distinto según el tipo real del objeto. Practica leyendo código con herencia y prediciendo la salida antes de correrlo; si le achuntas consistente, tienes ganada media prueba.
Estructuras de datos básicas: listas ligadas, pilas y colas
La otra mitad de la I1 suele ser estructuras de datos. No hablo de las listas que ya trae Python, sino de implementar tú mismo una lista ligada con nodos, o una pila (LIFO) y una cola (FIFO) usando clases. La típica pregunta te pide agregar un método: insertar al final, eliminar un nodo, invertir la lista.
Acá el error que pierde puntos es perder de vista los punteros. Cuando eliminas o insertas un nodo en una lista ligada, tienes que reconectar bien el siguiente antes de soltar la referencia, o dejas la lista rota. Te sugiero dibujar los nodos con lápiz mientras razonas: cada flecha es un puntero, y así ves clarito qué reconectar. Es lento la primera vez, pero después lo haces de memoria.
Excepciones, recursión y un poco de complejidad
En las preguntas cortas casi siempre aparecen tres temas transversales. El primero son las excepciones: saber cuándo salta un IndexError o un KeyError, y cómo se maneja con try/except. Ojo con las preguntas que te muestran código y preguntan qué error lanza; se responden leyendo con calma, no adivinando.
El segundo es la recursión: entender el caso base y el caso recursivo. Un clásico es recorrer una estructura o calcular algo sobre una lista ligada de forma recursiva. Y el tercero es una noción básica de complejidad: distinguir si un algoritmo es lineal o cuadrático mirando cuántos loops anidados tiene. No te piden demostraciones formales todavía, pero sí que reconozcas un O(n) de un O(n²) a ojo.
Ejercicios resueltos tipo I1
Para que veas el nivel, acá van dos ejercicios cortos parecidos a los que caen.
Ejercicio 1 – POO. Modela una clase CuentaBancaria con atributo saldo, un método depositar(monto) y un método girar(monto) que lance una excepción si no hay saldo suficiente. La clave del puntaje está en tres cosas: inicializar el saldo en el __init__, validar el monto antes de girar, y usar raise con un mensaje claro. Si tu girar permite dejar el saldo negativo, ya perdiste puntos aunque el código “funcione”.
Ejercicio 2 – Estructura de datos. Dada una lista ligada de números, escribe un método sumar() que recorra los nodos y devuelva la suma. La solución iterativa parte en el primer nodo, va sumando el valor y avanzando al siguiente hasta llegar a None. Si lo haces recursivo, tu caso base es el nodo None (devuelve 0) y el recursivo suma el valor actual más la llamada sobre el siguiente. Ambas valen; lo importante es que no te quedes pegado en un loop infinito por no actualizar el puntero.
Si quieres una batería completa de ejercicios corregidos con la pauta al lado, revisa también las guías de otros ramos de la UC en el hub de la Universidad Católica, donde vas a encontrar material de cálculo, álgebra y programación ordenado por prueba.
Preguntas frecuentes
¿Qué tan distinto es IIC2233 de IIC1103?
Bastante. IIC1103 te enseña a programar; IIC2233 te enseña a programar bien, con objetos, estructuras de datos y buenas prácticas. El salto de dificultad es real, así que no te confíes por haber pasado introductoria volando.
¿La I1 es en computador o en papel?
Depende del semestre y del profesor, pero es muy común que sea sin autocompletado, en papel o en un editor pelado. Por eso conviene practicar escribiendo código a mano y revisando la sintaxis sin muletas.
¿Necesito saber otro lenguaje además de Python?
No para la I1. El ramo se hace en Python, y lo que importa es que domines POO y estructuras de datos en ese lenguaje. Más adelante en la carrera verás otros, pero acá no.
¿Cuánto tengo que estudiar para la I1?
Si vienes al día con las tareas, con dos o tres tardes bien enfocadas resolviendo ejercicios tipo prueba te alcanza. El problema es llegar sin haber programado clases con tus propias manos: ahí no hay maratón que salve.
¿Puedo apoyarme en ChatGPT o Copilot para estudiar?
Para entender un concepto o pedir que te expliquen un error, sí ayuda. Pero si dejas que te escriba las clases, en la prueba (sin internet) te vas a quedar en blanco. Úsalo como tutor, no como muleta.
¿Qué pasa si me va mal en la I1?
No es el fin del mundo: quedan la I2, el examen y varias tareas con harta ponderación. Lo importante es detectar altiro qué te falló (¿modelar?, ¿punteros?, ¿sintaxis?) y reforzar eso antes de la próxima. Un mal resultado en la primera prueba es recuperable si reaccionas a tiempo.
IIC2233 asusta al principio, pero con un método claro deja de ser un monstruo. Entiende el problema, modela con objetos, dibuja tus estructuras y practica escribiendo código a mano. Si haces eso, llegas a la I1 con la confianza de quien ya vio la película antes. ¡Éxito, y a programar!
¿Quieres romperla en la UC?
Mira todos los cursos de preparación para tu universidad.
Ver cursos de la UC →