Tema 32. Programación Estructurada y POO

1. Fundamentos y Clasificación de Lenguajes

Antes de diferenciar los modelos, el texto establece que un lenguaje de programación es un idioma diseñado para expresar procesos que ejecutan las máquinas. Se clasifican principalmente en dos bloques:

  • Procedurales o Estructurados (C, Pascal, Cobol): Se caracterizan por la dificultad para reutilizar código. Si una funcionalidad se repite en varias aplicaciones, cualquier mejora debe realizarse manualmente en cada una de ellas.
  • Orientados a Objetos (Java, C#, Ada): El código se encapsula en objetos. Esto permite que cualquier modificación en un objeto se extienda automáticamente a todos los elementos que dependen de él.

Todos comparten elementos básicos: vocabulario (palabras reservadas), signos de puntuación, identificadores (referencias a tipos de datos), operadores (aritméticos y lógicos) y sintaxis.

2. Profundización en Programación Estructurada

  • El Algoritmo como Eje Central
    • En la programación estructurada, el enfoque principal es el algoritmo. Se define como un conjunto finito de reglas que producen una secuencia de operaciones para resolver un problema. El objetivo es el proceso, es decir, la aplicación de ese algoritmo sobre el computador. En cambio, en la POO, lo primero que se busca es un objeto que realice la tarea, no solo la secuencia de reglas.
  • Estructuras de Control de Flujo Puras
    • La programación estructurada se basa exclusivamente en tres tipos de estructuras para dirigir el programa:
      • Secuencia: El orden lógico e imprescindible de las instrucciones (por ejemplo, no puedes quitar una rueda sin haber levantado el coche primero).
      • Selección: Estructuras como if y switch que dividen el flujo en caminos distintos según una condición.
      • Iteración: Bucles como for, while y do-while para repetir tareas.
Procedimientos y Módulos vs. Objetos

Para gestionar la complejidad, los lenguajes estructurados utilizan procedimientos y módulos. Aunque organizan el código, no funcionan como los objetos de la POO, que son áreas de memoria particionadas que contienen tanto los datos como el código (métodos) de forma independiente y reutilizable.

Variables Pasivas

En el modelo estructurado, se manejan variables que solo representan estructuras de datos. A diferencia de un objeto, una variable no tiene un «comportamiento» propio ni puede responder a mensajes; es simplemente un contenedor de información que el programa manipula.

Dificultad en la Reutilización Directa

Un concepto clave mencionado es que en los lenguajes estructurados (como C o Pascal) no se puede reutilizar el código fácilmente. Si una funcionalidad se repite en varias aplicaciones, el programador debe mejorar y mantener el código en cada una de ellas manualmente. La POO elimina este concepto mediante la encapsulación, donde un cambio en el objeto se extiende automáticamente a todo lo que se apoye en él.

Ciclo de vida de un programa en C

Para ilustrar este modelo, los pasos técnicos necesarios:

  1. Edición: Escritura del código fuente en un editor de texto estándar (sin caracteres de control).
  2. Compilación: El compilador traduce el fuente a ficheros objeto (.OBJ) que contienen instrucciones en código máquina.
  3. Enlazado (Linkado): El enlazador combina los ficheros objeto y las librerías necesarias para generar un fichero ejecutable (.EXE).
  4. Ejecución: Se inicia el programa desde la línea de comandos del sistema operativo.

3. Conceptos Avanzados de la POO

La POO no es solo una técnica, sino una forma de concebir programas como colecciones de objetos que colaboran.

  • Objeto vs. Variable: A diferencia de una variable (que solo guarda datos), un objeto representa tanto la estructura de datos como el comportamiento (métodos). Es un área de memoria particionada que funciona de forma independiente.
  • Clase (Blueprint): El texto utiliza la analogía de un «rodillo de rotativo» de un periódico: la clase es la matriz (el molde) y el objeto es el ejemplar impreso que ya podemos usar.
  • Mensajes y Métodos: Los objetos interactúan enviando «mensajes» (peticiones de acción). Si el receptor acepta el mensaje, ejecuta un «método» para satisfacerlo.
Pilares de la POO
  • Herencia: Las clases se organizan en árboles jerárquicos. Las subclases heredan atributos de las superclases. Existe el «método de encadenamiento»: si un objeto no encuentra un método en su clase, lo busca hacia arriba en la jerarquía hasta encontrarlo o dar error.
  • Polimorfismo: Permite que diferentes objetos respondan de forma distinta al mismo mensaje, facilitando el mantenimiento y la creación de conceptos abstractos.
  • Encapsulación: Protege la información al unir datos y funciones, evitando que cambios menores tengan efectos masivos en el sistema.

4. El caso de Java: Un Lenguaje Híbrido

Java se elige por ser fácil de aprender, portable y robusto. Su funcionamiento es único debido a su naturaleza mixta:

  • Compilado-Interpretado: No se ejecuta directamente sobre el hardware, sino sobre una Máquina Virtual (JVM) que actúa como capa intermedia.
  • Bytecode: El código fuente se compila primero a un formato intermedio llamado Bytecode.
  • Ejecución: La JVM interpreta ese Bytecode en tiempo real para la plataforma específica (Windows, Linux, etc.). Esto permite que un mismo programa funcione en cualquier sistema sin necesidad de reescribirlo.

5. Herramientas de Desarrollo (IDEs)

Finalmente, el tema describe los Entornos de Desarrollo Integrados, que empaquetan en una sola aplicación el editor, el compilador, el depurador y el constructor de interfaces gráficas. Destaca tres:

  • Eclipse: Escrito en Java, muy popular por su sistema de plug-ins que permite programar en multitud de lenguajes (C++, Python, Ruby, etc.).
  • Netbeans: Enfocado principalmente en Java, pero compatible con HTML5, PHP y C/C++.
  • Microsoft Visual Studio: El entorno estándar para Windows, orientado a lenguajes como C#, Visual Basic.NET y desarrollo web.