sábado, 4 de enero de 2014

Lenguajes de Programación

Cuando hemos terminado de crear el algoritmo, hemos de pasárselo al ordenador en un formato que este pueda entender. Ese formato es el programa. Un programa se escribe mediante un lenguaje de programación. Hasta la fecha podemos dividir los principales tipos de lenguaje en tres categorías:

  1. Lenguajes máquina
  2. Lenguajes de bajo nivel (ensamblador)
  3. Lenguajes de alto nivel (o tercera generación)
Cada paso del algoritmo que deseamos traducir a un lenguaje de programación se denomina instrucción o sentencia. Por tanto, todo programa es un conjunto de instrucciones que indican las operaciones que el ordenador debe realizar. Cada lenguaje de programación tiene un su propio repertorio de instrucciones y es tarea del programador el aprenderlas. Como resumen, todo lenguaje suele tener las siguientes grupos de instrucciones:
  1. De entrada/salida: Son las instrucciones que permiten transmitir los datos y la información usados en el programa a través de los diferentes periféricos (teclado, ratón, etc.)
  2. Aritmético-lógicas: Son aquellas que operan con la aritmética (sumas, restas, multiplicaciones o divisiones...) y las operaciones lógicas (And, Or, Not, etc.)
  3. De selección: Son aquellas que dependiendo de una condición permiten ejecutar una sentencia u otra, como por ejemplo la sentencia switch, las If etc. (Todo esto lo veremos más adelante cuando empecemos ya a programar en pseudocódigo)
  4. Sentencias repetitivas: Son los denominados bucles, instrucciones que permiten realizar operaciones un número determinado de veces, normalmente mientras se cumpla una condición (es el caso del bucle Do while) o una iteración de n veces (el bucle For).
  • Los lenguajes máquina
    • Los pongo en plural porque cada hardware diferente tiene su propio lenguaje máquina, ya que estos son instrucciones directamente inteligibles por el ordenador. Todas sus instrucciones son cadenas binarias (es decir, solo llevan dos dígitos, el 0 y el 1). Con estas cadenas se especifica la operación a realizar y las posiciones de memoria donde se encuentran los datos, es decir, su dirección en la memoria. Vamos que por si no os habéis dado cuenta, el lenguaje máquina no es más que código binario. Este lenguaje tiene ventajas como por ejemplo que se puede usar directamente sobre el ordenador sin tener que traducirlo a otro lenguaje. (Debéis saber que cuando se escribe un programa, por ejemplo en C, el código fuente hay que traducirlo a código máquina con un compilador, linkador, traductor etc. Pero eso ya lo veremos más adelante). Esto hace del lenguaje máquina el más rápido de todos los lenguajes de programación existentes. Pero claro, todos los inconvenientes que tienen estos lenguajes hacen que a la práctica casi nadie (por no decir nadie) los use a la hora de programar:
      • Son poco fiables
      • Solo se pueden ejecutar desde el mismo procesador
      • Es muy difícil verificar y comprobar un programa
      • Son difíciles de aprender y lentos de codificar.
  • Lenguajes de bajo nivel
    • Estos lenguajes son un poco más fáciles de utilizar que los máquina. Tienen el inconveniente de que también son exclusivos del procesador, pero a diferencia de los lenguajes máquina, en estos se usan instrucciones nemotécnicas, como por ejemplo para instrucciones matemáticas serían Sum, res, div (en español) add, sub, div (en inglés). El lenguaje más conocido de este nivel es el ensamblador. Para que veáis un ejemplo de lo que son estos lenguajes, una instrucción en lenguaje máquina que reste dos números podría ser esta:
      • 0010 1111 0001 1100 Esto podría significar que queremos restar al número de la posición de memoria 1111 el que tenemos en la posición de memoria 0001 y almacenarlo en la posición 1100. (En este caso la operación de resta sería 0010) (Ojo, esto no es así porque los números me los he inventado, habría que conocer cuales son las instrucciones del procesador para saber cuales son los códigos de las operaciones y ver donde están las posiciones de memoria de las variables y demás, pero es para que los hagáis una idea de como es una instrucción en lenguaje máquina.
      • Esa misma instrucción de arriba en lenguaje de bajo nivel podría ser esta: SUB A,B,C que significaría restar a la variable A la variable B y guardarla en C. Como veis es más fácil de recordar que el máquina, pero aún así es todavía más complicado que los de alto nivel. Además estos lenguajes ya no son inteligibles por el ordenador, hay que usar un traductor que lo transforme en lenguaje máquina. El programa escrito directamente en lenguaje de bajo nivel se denomina programa fuente, una vez traducido al lenguaje máquina se llama programa objeto, y este si es ya inteligible para el ordenador. Estos lenguajes se diferencian de los máquina en que son más fáciles de programar y su velocidad de cálculo es mayor. El traductor se llama programa ensamblador, que no es lo mismo que el lenguaje ensamblador. Estos programas suelen estar en casi todos los ordenadores. Los inconvenientes de los lenguajes ensambladores son:
          • Dependen totalmente de la computadora, lo que impide transportar el programa de una arquitectura a otra (por ejemplo, el lenguaje ensamblador de un PC es diferente al de un Macintosh).
          • Como os imaginareis es más difícil de aprender que los de alto nivel porque no solo exige conocer la sintaxis del lenguaje sino también el interior del computador.
  • Lenguajes de alto nivel
    • Estos son los más utilizados hoy en día. Son lenguajes cuya sintaxis es parecida al idioma de las personas (casi siempre en inglés, aunque hay algún lenguaje de programación en español). Estos son ya independientes de la plataforma, es decir, las instrucciones no dependen del hardware o de un ordenador determinado. Por tanto, se puede hacer la portabilidad de un sistema a otro con pocos o ningún cambio para ejecutar el programa en otro ordenador de arquitectura distinta. 
    • Las ventajas que estos lenguajes tienen son:
      • Menos tiempo de aprendizaje por parte del programador
      • Las instrucciones se basan en reglas sintácticas parecidas a los idiomas (Read, write, Open, close, while etc)
      • Modificar y poner a punto el programa es más fácil.
      • Es menos costoso hacer el programa
      • Son portables.
    • Los inconvenientes son:
      • Requieren más tiempo al necesitarse más traducciones del programa para obtener la aplicación final.
      • Son menos óptimos que los programas hechos en los otros tipos de lenguaje que explotan más los recursos internos de las máquinas.
      • Ocupan mucho más en memoria.
      • El tiempo de ejecución es mucho mayor.
Como pasa con los lenguajes de bajo nivel, el código fuente también debe ser traducido a lenguaje máquina a través de programas llamados compiladores o interpretes. Ejemplos de lenguajes de alto nivel son: 
  1. Visual Basic
  2. C/C++
  3. Java
  4. Fortran
  5. C#
Y la lista podría seguir creciendo pero no voy a poner más.
Pues aquí acaba el artículo de hoy. En el próximo hablaré de los compiladores y las fases de compilación que sufre el código fuente para poderse ejecutar en el ordenador.

No hay comentarios:

Publicar un comentario