Programación: estructura de un programa en C – Parte 1

Nueva entrada de la serie Programación, esta vez dedicada a la estructura de un programa. De esta forma se da un paso más al frente para aprender las bases de la programación y sobre el lenguaje C, aprendiendo cómo se estructura  el código fuente. Ya sabes que C pertenece a la programación estructurada, frente a otros lenguajes que son orientados a objetos. Dos paradigmas muy diferentes que ahora comprenderás un poco mejor.

Dividiré esta parte de la estructura en varios artículos, ya que es un poco denso para verlo solo en un único artículo. No solo me gustaría explicar este paradigma, también introducir algo sobre las estructuras de control, su clasificación, la estructura de los algoritmos y del código fuente al escribir el programa, etc.

Paradigmas de programación

Existen varios paradigmas de programación, es decir, varios modelos que deberías comprender antes de dar los siguientes pasos… Si recuerdas la entrada de la serie de Programación donde hacía una introducción, hablaba también de lenguajes de programación compilados y los interpretados. Aquí nuevamente hay otra división en las formas.

Programación estructurada

Es una forma de programar que reúne un conjunto de técnicas para crear programas fáciles de escribir, leer, verificiar y mantener. Por tanto, tiene un potencial muy elevado, de hecho, los lenguajes como C son ampliamente usado para escribir las partes más críticas del sistema operativo, como su kernel, apps científicas, etc. Personalmente me siento cómodo en este paradigma y para mi es todo un caos la OO.

El diseño de estos programas es top-down, es decir, de arriba a abajo. Eso hace que el diseño del algoritmo sea más sencilla, facilita su comprensión, y el mantenimiento se simplifica, al tener las instrucciones escritas en orden. Con una estructura de datos (conjunto de datos que maneja el programa), una estructura de control (conjunto de operaciones sobre esos datos) y programación modular (el código se divide en partes o módulos, permitiendo resolver problemas de manera más sencilla).

Programación orientada a objetos

Es el paradigma que más se está usando en la actualidad, y el que me horroriza personalmente. La programación orientada a objetos (POO) es más moderna y permite que los objetos manipulen los datos de entrada para la obtención de unos datos en la salida específicos. Muchos de los objetos ya están prediseñados e incluidos en bibliotecas.

Se basa en técnicas de herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Además, incluye una serie de conceptos o elementos nuevos como las clases (define propiedades y comportamiento de un objeto concreto), los objetos (instancia de una clase), etc. Así se tratan los datos como objetos con atributos y métodos que pueden aplicarse, y también heredarlos a otros objetos. Java es un ejemplo de este tipo de lenguajes OO, y C++  una mejora de C que agregó OO, de forma similar a lo que han hecho con Objetive-C, C#, etc.

POO vs PE

Las ventajas y desventajas de un paradigma frente a otro son bastante claras:

Ventajas

  • Programación orientada a objetos:
    • Rehusabilidad
    • Extensible
    • Portabilidad
    • Rápido desarrollo
    • Mayor abstracción
  • Programación estructurada:
    • Datos separados del diseño y dinamismo para su uso
    • Reutilización del código
    • Portabilidad
    • Rendimiento y optimización
    • Código simple de entender y mantener
    • Fácil documentación y diseño del programa
    • Fácil expansión

Desventajas

  • Programación orientada a objetos:
    • Curva de aprendizaje larga (complejidad para aprender)
    • Limitaciones para el programador
    • Mayor tamaño en los programas resultantes. Ten en cuenta, que cuando se heredan clases a partir de otras clases existentes, también se heredan de forma implícita todos los miembros de dicha clase, aunque no todos sean necesarios. Eso implica que el código no esté tan optimizado.
    • Como consecuencia del punto anterior, su velocidad de ejecución es más baja (se necesitan más recursos de hardware)
  • Programación estructurada:
    • Dificultad para adaptarse
    • Mayor cantidad de código necesario (no siempre)

Catálogo de lenguajes

Y termino con esto, a modo de satisfacer la curiosidad de algunos, si queréis conocer algunos ejemplos de lenguajes de programación de cada uno de los paradigmas, aquí tenéis un resumen con algunos de los más conocidos en cada categoría:

  • Interpretados: AutoIt, BASIC, Python, Pascal, Lips, J, Perl, PostScript, JavaScript, Ruby,…
  • Funcionales: F#, Haskell, Q,…
  • Compilados: C, Ada, COBOL, C++, C#, D, Fortran, Java*, Objetive-C, VisualBasic,…
  • Orientados a objetos: C++, C#, Object-Z, Objetive-C, Oxygene, Java,…
  • Procedurales: CLIPS, MATLAB, Oberon, PL/C, PL/I, …
  • Scripting: AWK, ColdFusion, VBScript, PHP, PowerShell, Bash,…
  • Markup: Curl, HTML, XML,…
  • Lógica: ALF, Leda, Prolog, ROOP, …
  • Concurrentes: Afnix, Clik, E, Joule, Limbo, …

Como veis, hay varios tipos más allá de los compilados, interpretados, o los OO y estructurados, pero que no me interesan ahora, y algunos se solapan y pueden verse dentro de otros tipos. Es algo complejo. Por ejemplo, Java lo puse como compilado, pero necesita de una máquina virtual a modo de «intérprete» como los interpretados, no obstante se compila para generar un código especial, y también entraría como OO. Por otro lado, C entra dentro de los compilados, pero también pertenece a los estructurados… Por otro lado, los scripts de automatización necesitan de sus interpretes y se pueden ver como interpretados…

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar