Índice Temático del Apunte¶
El material de estudio de la cátedra está organizado físicamente en cuatro bloques didácticos secuenciales. Esta estructura proporciona un andamiaje progresivo para el desarrollo de tus habilidades de programación.
Bloque 1: Fundamentos del Control de Flujo y Modularización¶
Este bloque introduce la sintaxis básica de C, la gestión del estado, las bifurcaciones y los lazos, la descomposición modular, la compilación automatizada de proyectos y las bases lógicas de la verificación de software.
1. Fundamentos de Algoritmos: Representación de lógica, diagramas de flujo y variables.
2. Introducción a C y Estado: Sintaxis básica, tipos primitivos, roles de variables y estado del programa.
3. Estructuras de Control de Flujo: Decisiones condicionales, lazos (estructuras de repetición) y manejo del buffer de entrada.
4. Modularización y Ámbitos: Firmas de funciones, ámbitos de almacenamiento (
static) y descomposición top-down.5. Fases de Compilación en C: Cabeceras
.h, preprocesador, enlazado y argumentos demain.6. Testing y Aserciones Básicas: Introducción al patrón AAA, la macro
asserty la cobertura de ramas.7. Introducción a Contratos de Software: Precondiciones, postcondiciones e invariantes de lazo informales.
8. Automatización con Makefiles: Compilación incremental, grafo de dependencias y objetivos ficticios (.PHONY).
Bloque 2: Memoria¶
Análisis del modelo de memoria, punteros, cadenas de caracteres, archivos de texto, alocación dinámica, registros compuestos, representación numérica y tipos definidos por el usuario.
1. Modelo Físico de Memoria: Organización de RAM (Stack vs Heap) y hardware de memoria caché del procesador.
2. Indirección Física y Punteros: Punteros físicos, operador de dirección
&e indirección*, y simulación de pasaje por referencia.3. Arreglos Unidimensionales y Strings: Secuencias de datos estáticas, decaimiento a puntero y gestión segura de cadenas de caracteres.
4. Persistencia y Archivos de Texto: Manejo físico de archivos de texto empleando streams de caracteres (
FILE *).5. Memoria Dinámica en el Heap: Alocación con
malloc/free, punteros colgantes y detección de fugas de memoria.6. Aritmética de Direcciones y Doble Indirección: Aritmética de punteros, redimensionamiento con
reallocy matrices dinámicas (int **).7. Estructuras y Tipos Compuestos: Registros compuestos (
struct,union) y alineación en memoria (padding).8. Representación de Números: Límites de representación física, desbordamientos e imprecisión de punto flotante.
9. Conversión de Tipos (Casts): Promoción entera, coerción aritmética implícita y conversión explícita.
10. Alias de Tipos (typedef): Creación de alias de tipos personalizados y reglas de estilo.
11. Tipos Enumerativos (enum): Declaración de constantes nombradas, colisiones en espacios de nombres y switch defensivo.
Bloque 3: Algoritmos y Estructuras de Datos¶
Uso de matrices multidimensionales, Tipos de Datos Abstractos (TADs), estructuras lineales con contratos informales y formales, análisis asintótico de complejidad e introducción a la recursividad.
1. Matrices Multidimensionales: Disposición Row-Major en RAM y optimización de localidad espacial para evitar fallos de caché.
2. Tipos de Datos Abstractos (TAD): Definición de TAD, interfaces y contratos aplicados a la estructura Secuencia (listas enlazadas).
3. Pilas, Colas y Deques: Estructuras con restricciones semánticas de acceso LIFO y FIFO.
4. Testing Avanzado y Automatización: Frameworks de pruebas personalizadas y testing basado en propiedades.
5. Diseño por Contratos y Aserciones: Precondiciones, postcondiciones e invariantes de estructura usando
assert.hen C estándar.6. Complejidad Algorítmica: Eficiencia de algoritmos y de TADs, notación asintótica Big-O, límites de hardware y P vs NP.
7. Introducción a la Recursividad: Fundamentos de recursión simple y anatomía cualitativa del Stack Frame.
Bloque 4: Temas Avanzados¶
Tópicos de optimización a bajo nivel, encapsulamiento, manipulación de bits, recursividad avanzada y diseño arquitectónico de APIs robustas en C.
1. Índice de Temas Avanzados: Resumen y guía didáctica de contenidos avanzados.
2. Callbacks y Genericidad: Punteros a funciones y diseño paramétrico empleando punteros genéricos
void*.3. Encapsulamiento y Tipos Opacos: Ocultamiento estricto de información mediante tipos de datos incompletos en C.
4. Archivos Binarios: Persistencia en disco de estructuras binarias mediante
freadyfwrite.5. Operaciones Bitwise: Álgebra de Boole a nivel de bit y máscaras.
6. Manipulación de Bitmaps (BMP): Lectura, edición y escritura de imágenes rasterizadas BMP.
7. Recursividad Avanzada: Backtracking y optimización cualitativa.
8. C Idiomático y Patrones: Modismos del lenguaje C y refactorización orientada a seguridad.
9. Diseño de APIs: Principios para interfaces cohesivas y seguras.
10. Ingeniería de APIs: Modularización a gran escala y versionado de interfaces.
11. Concurrencia e Hilos: Hilos POSIX (
pthreads) y primitivas de sincronización.12. Programación con Sockets: Comunicación en red mediante sockets UNIX.