Está en la página 1de 22

Sistemas de procesamiento de

información

Introducción
De forma simplificada, vinculamos el concepto de lógica a la capacidad de comprender
una situación y definir una respuesta coherente a la misma. La programación requiere
de lógica y debemos desarrollarla independientemente de cuál sea el lenguaje de
programación que utilicemos. Entonces, la lógica de programación representa la
organización coherente de las instrucciones del programa para alcanzar sus objetivos.

Por su parte, un algoritmo es el conjunto de instrucciones necesarias para realizar una


tarea de manera sistemática.
Cuando desarrollamos un programa debemos definir una lógica de programación y la
descripción de cómo hacerlo es mediante algoritmos.

Finalmente, podemos definir a un programa como una secuencia lógica de instrucciones


que permite que la computadora realice una acción específica. Estas secuencias están
escritas en forma de código utilizando un lenguaje de programación y aplicando uno o
más algoritmos.

1. Algoritmos en sistemas de recomendación


Los sistemas de recomendación controlados por algoritmos se han vuelto piezas
claves en la industria del entretenimiento en internet. En un artículo publicado
hace unos años se describió el funcionamiento de un conjuntos de algoritmos
desarrollados por el servicio de streaming de Netflix, que elaboran rankings
personalizados de series y películas compatibles con el perfil de los usuarios. El
desafío es hacer que el cliente elija un programa en menos de 90 segundos;
después de ese tiempo la tendencia es frustrarse y perder interés. El éxito del
ranking valorizó el pase profesional de Gómez Uribe, quien en 2017 asumió como
coordinador de algoritmos y de tecnologías de productos de internet de Facebook.
La influencia y el poder de las grandes empresas de internet depende de la
creatividad de sus programadores, pero también del acceso a los macrodatos que
acumularon y que son procesados por sus algoritmos, generando informaciones
valiosas. ¿Qué impide que otra empresa desarrolle una aplicación como la de
Uber? Eso ya se ha hecho. Pero los datos de los que dispone Uber sobre el
tránsito y el comportamiento de los usuarios acumulados a lo largo del tiempo
pertenecen solo a la empresa y son valiosos.

El escándalo que implicó la filtración de datos de usuarios de Facebook, que le


hizo perder a la empresa millones de dólares, reveló una vulnerabilidad que no se
imaginaba que fuera común: algoritmos utilizados por la empresa Cambridge
Analytica lograron obtener datos del comportamiento de 50 millones de usuarios
de Facebook y los utilizaron para orientar campañas en las redes sociales por la
salida del Reino Unido de la Unión Europea y a favor de la candidatura de Donald
Trump a la presidencia de los Estados Unidos, que terminaron victoriosas. El caso
de Facebook es ejemplar de los desafíos éticos generados por la diseminación del
uso de algoritmos, aunque la filtración y el uso indebido de los datos sean tan solo
una parte del problema. La oferta de datos se ha vuelto tan importante en la
construcción de algoritmos como el desafío de programarlos. “Analizar las
características de los datos ofrecidos es fundamental a la hora de construir un
algoritmo, porque descuidos en ese momento pueden provocar sesgos en los
resultados”, afirma Marcondes Cesar. (de Pierro, 2018, https://bit.ly/3ThcvYj)
Caso lectura 1: Algoritmos y programas

A diario realizamos muchas actividades que siguen una secuencia lógica y, en general,
lo hacemos con tanta naturalidad que ni siquiera nos damos cuenta. Como
mencionamos, un algoritmo es el conjunto de pasos necesarios para resolver un
problema y, si lo pensamos un poco, veremos que efectivamente fue lo que aplicamos
para llegar al resultado final.

En otras palabras, el uso de algoritmos está muy extendido en nuestra vida. Los
encontramos en instrucciones para realizar un pan casero, guías para ejecutar procesos
o desarrollar un programa.

El colegio Manuel Belgrano, de la ciudad de Salta, viene trabajando en una propuesta


que busca desarrollar y potenciar las habilidades en programación de sus estudiantes
con el objetivo de favorecer su pensamiento lógico y la creatividad. Te contratan como
consultor para ayudarlos a elaborar una actualización de la propuesta de modelo
educativo.

​Vamos a trabajar con este caso a lo largo del módulo y en esta primera lectura tu
objetivo será validar cómo se vinculan los programas y algoritmos junto al orden en que
debemos utilizarlos.

Resolución de problemas
Una de las etapas más desafiantes al momento de resolver un problema utilizando una
computadora es identificar el modelo de resolución. Para ello necesitamos definir un
algoritmo, que es el conjunto de pasos necesarios para resolver un problema. En
escenarios complejos, los algoritmos de resolución tienen una mayor dificultad y dan
lugar a distintas formas de encarar los modelos de resolución.

Luego, necesitamos convertirlo en instrucciones codificadas en lenguaje de


programación, para que de esta forma el programa acepte la entrada de datos y realice
los pasos lógicos necesarios para generar la salida deseada.

Como la computadora trabaja con un sistema binario (0 y 1), para que un programa
pueda ser ejecutado debe utilizarse un traductor para convertir el código fuente escrito
en un lenguaje de alto nivel a lenguaje de máquina.

Figura 1: Resolución de problemas


Fuente: elaboración propia.

La computadora
Desde los inicios de la humanidad, las personas han buscado simplificar y optimizar la
manera en que resuelven sus problemas. Esta necesidad dio origen a diversos inventos
a lo largo del tiempo para realizar cálculos de una manera cada vez más rápida,
llegando hasta lo que hoy conocemos como computadora.

La palabra computadora tiene su origen en el latín computare, que significa calcular y en


putare que significa pensar. Es decir, de forma genérica, podemos asociar el término a
cualquier elemento que nos permita asociar el aspecto mecánico de contar con el
aspecto lógico de pensar.

Actualmente, conocemos como computadora a un dispositivo electrónico que permite


ejecutar una serie de comandos para procesar los datos introducidos en la entrada y
producir información en su salida. Se compone del hardware, que es el conjunto de
componentes físicos, y del software, el conjunto de programas que hacen posible su
funcionamiento.

Figura 2: Computadora
Fuente: elaboración propia.

En este punto es importante señalar que los datos son hechos o cifras en bruto, que
deben organizarse antes de utilizarse. La información son los datos que se han
procesado para que resulten de utilidad. Por ejemplo, la distancia entre dos puntos es un
dato que combinado con otros datos como el desnivel y temperatura nos permite contar
con información sobre la complejidad o no de realizar el trayecto en bicicleta. Cuando
continuamos agregando grados de abstracción, llegamos al conocimiento, que permite
adquirir información valiosa para comprender la realidad por medio de la razón, el
entendimiento y la inteligencia.

Existen distintos tipos de programas que permiten relacionar el hardware con el


software, los cuales podemos dividir en tres grandes grupos:

Sistema operativo: es el software que coordina todos los servicios y aplicaciones que
se utilizan en una computadora. Provee, además, los drivers necesarios para realizar el
manejo del hardware en los mismos.

Software de programación: es el conjunto de herramientas que permiten desarrollar


programas utilizando diferentes alternativas de metodología y lenguajes.

Software de aplicación: son los programas que están escritos en algún lenguaje de
programación para realizar actividades que resulten de utilidad para los usuarios.

Lenguajes de programación
La computadora permite la resolución de problemas de cálculo matemático y lógico, a
partir de los programas que tiene almacenados. Un programa es una secuencia de
instrucciones ejecutables que permiten que la computadora llegue a un resultado a partir
de un grupo de datos específicos. A partir de esta definición podemos inferir que un
programa nos sirve para resolver un problema específico.

Sin embargo, el hardware solo puede entender instrucciones que le llegan en un


lenguaje de máquina, basado en el sistema binario (0 y 1). Es muy difícil para las
personas comprender este tipo de lenguaje debido a que las instrucciones contienen
secuencias de ceros y unos. Para escribir un programa se utilizan distintos lenguajes,
llamados lenguajes de programación.

Los lenguajes de programación permiten la realización de un código fuente siguiendo


determinados algoritmos, a partir del cual se generan los programas que contienen las
instrucciones que se van a ejecutar en la computadora. Están formados por un conjunto
de palabras reservadas, símbolos y reglas que definen su estructura. Como veremos
más adelante, existen unos programas especiales denominados compiladores o
intérpretes, que convierten las instrucciones escritas en código fuente en instrucciones
escritas en lenguaje máquina.
De acuerdo con López, Jeder y Vega (2009) las acciones que realiza una computadora
están controladas por el programa en ejecución, que fue diseñado y construido por un
programador. Los programas requieren de creatividad y disciplina. La creatividad es una
cualidad subjetiva y puede darse en mayor o menor medida en diferentes
programadores. En cambio, la disciplina se adquiere con aprendizaje y práctica.

Antes de comenzar a escribir el programa, un programador debe definir, por ejemplo,


cuál será el paradigma de programación al que se va a ajustar. Luego, las acciones que
conforman el procesamiento de los datos se expresan como sentencias, y se escriben
utilizando un lenguaje de programación que facilita la construcción de programas sin
necesidad de que el programador utilice el lenguaje de máquina que es tan difícil de
comprender.

Clasificación de lenguajes de programación


La clasificación de los lenguajes de programación es muy amplia, dependiendo de las
características que necesitemos resaltar: el tipo de lenguaje (máquina, bajo y alto nivel),
el estilo de programación (paradigma), el ámbito de aplicación (front end/back end), etc.
Nos vamos a enfocar en los dos primeros grupos.

Tipos de lenguajes de programación

Como vimos, un lenguaje de programación requiere de una escritura específica


(sintaxis) que va acompañada de diferentes significados (semántica) para cada uno de
ellos según determinadas reglas.

De acuerdo con su finalidad, la clasificación de lenguajes de programación por tipo es la


siguiente:

Lenguaje de máquina.
Lenguaje de bajo nivel (ensamblador).
Lenguajes de alto nivel.
Lenguaje de máquina

Es aquel que puede comprender una computadora de manera directa y no necesita


traducción posterior para que el procesador pueda ejecutar el programa. Se define a
partir de su diseño de hardware y, finalmente, consta de instrucciones en términos de
números binarios (0 y 1). Los métodos de programación en este lenguaje ocupan mucho
tiempo, además de ser poco prácticos y difíciles de comprender para los
programadores.

Lenguaje de bajo nivel o ensamblador

Fue diseñado para simplificar la programación, ya que su comprensión requiere una


complejidad menor al lenguaje máquina. Todavía tiene un set de instrucciones que lo
hace dependiente del procesador, y es necesario un entendimiento de la arquitectura de
la computadora. Sin embargo, se escribe con códigos alfabéticos conocidos como
mnemónicos que son mucho más fáciles de recordar que las secuencias de dígitos
binarios. Estos mnemónicos en general abreviaturas en inglés: ADD para la suma, DIV
para dividir, etc.

Fue necesario desarrollar traductores llamados ensambladores para convertir los


programas en lenguaje ensamblador a lenguaje máquina, a la velocidad de la
computadora. En definitiva, el lenguaje ensamblador tiene las mismas funciones que el
lenguaje de máquina, pero está diseñado para poder ser escrito y comprendido con
facilidad por los programadores.
Lenguajes de programación de alto nivel

Son aquellos que permiten la utilización de un código en el cual las instrucciones o


sentencias se escriben con palabras del lenguaje natural, lo que facilita la escritura y la
comprensión del programador.

Como veremos más adelante, los programas escritos en estos lenguajes necesitan de
un intérprete o compilador para traducir las instrucciones a lenguaje de máquina. Existen
también enfoques mixtos, como el usado por Java, en el que se realizan ambos
procesos.

Los lenguajes de alto nivel proporcionan algunos beneficios como:

Evitan tener que conocer detalles de máquina de bajo nivel, como el


direccionamiento de memoria y conocer el set de instrucciones de un procesador
específico.
Simplifican la portabilidad del software, permitiendo que un programa escrito en
una computadora determinada pueda ejecutarse en otra diferente. En esta misma
lectura analizaremos algunas consideraciones sobre cómo hacerlo.
Son más fáciles de usar que los lenguajes ensambladores y de aprender para los
programadores.

A continuación, se muestra el ejemplo de una instrucción simple utilizando un lenguaje


de alto nivel, el lenguaje ensamblador y el código de máquina.
Tabla 1: Ejemplo de instrucción simple utilizando un lenguaje de alto nivel, el
lenguaje ensamblador y el código de máquina

Código de máquina Dirección Lenguaje ensamblador Lenguaje alto nivel

00010101 10000001 LOAD A

00010111 10000010 ADD B

00010110 10000011 STORE C C=A+B

Fuente: elaboración propia.

Paradigmas de programación

Un paradigma de programación define un estilo de programación de software para poder


resolver problemas. Existen diferentes formas de diseñar un lenguaje de programación y
varios modos de trabajar para obtener los resultados a partir de métodos sistemáticos
que permitan resolver una situación problemática. Las características de un lenguaje de
programación indican el paradigma al cual pertenece, que puede ser uno solo o dar
lugar a una programación multiparadigma.

Los paradigmas de programación se dividen según su proximidad al lenguaje de


máquina o el que interpretamos los humanos en imperativo y declarativo. Recordemos
que estamos haciendo referencia al estilo de programación, para no confundir con los
lenguajes de alto y bajo nivel.

Paradigma imperativo: los programas consisten en una sucesión de instrucciones


o sentencias. En este paradigma, el programador describe con el código un paso a
paso de lo que hará el programa mediante la aplicación de un algoritmo. Es decir,
se hace énfasis en cómo debe hacerse dicha tarea y no en el porqué de su
realización. Los primeros lenguajes imperativos fueron los lenguajes de máquina.
Paradigma declarativo: los programas trabajan con un alto nivel de abstracción,
por lo que no es necesario definir un algoritmo con todos los pasos. Es un tipo de
programación en la cual se indica al programa que hacer; por debajo el mismo ya
tiene los métodos y funciones que lo hacen.

Para explicarlo vamos a utilizar la óptica de Martin (2019), quien ordena los paradigmas
de programación en una línea. En un punto se encuentran los paradigmas imperativos
como los más cercanos al funcionamiento de la computadora, por lo que debemos estar
atentos a temas como la memoria, el rendimiento o los periféricos. En el otro punto se
encuentran los paradigmas declarativos, en donde se especifica qué es lo que
deseamos obtener y no cómo obtenerlo.

Figura 3: Paradigmas de programación

Fuente: [imagen sin título sobre paradigmas de programación], 2019, https://bit.ly/3J8y2xG

Programación imperativa: es el paradigma de programación más antiguo. El código


fuente de un programa consiste en una secuencia de instrucciones para un computador.
Se puede utilizar el comando GOTO para cambiar de línea.

Programación estructurada: es un tipo de programación imperativo. El programa se


lee secuencialmente de arriba hacia abajo, pero el flujo de control se define mediante
estructuras condiciones e iterativas. No utiliza GOTO.

Programación modular: divide un programa grande y complejo, en módulos o


subprogramas que se encargan de resolver un problema. Son más sencillos de crear y
de mantener. Se trata de una evolución de la programación estructurada para resolver
problemas de programación más complejos.

Programación orientada a objetos: pasamos de tener un código de arriba hacia abajo


en el que las funcionalidades están mezcladas y son difíciles de separar, a una
programación en la que dividimos el problema en objetos que tienen características
(llamadas atributos) y comportamientos (llamados métodos). Con algunos atributos y
métodos podemos interactuar, mientras que otros permanecen ocultos, ya que son
propios del objeto. Esta forma de programar permite que sea más fácil gestionar y
mantener un sistema; si necesitáramos una nueva funcionalidad podríamos agregar un
nuevo objeto o añadir datos y funcionalidades a los objetos que ya existen.
Programación declarativa: en estos lenguajes se especifica qué es lo que deseamos
obtener y no como obtenerlo. Con estos dejamos de pensar en cómo resuelve la
computadora un problema y comenzamos a pensar como lo hacemos nosotros. Sin
embargo, los lenguajes declarativos se parecen más declaraciones matemáticas (cómo
estructuramos la idea) que un lenguaje natural (forma de expresar necesidades).

Programación funcional: la programación funcional consiste en escribir una serie de


instrucciones que serán requeridas repetidamente en el programa y englobarlas todas
en bloque llamado función. Es necesario llamar a la función (que devuelve un valor)
cada vez que necesitemos ejecutarlo.

Programación lógica: es otra forma de resolver problemas expresando lo que


queremos y no cómo resolverlo. Existen una serie de condiciones que debe cumplir la
solución y el lenguaje es el motor que encuentra una solución al problema.

Programación DSL (Domain Specific Languages): los lenguajes específicos de


dominio (DSL) son aquellos que están diseñados para resolver un problema en
concreto. Structure Query Lenguaje (SQL) es uno de los lenguajes más importantes a
nivel empresarial, y es un gran ejemplo de programación declarativa. No sabemos cómo
se almacena la información ni cómo la va a recuperar la base de datos, solo indicamos
qué es lo que queremos conseguir.
Programación orientada a eventos: es un modelo donde se utilizan los eventos que
suceden para la determinación del flujo de control de un programa. Es un enfoque que
separa la lógica de procesamiento de eventos del resto del código de un programa.
Ejemplos: se presionó una tecla (editor de texto), se recibió un mensaje HTML (servidor
web), etc.
Programación lógica
Como vimos los paradigmas de la programación definen un estilo de programación de
software para poder resolver problemas, uno de los cuales es la programación lógica.

Programación lógica es un tipo de programación que se basa en la lógica de primer


orden. Se desarrollan una serie de instrucciones o sentencias en una secuencia
determinada para lograr un objetivo concreto y el motor de ejecución decide cuál es la
mejor forma de realizarlas.

La programación lógica se caracteriza principalmente por:

Los programas lógicos obtienen resultados a través de la tabla verdad y de la


deducción lógica.
Se basa en la lógica proposicional o de primer orden.
Permite que un sistema sea capaz de deducir a partir de una serie de premisas.

Lógica proposicional y de primer orden


Según EcuRed (2023) la lógica matemática es la disciplina que trata métodos de
razonamiento. En un nivel elemental, la lógica proporciona reglas y técnicas para
determinar si es o no válido un argumento dado.

El razonamiento lógico se emplea en matemáticas para demostrar teoremas; en ciencias


de la computación para verificar si son o no correctos los programas; en las ciencias
físicas y naturales, para sacar conclusiones de experimentos; y en las ciencias sociales
y en la vida cotidiana, para resolver una multitud de problemas.

Lógica proposicional

La lógica proposicional permite el razonamiento, a través de un mecanismo que primero


evalúa sentencias simples y luego sentencias complejas, formadas mediante el uso de
proposiciones. Esta metodología determina la veracidad de una sentencia compleja,
analizando los valores de veracidad asignados a las sentencias simples que la
conforman.

Las proposiciones son los elementos básicos con los que se construye esta sistema.
Una proposición es un enunciado que puede ser verdadero (1) o falso (0).
Las siguientes son proposiciones:

El hierro es un elemento químico de símbolo Fe


50 = 20+30

Las siguientes no son proposiciones

No sé si viajaremos
x = 2 + 3 (No tiene un valor de verdad claro al depender de cuanto valga x)

El concepto de proposición es abstracto por lo que no es lo mismo que una frase. Por
ejemplo, “Argentina superó a Francia en la final” y “Francia fue superado por Argentina
en la final” son dos frases diferentes y una misma proposición.

Las funciones de verdad se representan mediante conectores lógicos, representados


mediante tablas de verdad. Cada fila representa una posible combinación de valores de
verdad de dos variables proposicionales p y q. A continuación, presentamos los
conectores lógicos más utilizados.
Negación: cambia la veracidad o falsedad de un enunciado. No es lo mismo que la
negación gramatical.

Tabla 2: Negación

Fuente: elaboración propia.

Conjunción (AND): es verdadera solo cuando ambas proposiciones p y q son


verdaderas.
Tabla 3: Conjunción

Fuente: elaboración propia.

Disyunción (OR): es verdadera siempre que sean verdaderas alguna de las


proposiciones o ambas.

Tabla 4: Disyunción

Fuente: elaboración propia.

Condicional (implicación): dada dos proposiciones p y q, la implicación se escribe p 🡪


q y se lee “si p entonces q”. Solo es falsa cuando p (el antecedente) es verdadero y q (el
consecuente) es falso.

Tabla 5: Condicional

Fuente: elaboración propia.

Bicondicional (equivalencia): dadas dos proposiciones p y q, la equivalencia se


escribe ↔ y se lee “p equivale a q”. Es verdadera cuando ambas proposiciones son
verdaderas o falsas.

​Tabla 6: Bicondicional

Fuente: elaboración propia.


Disyunción exclusiva: dadas dos proposiciones p y q, la disyunción exclusiva de p y q
se escribe p⊻q y se lee “o q o q”. Es verdadera cuando una de ellas es verdadera y la
otra es falsa.

​Tabla 7: Disyunción exclusiva

Fuente: elaboración propia.

Lógica de primer orden ​

La lógica proposicional es declarativa, las proposiciones representan hechos que se dan


o no en la realidad. Supongamos los siguientes ejemplos de enunciado declarativo:

Todo número natural es entero.

El número dos es un número natural.

Entonces, el número dos es un entero.

Se trata de proposiciones entre las que no existe una relación lógica que podamos
representar con conectores. Es decir, aunque la conclusión es evidente no podemos
expresarla mediante la lógica proposicional.

La lógica de primer orden o lógica predicativa permite solucionar este inconveniente,


descomponiendo una proposición utilizando predicados, variables, funciones y
cuantificadores. De esta forma, se pueden expresar un amplio conjunto de argumentos
que ocurren en el lenguaje natural.
Predicado: es una expresión que puede conectarse con otras expresiones para formar
una oración. En la oración «Canadá es un país», la expresión «es un país» es un
predicado que se conecta con la expresión «Canadá» para formar una oración. Y en la
oración «Canadá es más grande que Cuba», la expresión «es más grande que» es un
predicado que se conecta con dos expresiones, «Canadá» y «Cuba» para formar una
oración.

En lógica matemática, cuando un predicado se conecta con una expresión, se dice que
expresa una propiedad y cuando se conecta con dos o más expresiones se dice que
expresa una relación (como la relación de ser más grande que).

En la lógica de primer orden, los predicados son tratados como funciones.

Función: es un tipo especial de relación que mapea un conjunto de objetos de entrada


(argumentos) a un único objeto de salida (imagen).
Constantes: se escriben con letras minúsculas y se utilizan para hacer referencia a un
elemento concreto. La interpretación de las constantes permanecerá invariable en las
diferentes fórmulas de un mismo sistema lógico donde pueda aparecer.

Variables: hacen referencia a elementos que no están determinados. Si tenemos la


función f(x) = 2x; la x no representa ningún número en particular.

Cuantificadores: permiten expresar el vínculo entre un predicado y un conjunto de


elementos. Cuando queremos expresar que un predicado es aplicable a todos los
elementos del conjunto utilizamos el cuantificadores universal ∀, que puede traducirse
como “para todo”.
∀x[P(x)]

La propiedad P se cumple para todo x

Cuando queremos expresar que existe al menos un elemento de ese conjunto (sin
especificar cuál) que pertenece al conjunto del predicado, utilizamos el cuantificador
existencial ∃, que puede traducirse como “existe al menos un”

∃x[P(x)]
La propiedad P se cumple para al menos un x.

Una regla de inferencia es una forma lógica que consiste en una función que toma
premisas, analiza su sintaxis y devuelve una conclusión (o conclusiones).

Traductores de lenguajes: intérpretes y compiladores


Cuando escribimos un código en un lenguaje de alto nivel se requiere luego de un
programa que realice la traducción al lenguaje que máquina que comprende la
computadora. Estos programas son llamados traductores y pueden ser compiladores o
intérpretes.

Compilador

Un compilador es un programa que toma todas las instrucciones del código de fuente
escrito en algún lenguaje de programación, lo traduce en una sola operación a código de
máquina en un proceso denominado compilación y genera un programa ejecutable.

En este proceso de compilación se detectan los errores de código, que deben ser
corregidos para luego volver a ejecutar la compilación con el fin de hacer la traducción
del código.

El programa compilado y depurado (eliminados los errores del código fuente) se


denomina programa ejecutable porque se puede ejecutar directamente sobre la
plataforma todas las veces que sea necesario. Solo debe volver a compilarse de nuevo
en caso de modificar el código fuente.

Es importante notar que el compilador genera un archivo ejecutable que sirve para la
plataforma sobre la cual se hizo el programa, si necesitamos que corra sobre otra
plataforma es necesario utilizar el compilador correspondiente.
Fases de la compilación

Aguilar (2009) profundiza en la explicación, mencionando que la compilación es el


proceso de traducción de programas fuente a programas objeto, escritos en lenguaje de
máquina. El ejecutable se genera a partir de este programa objeto con un montador o
enlazador (linker), que es dependiente de la plataforma.

​Figura 4: Compilación

Fuente: Aguilar, 2009.

Las fases de la compilación se resumen en los siguientes pasos:

1. Escribir el código fuente con un lenguaje de programación seleccionado.


2. Ejecutar el compilador.
3. Verificar y corregir errores de compilación, según el listado de errores.
4. Generar el programa objeto.
5. Emplear el montador (linker) para obtener el programa ejecutable.
6. Ejecutar el programa.

Intérprete

Un intérprete es un programa que traduce las instrucciones del código fuente escrito en
algún lenguaje de programación a código de máquina, a medida que se va ejecutando
sin necesidad de generar un archivo ejecutable. El intérprete toma la primera sentencia
del programa y la traduce a lenguaje de máquina, se ejecuta y continua con el mismo
proceso con la siguiente sentencia.

El proceso de traducción continua hasta que finalice el programa y solo se interrumpe


prematuramente si se produce un error de código. Esto facilita mucho el debug, ya que
la línea de código queda claramente identificada.

Desde el punto de vista de rendimiento, un lenguaje interpretado es algo más lento que
uno compilado, pero también es más flexible a la hora de crear el código.

Conceptualmente, el lenguaje interpretado va a requerir siempre del intérprete. Existen


aplicaciones que generan archivos ejecutables, los cuales internamente contienen el
intérprete y el programa a interpretar.

Figura 5: Intérprete

Fuente: Aguilar, 2009.

Resumen de traductores

Como vimos, los traductores permiten convertir un código fuente en un código de


máquina y permitir su ejecución en una plataforma determinada. A continuación, vamos
a presentar algunas características de compiladores e intérpretes, para tener en cuenta
al momento de elegir entre ambos.

​Tabla 8: Características de compiladores e intérpretes

Concepto Intérprete Compilador

Antes de la ejecución del


Traducción Durante la ejecución del programa
programa

Método de traducción Cada línea de código Todo el código

Detección de errores En la línea que se produce Al final de la compilación


Mayor que en un lenguaje
Velocidad ejecución Menor que en un lenguaje compilado
interpretado

Modificación de programa Se toma con la próxima ejecución Requiere volver a compilar

Lenguajes Python, PHP, Perl, BASIC Pascal, C, C++

Fuente: elaboración propia.

Enfoque mixto: compilación e intérpretes

Existen también enfoques mixtos, como el caso de Java, en el que se utilizan


simultáneamente los conceptos de intérprete y compilador. De esta forma se simplifica la
portabilidad y la alta velocidad de ejecución típica de los compiladores se complementa
con la simplificación del proceso de desarrollo.

Figura 6: Enfoque mixto

Fuente: elaboración propia.

En una primera fase el compilador de Java (javac) realiza una traducción del código
fuente original a un código intermedio binario independiente (bytecode). Este código
binario es multiplataforma y luego es procesado por el intérprete (java) que sí es
dependiente de la plataforma. En la figura el intérprete se denomina virtual machine.

Una máquina virtual (VM) es una aplicación de software que simula a una computadora,
ocultando el sistema operativo y hardware. Si se implementa la misma VM en distintas
plataformas, las aplicaciones escritas para ese tipo de VM podrán funcionar
independientemente del sistema operativo y hardware que tengan. En el caso de Java
se la conoce como Máquina Virtual de Java (JVM) y es una de las más utilizadas en la
actualidad.
Decimos que los bytecodes de Java son portables, ya que se pueden ejecutar en
cualquier plataforma que contenga una JVM con versión de Java compatible con la
utilizada en el momento de compilarlos, sin necesidad de volver a compilar el código
fuente.
Caso lectura 1: Algoritmos y programas

Retomando el caso, en esta primera lectura podemos observar que una vez analizado el
problema resulta fundamental trabajar en la lógica de programación y diseñar los
algoritmos, antes de comenzar a programar.

Para desarrollar un programa es necesario definir una lógica de programación que


otorgue un orden a las instrucciones que debemos ejecutar en la computadora y la
descripción de cómo hacerlo es mediante un algoritmo. Luego procedemos a codificar
estas instrucciones en un lenguaje de programación, para posteriormente utilizar un
traductor que convierta este código fuente a lenguaje de máquina.

Actividades de repaso
Un algoritmo representa la organización coherente de las
instrucciones del programa para alcanzar sus objetivos.

Es verdadero, un algoritmo permite organizar las instrucciones para alcanzar


los objetivos.

Es falso, un algoritmo es el conjunto de instrucciones necesarias para


alcanzar los objetivos.

Justificación

Referencias
[Imagen sin título sobre paradigmas de programación], (2019).
https://desdelashorasextras.blogspot.com/2019/10/paradigmas-y-tipos-de-
lenguajes_80.html
De Pierro, B. (2018). El mundo mediado por algoritmos.
https://revistapesquisa.fapesp.br/es/el-mundo-mediado-por-algoritmos/

EcuRed (2023). Lógica Matemática. https://www.ecured.cu/Lógica_matemática

Grupo C (s. f.). Línea del tiempo de los Lenguajes de programación.


https://www.timetoast.com/timelines/linea-del-tiempo-de-los-lenguajes-de-programacion-
45ac36c7-d98e-4267-b5e3-d1d426cb469a

Joyanes Aguilar, L. (2009). Fundamentos de programación. Algoritmos, estructura de


datos y objetos. McGraw-Hill.

También podría gustarte