Modularidad, Funciones y Alcance
Diseño modular y gestión del Call Stack en C, JavaScript, Python y Java.
SLIDE 1 / 6
1. Principios de la Modularidad
La modularidad consiste en dividir un sistema complejo en partes independientes (módulos o subprogramas) con responsabilidades únicas.
Reusabilidad: Escribir una solución una vez e invocarla múltiples veces.
Abstracción: Ocultar los detalles de implementación detrás de una interfaz clara.
ARQUITECTURA DE MÓDULOS
[Main Application]
├── [Math Module] ├── [Auth Module] └── [UI Renderer]
2. Funciones vs Procedimientos
- Función Pura: Procesa argumentos y retorna un valor calculado sin efectos secundarios.
- Procedimiento (Void): Ejecuta acciones (E/S, mutaciones) y retorna void (o None/undefined).
modularity.c
// Función (Retorna int)
int sumar(int a, int b) {
return a + b;
}
// Procedimiento (Efecto secundario)
void imprimir_reporte() {
printf("Proceso completado\n");
} 3. Reglas de Alcance (Scope)
El alcance define la visibilidad y vida útil de una variable dentro del programa.
C / Java: Alcance de bloque {...} y ámbito global/clase.
JavaScript: Scope de bloque (let/const), función (var) y Lexical Closures.
Python: Regla LEGB (Local, Enclosing, Global, Built-in).
scope.js
let globalVar = "Global";
function testScope() {
let localVar = "Local";
if (true) {
let blockVar = "Block";
}
// blockVar no es accesible aquí
} 4. Firmas y Funciones de Primera Clase
- Java: Sobrecarga estricta (mismo nombre, distintos parámetros).
- C: Prototipos únicos. No permite sobrecarga nativa.
- JS / Python: Funciones como ciudadanos de primera clase (se pasan como argumentos).
Overloading.java
public class MathUtils {
public static int add(int a, int b) { return a + b; }
public static double add(double a, double b) { return a + b; }
} 5. El Call Stack y Recursión
Cada llamada a función crea un marco (Stack Frame) con sus parámetros y variables locales. Al retornar, el marco se destruye (LIFO).
Recursión: Función que se llama a sí misma. Requiere caso base para evitar StackOverflow.
recursion.py
def factorial(n):
if n <= 1:
return 1 # Caso base
return n * factorial(n - 1)
print(factorial(3)) # 3 * 2 * 1 = 6 6. Simulador Interactivo de Call Stack
Simulá la pila de llamadas durante la ejecución:
C Execution Trace
Paso 1: main() es empujado al Call Stack.
[CALL STACK: main()]
Navegación: Flechas Izq / Der