Parte 6 — Datos y estructuras

⏮️ Parte 5 · ⬅️ Programa · 📚 Índice · ⏭️ Parte 7

18 clases · rango 089–106 · clases de código · nivel intermedio · ~45 h (cronograma)

🧭 Dónde se guardan los datos, qué cuesta cada operación y qué significa realmente copiar.


🧭 De qué trata esta parte

Es la parte más larga del programa (18 clases) porque es la que más se transfiere: las estructuras de datos son las mismas en todos los lenguajes, cambian los nombres y las garantías. Un dict de Python, un HashMap de Java y un map de Go son la misma idea con tres contratos distintos sobre orden, nulidad y concurrencia.

El recorrido sube de lo contiguo a lo enlazado —arreglo, arreglo dinámico, tupla, rango, cadena, conjunto, mapa, pila, cola, árbol, grafo— y luego cambia de plano: cómo modelar un dato propio con registros y tipos algebraicos. Cada clase declara el coste real de sus operaciones, porque elegir estructura es elegir qué será barato y qué será caro.

El tramo final es el más peligroso de la programación cotidiana: igualdad frente a identidad, copia superficial frente a profunda y propiedad de los datos. Ahí nacen los bugs de aliasing que no se reproducen. La parte cierra sacando los datos del proceso: archivos, JSON y persistencia.

🎒 Qué necesitas traer

Las Partes 3–5. La mutabilidad (054), el paso de parámetros (079–081) y los genéricos (078) son requisito directo.

🎯 Qué sabrás hacer al terminar

Resultados comprobables: si no puedes hacerlos, la parte no está cerrada.

  1. Elegir la estructura adecuada a partir del coste de las operaciones que vas a hacer.
  2. Explicar por qué un arreglo dinámico tiene coste amortizado y qué pasa al recrecerse.
  3. Modelar un dato del dominio con registros y tipos algebraicos en lugar de con banderas sueltas.
  4. Distinguir igualdad de identidad y copia superficial de profunda en los diez lenguajes.
  5. Serializar y deserializar a JSON sabiendo qué información del tipo se pierde en el viaje.
  6. Persistir datos eligiendo formato con criterio de interoperabilidad y longevidad.

🗺️ El recorrido, clase a clase

Las clases están agrupadas en bloques por la razón que las une. El orden es secuencial: cada una asume la anterior.

🔹 Secuencias · clases 089–093

De la memoria contigua a la cadena: las estructuras lineales y su coste real.

🔹 Colecciones por clave y por disciplina · clases 094–096

Conjuntos, mapas y las estructuras que restringen el acceso a propósito.

🔹 Estructuras enlazadas · clases 097–098

El salto a lo jerárquico y a lo relacional: árboles y grafos.

🔹 Modelar un dato propio · clases 099–100

Registros y tipos algebraicos: el vocabulario del dominio dentro del sistema de tipos.

🔹 Qué significa copiar · clases 101–103

Igualdad, identidad, copia superficial y profunda, y quién es dueño del dato.

🔹 Sacar los datos del proceso · clases 104–106

Archivos, JSON y persistencia: la vida del dato más allá de la ejecución.

⚠️ Los malentendidos que esta parte corrige

Se suele creer Lo que ocurre en realidad
«Una lista y un arreglo son lo mismo.» Uno tiene tamaño fijo y coste predecible; el otro recrece, recopia y a veces invalida referencias.
«El diccionario conserva el orden de inserción.» Solo en algunos lenguajes y por decisión explícita de la implementación. Depender de ello sin comprobarlo es una bomba de relojería.
«Copiar un objeto copia lo que hay dentro.» Casi nunca: la copia por defecto es superficial y comparte lo interno. De ahí el bug que aparece «solo a veces».

🧪 Cómo estudiar esta parte

  1. Lee el modelo y el pseudocódigo primero. Si entiendes el algoritmo neutral, las diez implementaciones son diez traducciones, no diez problemas.
  2. Lee las diez implementaciones, no solo la de tu lenguaje. El aprendizaje está en el contraste: ahí se distingue lo esencial del accidente sintáctico.
  3. Ejecuta el verificador (python scripts/verificar_equivalencia.py NNN) y comprueba tú mismo que coinciden. Fuerza después un caso límite y observa quién se rompe primero.
  4. Lee primos.md para ver el mismo programa en la familia de cada lenguaje: es donde el concepto deja de estar atado a diez nombres concretos.
  5. Haz el reto de transferencia. Portarlo a un lenguaje que no dominas es la única prueba real de que aprendiste el concepto y no la sintaxis.

📚 Fuentes de referencia de esta parte

Cada clase cita estos libros en su sección de referencias. No se reproduce su contenido: la redacción es original.

🔗 Qué abre esta parte

Con datos y funciones dominados, la Parte 7 sube al nivel de las decisiones de estilo: los paradigmas.


⏮️ Parte 5 · ⬅️ Programa · 📚 Índice · ⏭️ Parte 7