2 Lenguajes de programación
En esta sección se hará una revisión de algunos temas relacionados con la programación de los computadores y los lenguajes de programación. En esta revisión se hace mención a los tipos de lenguaje de programación y a los paradigmas de programación.
Leer las secciones 1.8 a 1.17 del libro: L. Joyanes Aguilar, Fundamentos de programación: algoritmos, estructura de datos y objetos. McGraw Hill, 2020 [Online]. Disponible en: http://www.ebooks7-24.com.ezproxy.unal.edu.co/?il=10409&pg=1 o en http://ezproxy.biblored.gov.co:2117/?il=10409&pg=1
Leer: Programming paradigm https://en.wikipedia.org/wiki/Programming_paradigm
En sus propias palabras, explique lo que le transmitió y lo que le enseño cada parte de lo que leyó en el texto, incluya su discusión, reflexiones y conclusiones al respecto; exponga lo que no entendió e intente encontrar por su cuenta respuestas a las preguntas que le surgieron, para poder compartirlas en clase.
2.1 La programación de computadores
“Un programa de computador es un conjunto detallado de instrucciones paso a paso que indican al dispositivo las acciones a realizar con exactitud. Si cambiamos el programa, entonces la computadora realiza una secuencia diferente de acciones y, por consiguiente, ejecutará una tarea diferente”.
Un programa de computador sueler ser la implementación de un algoritmo en un lenguaje de programación, que podrá ser ejecutado en un computador.
“El software (los programas) regulan el hardware (la parte física)”. “El proceso de creación de software se llama programación”.
2.2 ¿Qué es un lenguaje de programación?
Un lenguaje de programación es un lenguaje artificial con reglas gramaticales precisas que permite al programador expresar una serie de instrucciones. Estas instrucciones están destinadas a controlar el comportamiento lógico o físico de un sistema informático, permitiendo realizar tareas específicas u obtener ciertos resultados. Este conjunto de instrucciones, escrito en un lenguaje de programación, se conoce como programa informático.
Como un programa se puede ver como una secuencia de instrucciones que le dicen a un computador lo que debe hacer, naturalmente esas instrucciones se le deben dar en un lenguaje que pueda “entender”. El lenguaje nativo de los computadores es un lenguaje de ceros y unos (binario). Es por esto que se necesita un lenguaje intermedio (lenguaje de programación) que permita comunicar al programador con el computador.
El conjunto de palabras o símbolos (código de escritura) que se usan para que un computador reciba instrucciones es lo que se llama un lenguaje de programación. Cada lenguaje de programación tiene un formato preciso (su sintaxis) y un significado preciso (su semántica).
El conocer el paradigma y el lenguaje de programación bajo el cual esta o estará escrito un programa es lo que nos permite entender y trabajar colaborativamente en el programa.
Existen numerosos lenguajes de programación (por ejemplo, ver los que se listan y comparan en https://en.wikipedia.org/wiki/Comparison_of_programming_languages).
Cada lenguaje de programación tiene sus características propias, y por ende, tiene sus propias ventajas y desventajas dependiendo de cómo se le mire. En el gráfico de este enlace se dan unas ciertas ventajas y desventajas de los “principales lenguajes de programación para ciencias de datos” (en la opinión del que hizo el gráfico). Adicionalmente, tenemos la comparación que por ejemplo se hace aquí
Por otro lado, es importante tener claro que los lenguajes de marcado no son lenguajes de programación. En el Apéndice A encontrarán una pequeña revisión de estos otros tipos de lenguaje. Dicha revisión está enfocada en lo que suelen necesitar estadísticos y afines, de los lenguajes de marcado, para la obtención de informes, reportes, presentaciones y documentos en general.
Escribir en LaTeX no se considera programar porque LaTeX es un sistema de tipografía, no un lenguaje de programación diseñado para ejecutar instrucciones lógicas o manipular datos. LaTeX es un lenguaje de marcado que se utiliza para crear documentos con una estructura y formato específicos, como artículos, libros o presentaciones. Su objetivo principal es la presentación y organización del contenido, no la ejecución de algoritmos o el control de flujos de datos.
A diferencia de los lenguajes de programación, como Python, C++ o R, donde se escriben secuencias de instrucciones para realizar cálculos, manipular información o interactuar con el sistema operativo, LaTeX simplemente organiza y formatea el texto de acuerdo con las especificaciones del usuario, sin tener la capacidad de ejecutar operaciones lógicas o matemáticas de manera dinámica.
2.3 Tipos de lenguajes de programación
- Lenguajes de máquina: Instrucciones en cadenas binarias.
- Lenguajes de bajo nivel: Código de maquina y lenguaje ensamblador, se trabaja con los registros de memoria de forma directa.
- Lenguajes de medio nivel: Se acerca a los lenguajes de bajo nivel pero teniendo al mismo tiempo algunas cualidades de lenguaje humano.
- Lenguajes de alto nivel: Están formados por elementos lo más cercanos que se pueda al lenguaje natural.
2.4 Traducción de los lenguajes
Un computador únicamente “entiende” instrucciones en cadenas binarias, así que todos los demás lenguajes de programación deberán traducirse a lenguaje de máquina para que el computador pueda seguir las instrucciones que ahí se le dan. Es evidente que se requiere un mecanismo que traduzca en lenguaje de máquina, las instrucciones dadas en el lenguaje de programación de nuestra elección. Dicho mecanismo es básicamente un programa que se encarga de leer el lenguaje que estemos utilizando (programa fuente) y lo traduce a un programa equivalente en el lenguaje de máquina (programa objeto). Como parte importante de este proceso de traducción, el traductor informa a su usuario de la presencia de errores en el archivo fuente.
La traducción se hace usualmente de una de dos maneras:
Se traducen por completo todas las instrucciones que están dadas en un archivo, produciendo otro archivo con las instrucciones traducidas. A ese proceso se lo llama compilar y al programa traductor se le denomina compilador.
Las instrucciones se van traduciendo conforme son encontradas o dadas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como interpretes.
2.5 Paradigmas de programación
Un paradigma de programación representa un enfoque o forma de diseñar soluciones computacionales a un problema. Los paradigmas varían en la forma en que se abstraen los elementos del problema y en los pasos utilizados para solucionarlo, lo que resulta en los diferentes enfoques de cada paradigma.
Programación imperativa:
En ciencias de la computación, la programación imperativa es un paradigma de programación que utiliza sentencias para cambiar el estado de un programa. De manera similar a la forma imperativa en los lenguajes naturales, la programación imperativa consiste en comandos que la computadora debe ejecutar. Este paradigma se centra en describir cómo opera el programa paso a paso, en lugar de enfocarse en una descripción de alto nivel de los resultados esperados.
Programación estructurada:
La programación estructurada es un paradigma de programación que busca mejorar la claridad, la calidad y el tiempo de desarrollo de un programa mediante el uso extensivo de estructuras de control estructuradas de selección y repetición, estructuras de bloques y subrutinas.
Programación procedimental:
La programación procedimental es un paradigma de programación, derivado de la programación imperativa, basado en el concepto de llamada a procedimientos. Los procedimientos (un tipo de rutina o subrutina) contienen una serie de pasos computacionales que deben ejecutarse. Cualquier procedimiento dado puede ser llamado en cualquier punto de la ejecución de un programa, incluso desde otros procedimientos o a sí mismo.
Programación orientada a arreglos:
En ciencias de la computación, la programación orientada a arreglos se refiere a soluciones que permiten aplicar operaciones a un conjunto completo de valores a la vez. Los lenguajes de programación modernos que soportan la programación orientada a arreglos (también conocida como programación vectorial o de múltiples dimensiones) están diseñados específicamente para generalizar operaciones en escalares de modo que puedan aplicarse de manera transparente a vectores, matrices y arreglos de dimensiones superiores. En estos lenguajes, una operación que actúa sobre arreglos completos se conoce como una operación vectorizada.
Programación orientada a objetos:
La programación orientada a objetos es un paradigma de programación basado en el concepto de <
>, los cuales pueden contener datos y código: los datos en forma de campos (también llamados atributos o propiedades) y el código en forma de procedimientos (también conocidos como métodos).
Programación funcional:
En ciencias de la computación, la programación funcional es un paradigma de programación en el cual los programas se construyen aplicando y componiendo funciones. Es un paradigma declarativo en el que las definiciones de las funciones son árboles de expresiones que mapean valores a otros valores, en lugar de ser una secuencia de sentencias imperativas que actualizan el estado en ejecución del programa.
Los lenguajes de programación pueden incorporar varios paradigmas (lenguajes multiparadigma). En el siguiente enlace podrán encontrar una rápida revisión de la relación entre algunos lenguajes de programación y algunos paradigmas asociados a dichos lenguajes:
https://en.wikipedia.org/wiki/Comparison_of_multi-paradigm_programming_languages
En este material nos enfocaremos en:
El paradigma de programación imperativa estructurada procedimental (PIEP), en donde un conjunto de instrucciones se ejecutan de una en una, de principio a fin, de modo secuencial excepto cuando intervienen estructuras de control o procedimientos.
El paradigma de programación orientado a objetos (POO), el cual se basa en el diseño y construcción de objetos que se componen de datos (atributos) y operaciones sobre esos datos (métodos). El programador define en primer lugar los objetos del problema junto con sus atributos y operaciones.
Adicionalmente, se tocarán algunos aspectos o temas que se podrían considerar parte de los paradigmas de programación funcional y orientado a arreglos.