Abstracción, análisis de soluciones alternativas y generalización
Abres la app del Metro de Santiago para ir de Escuela Militar a Baquedano. El mapa no muestra las curvas del túnel, ni la profundidad, ni la distancia real entre estaciones, y aun así te sirve perfecto. ¿Por qué un mapa «incorrecto» es mejor para viajar que uno exacto? Al final de la página lo resolvemos.
Abstracción: quedarse con lo que importa
Abstraer es dejar de lado los detalles que no sirven para el problema y conservar los que sí. Todo programa trabaja con un modelo simplificado de la realidad, nunca con la realidad completa.
El mapa del Metro es el ejemplo clásico: se conserva el orden de las estaciones, las líneas y los combinados; se omiten la distancia real, la forma exacta del trazado y la profundidad.
Lo que se conserva depende de la pregunta. Si el problema fuera «cuánto cable hay que instalar en el túnel», la distancia real sí importaría y habría que conservarla.
Explica con tus palabras qué es la abstracción en computación. Luego muestra, con el ejemplo del mapa de la red del Metro de Santiago, qué detalles de la realidad se…
Explica con tus palabras qué es la abstracción en computación. Luego muestra, con el ejemplo del mapa de la red del Metro de Santiago, qué detalles de la realidad se dejan de lado y qué información se conserva.
Generalización: de un caso a una regla
Generalizar es notar que varios casos se parecen y escribir una sola solución que sirva para todos, reemplazando los valores concretos por parámetros.
a ← 5 * 3
b ← 8 * 2
Ambas líneas hacen lo mismo con números distintos. Lo que cambia (5 y 3, 8 y 2) pasa a ser parámetro; lo que se repite (multiplicar) queda dentro de la función:
función area(base, altura)
devolver base * altura
Ahora area(5, 3) y area(8, 2) dan 15 y 16, y también sirve area(12, 7) sin escribir nada nuevo.
Un programa calcula el área de un rectángulo con las instrucciones 5 * 3 y, más abajo, 8 * 2. Otra versión define una función area(base, altura) que devuelve base *…
Un programa calcula el área de un rectángulo con las instrucciones 5 * 3 y, más abajo, 8 * 2. Otra versión define una función area(base, altura) que devuelve base * altura. Explica qué se generaliza en la segunda versión y qué ventaja tiene sobre la primera.
Un programa calcula el IVA del 19 % de tres productos con tres bloques de código casi idénticos: a) Reescribe la solución usando una función con un parámetro y un ciclo,…
Un programa calcula el IVA del 19 % de tres productos con tres bloques de código casi idénticos:
iva1 ← precio1 * 0,19
iva2 ← precio2 * 0,19
iva3 ← precio3 * 0,19
- a) Reescribe la solución usando una función con un parámetro y un ciclo, o una lista de precios.
- b) Explica qué parte del problema se generalizó.
- c) Indica qué ventaja tendría esa versión si el IVA cambiara o si hubiera 500 productos.
Elegir cómo organizar los datos
Antes de programar hay que decidir cómo guardar los datos. Hay tres opciones básicas:
| Estructura | Cuándo usarla | Ejemplo |
|---|---|---|
| Variable | Un único valor | Estudiantes presentes hoy: presentes ← 38 |
| Lista (arreglo) | Muchos valores del mismo tipo, uno tras otro | Las siete notas de un estudiante: [5,5; 6,0; 4,8; …] |
| Tabla de registros | Muchos elementos, cada uno con varios campos | Nombre, curso y RUT de cada estudiante |
Un registro agrupa campos de distinto tipo sobre una misma cosa. Una tabla de registros es una lista de registros:
| nombre (texto) | curso (texto) | RUT (texto) |
|---|---|---|
| Sofía Rojas | III A | 21.345.678-9 |
| Tomás Pérez | III B | 21.456.789-0 |
Fíjate: el RUT se guarda como texto, porque tiene puntos y guion, y no se hacen operaciones con él.
Indica para cada situación si conviene organizar los datos en una lista, en una tabla de registros (varios campos por elemento) o en una sola variable. Justifica…
Indica para cada situación si conviene organizar los datos en una lista, en una tabla de registros (varios campos por elemento) o en una sola variable. Justifica brevemente cada elección:
- a) Las siete notas de un estudiante en una asignatura.
- b) El nombre, el curso y el RUT de cada estudiante de un liceo.
- c) El número de estudiantes presentes hoy en la sala.
La biblioteca de un liceo quiere registrar sus libros en un programa. De cada libro interesa el título, el autor, el año de publicación y si está disponible o prestado.…
La biblioteca de un liceo quiere registrar sus libros en un programa. De cada libro interesa el título, el autor, el año de publicación y si está disponible o prestado.
- a) Propón una estructura de datos adecuada (por ejemplo, una tabla o una lista de registros) y define el tipo de dato de cada campo.
- b) Indica qué características de un libro real se dejan fuera (se abstraen) y por qué es razonable hacerlo.
- c) Describe cómo buscarías todos los libros disponibles de un mismo autor.
Comparar soluciones alternativas
Un mismo problema casi siempre tiene varias soluciones correctas. Para elegir, se comparan por cantidad de trabajo (cuántos pasos o comparaciones hacen), por simplicidad y por lo que permiten después.
Encontrar el mayor de una lista
-
Solución 1: recorrer una vez, guardando el mayor visto hasta ahora.
-
Solución 2: ordenar la lista y tomar el último.
mayor ← lista[1]
para i desde 2 hasta n
si lista[i] > mayor entonces
mayor ← lista[i]
Ambas son correctas: la 1 revisa todos los elementos y se queda con el mayor; la 2 deja el mayor al final por construcción del orden. Pero la 1 hace unas $n - 1$ comparaciones, y ordenar exige bastante más trabajo que una sola pasada. La 1 es más simple y más rápida. La 2 puede servir si además necesitas la lista ordenada (por ejemplo, un ranking).
Buscar un apellido en 1.000
-
Búsqueda lineal: revisa uno por uno. En el peor caso, 1.000 comparaciones.
-
Búsqueda binaria: la lista debe estar ordenada. Se compara con el del medio y se descarta la mitad. Cada paso reduce 1.000 → 500 → 250 → … Como $2^{10} = 1.024 \ge 1.000$, bastan unas 10 comparaciones.
¿Cuándo conviene cada una? La binaria es muy superior en listas grandes y que se consultan muchas veces, pero requiere orden previo (que cuesta trabajo mantener). Para una lista pequeña o que se consulta una sola vez, la lineal es más simple y suficiente.
Sumar de 1 a n
Para encontrar el mayor valor de una lista de números se proponen dos soluciones. En la solución 1 se recorre la lista una vez, guardando el mayor encontrado hasta el…
Para encontrar el mayor valor de una lista de números se proponen dos soluciones. En la solución 1 se recorre la lista una vez, guardando el mayor encontrado hasta el momento. En la solución 2 se ordena la lista de menor a mayor y se toma el último elemento.
- a) Explica en qué consiste cada solución y por qué ambas son correctas.
- b) Compara ambas en cuanto a cantidad de trabajo y simplicidad.
- c) Indica en qué caso la solución 2 podría ser útil de todos modos.
Un colegio guarda una lista de 1.000 apellidos de estudiantes y necesita saber si un apellido está en ella. Se proponen dos soluciones. La búsqueda lineal revisa los…
Un colegio guarda una lista de 1.000 apellidos de estudiantes y necesita saber si un apellido está en ella. Se proponen dos soluciones. La búsqueda lineal revisa los apellidos uno por uno desde el inicio. La búsqueda binaria exige que la lista esté ordenada alfabéticamente y, en cada paso, compara con el elemento del medio y descarta la mitad de la lista.
- a) Indica cuántas comparaciones haría como máximo la búsqueda lineal.
- b) Estima cuántas comparaciones haría como máximo la búsqueda binaria (puedes usar que $2^{10} = 1.024$).
- c) Argumenta en qué situaciones conviene cada solución, considerando el costo de ordenar la lista y la frecuencia con que se busca.
Se quiere calcular la suma de los números naturales desde 1 hasta $n$. Una solución usa un ciclo que va acumulando la suma. Otra solución usa la fórmula…
Se quiere calcular la suma de los números naturales desde 1 hasta $n$. Una solución usa un ciclo que va acumulando la suma. Otra solución usa la fórmula $\dfrac{n(n+1)}{2}$.
- a) Escribe ambas soluciones en pseudocódigo.
- b) Compara cuántas operaciones requiere cada una para $n = 100$.
- c) Analiza qué ventajas tiene cada una, y explica qué cambiaría si en lugar de sumar los números del 1 al $n$ tuvieras que sumar solo los números pares, mostrando cómo se generalizaría cada solución.
Cerrando el gancho
El mapa del Metro es mejor para viajar porque es una abstracción: omite lo que no cambia tu decisión (curvas, profundidad, metros exactos) y conserva lo que sí (orden de estaciones y combinados). Un mapa lleno de detalles esconde lo importante.
Vuelve al principio: abstraer, generalizar, elegir bien los datos y comparar soluciones son las cuatro decisiones que se toman antes de escribir una sola línea de código.