Algoritmos


Los lenguajes de programación constituyen la herramienta por medio de la cual se puede utilizar una computadora en la resolución de problemas.

 

La computadora es una máquina diseñada para resolver problemas ejecutando ciertas instrucciones dadas. Esa secuencia de instrucciones que describe como ejecutar la tarea asignada, recibe el nombre de programa.  La computadora a su vez contiene un conjunto de circuitos electrónicos que reconocen y ejecutan un conjunto limitado de instrucciones simples. Cualquier programa que se desee ejecutar en la máquina debe convertirse a esa secuencia de instrucciones simples que se encuentran a nivel de máquina, por ejemplo:

  • Sumar dos números
  • Comprobar si un número es cero
  • Mover datos de una parte de la memoria a otra

A ese conjunto de instrucciones primitivas de la computadora que constituye una especie de lenguaje para la comunicación con la máquina, se le denomina lenguaje máquina y esos lenguajes máquina son tan elementales que su uso es difícil y tedioso.

 

Como opción para no tener que trabajar al nivel del lenguaje máquina se han propuesto dos alternativas fundamentales, en ambas se incluye el diseño de un nuevo conjunto de instrucciones, más convenientes para las personas que el ya mencionado lenguaje máquina.

 

Un primer método para ejecutar los programas escritos consiste en sustituir cada instrucción por una secuencia equivalente de instrucciones en el lenguaje máquina. El resultado es un nuevo programa escrito totalmente en lenguaje máquina, que será el finalmente ejecutado. Esa técnica se denomina traducción y es ejecutada de manera transparente al usuario por un programa llamado traductor o compilador.

 

La otra técnica consiste en escribir el programa, el que va siendo examinado por instrucciones que a su vez van siendo ejecutadas directamente en lenguaje máquina. Esta técnica, que no requiere la generación previa del programa en lenguaje máquina, se llama interpretación y el programa que la lleva a cabo se llama interprete.

 

Aunque interpretación y compilación son bastante similares, la diferencia radica en el proceso de ejecución. En ese sentido, se destacan tres niveles en cuanto a lenguajes se refiere, el lenguaje máquina en el primer nivel, el compilador o intérprete en el segundo nivel y lenguajes como Java, C++, Python en el nivel superior.

 

Las instrucciones del primer nivel solo pueden ser llevadas a cabo por medio de circuitos electrónicos, sin que se requieran procesos de traducción o interpretación. Los programas del segundo, tercer, …, y enésimo nivel deben ser interpretados o traducidos al nivel inferior.

 

Los lenguajes de alto nivel facilitan la solución de problemas a la persona encargada de escribir programas, mediante ciertos recursos que le son provistos, tales como estructuras de datos, estructuras de control, operadores lógicos, operadores matemáticos, funciones y programación orientada a objetos.

La mayoría de las computadoras modernas permiten hasta seis niveles de organización, tal y como se muestra en el siguiente diagrama; presentado por Andrew Tanenbaum. (Organización de computadoras. Un enfoque estructurado). Así una de las tareas del programador es construir máquinas virtuales apoyadas en el nivel del hardware, hasta que sea posible escribir programas en el nivel de abstracción adecuado. 

 

El nivel 5 que es el que interesa en este estudio contiene lenguajes para ser utilizados por programadores de aplicaciones con problemas por resolver y se denominan de muchas maneras, como lenguajes de alto nivel y lenguajes orientados a problemas, como, por ejemplo, Java, C++, ADA, Fortran, C#, y muchos más.

 

Podemos representar gráficamente el procedimiento de compilación de un programa de la siguiente manera:

Al desarrollar la máquina multinivel, los diseñadores deben decidir que colocar en cada nivel. Esto es decidir que poner en el hardware y que poner en el software; siendo el hardware el nivel inferior. Algunas operaciones que las computadoras modernas ejecutan en el hardware o con software, incluyen:

  • Instrucciones para operar números enteros
  • Instrucciones aritméticas en punto flotante
  • Instrucciones aritméticas de doble precisión
  • Instrucciones para llamar y devolver procedimientos
  • Instrucciones de iteración
  • Instrucciones para contar
  • Instrucciones de manejo de cadenas de caracteres
  • Relojes

Esto muestra que el límite entre el hardware y software está cambiando arbitraria y constantemente siendo los límites también variables.