Lenguajes de Programación: Paradigmas, Tipos y Ejecución

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 12,29 KB

Conceptos Clave de Programación Orientada a Objetos

  • Herencia: Pueden declararse clases hijas que heredan las propiedades y métodos de la clase padre.
  • Los métodos heredados pueden sobrecargarse, es decir, dentro de la misma clase puede aparecer definido con distinto comportamiento el mismo método con diferente número y/o tipo de parámetros.
  • Polimorfismo: Característica que permite que un método se comporte de diferente manera dependiendo del objeto sobre el que se aplica.
  • Encapsulamiento: Permite ocultar detalles internos de una clase.

Paradigma Declarativo

El código indica qué es lo que se quiere obtener, pero no cómo se tiene que obtener. El programador tiene que pensar en los resultados que precisa, pero no en la secuencia de órdenes para que se lleve a cabo. Ejemplos: Lisp, Prolog o SQL.

Clasificación por la Forma de Traducirse a Lenguaje Máquina y Ejecutarse

Se llama código fuente al código escrito en un lenguaje de programación mediante una herramienta de edición. Este código se guarda en un archivo y tendrá que traducirse a lenguaje máquina para poder ser ejecutado. La traducción puede hacerse mediante compiladores y/o intérpretes.

Pueden considerarse tres grupos de lenguajes de programación teniendo en cuenta la forma de traducirse a lenguaje máquina y ejecutarse:

  • Lenguajes compilados.
  • Lenguajes interpretados.
  • Lenguajes de máquina virtual.

Lenguajes Compilados

Disponen de un compilador que traduce el código fuente a código máquina, y guardan el resultado en un archivo ejecutable. Con ese archivo se puede ejecutar el programa cuantas veces sea necesario sin tener que repetir el proceso de generación. El tiempo de espera entre ejecución y ejecución es ínfimo.

Lenguajes Compilados - Características

El proceso de traducción se hace en tiempo de compilación y una sola vez. La ejecución es muy rápida, ya que el ejecutable está en lenguaje máquina. El ejecutable solo funciona para la plataforma para la que fue creado. El usuario que lo ejecuta no tiene que conocer el código fuente. El programador tiene el código fuente más protegido.

El ejecutable no se generará si existen errores léxicos, sintácticos o semánticos. Interrumpir la ejecución puede afectar a la plataforma.

La modificación del código fuente implica volver a generar el archivo ejecutable. Se necesita un programa denominado enlazador que identifique las referencias a nombres externos en el programa objeto.

Lenguajes Compilados – Ejemplos

  • C
  • Pascal
  • Cobol

Lenguajes Interpretados

Ejecutan las instrucciones sin que se genere código objeto. Necesitan un intérprete en memoria para que en tiempo de ejecución se vaya traduciendo el código fuente a lenguaje máquina.

El código fuente es traducido por el intérprete a un lenguaje entendible para la máquina paso a paso, instrucción por instrucción. El proceso se repite cada vez que se ejecuta el programa.

Lenguajes Interpretados - Características

  • No existe un archivo ejecutable.
  • El proceso de traducción se hace cada vez que se ejecuta.
  • La ejecución es lenta.
  • El archivo puede ejecutarse en diferentes plataformas siempre que exista intérprete para ellas.
  • Interrumpir la ejecución solo afecta al intérprete, y no a la plataforma.

Lenguajes Interpretados – Ejemplos

  • Ruby.
  • Python.
  • PHP.
  • JavaScript.

No es necesario que el usuario final posea el compilador para ejecutar el programa. Solo necesitan un navegador actualizado y conexión a Internet.

Lenguajes de Máquina Virtual

Los lenguajes de máquina virtual hacen una compilación del código fuente, pero en lugar de compilar a código máquina, compilan a código intermedio. El código intermedio tiene varias características:

  • Solo se genera si no se encuentran errores en el código fuente.
  • Es independiente de la plataforma.
  • La máquina virtual, que es independiente de cada sistema, es la encargada de convertir el código intermedio al lenguaje máquina de la plataforma donde se quiera ejecutar.

En el caso de lenguajes como Java:

En tiempo de compilación, el compilador de Java genera el código intermedio llamado bytecode, independiente de la plataforma. En tiempo de ejecución, necesita una Máquina Virtual Java (JVM) que interprete el bytecode. Esta máquina virtual simula una máquina real.

Esta metodología aporta muchas de las ventajas de la compilación y la interpretación. El código intermedio ya está libre de errores sintácticos, y es muy sencillo. Si existe un intérprete para este código en distintas plataformas, el mismo código se puede ejecutar en cada una de ellas. Su ejecución es más rápida, ya que no ha de comprobar la sintaxis. El código intermedio no es ejecutado por una CPU real, sino por una CPU virtual: el intérprete.

En lenguajes de ejecución administrada como los de la plataforma .NET:

En tiempo de compilación, el compilador genera el código independiente de la plataforma. Para ejecutar el código es necesario tener en el equipo cliente la versión de .NET Framework adecuada y se hace la última fase de compilación, en la que el CLR traducirá el código intermedio a código máquina mediante un compilador JIT (Just In Time).

Existe un código intermedio que se ejecuta en un software específico, pero no es un ejecutable. El proceso de traducción inicial se hace antes de la ejecución y el de la traducción final se hace cada vez que se ejecuta. La ejecución no es tan rápida como en los lenguajes compilados, pero es más rápida que en los lenguajes interpretados.

Los errores de tipo léxico, sintáctico o semántico se detectan en fase de compilación, y si existen no se generará el código intermedio. Interrumpir la ejecución solo afecta al intérprete y no a la plataforma. La modificación del código fuente implica volver a repetir el proceso de compilación.

Clasificación en la Arquitectura Cliente-Servidor

La arquitectura cliente-servidor consiste en un programa cliente que realiza peticiones a un servidor. Es más útil cuando el cliente o el servidor están comunicados mediante una red (aunque también se puede aplicar cuando están en la misma máquina).

Se diferencia entre lenguajes que se ejecutan:

  • Del lado del servidor, como PHP.
  • Del lado del cliente, como JavaScript.

Lenguajes Más Difundidos

Los lenguajes comunes a todos estos índices en el año 2019 en los primeros puestos son: C, C++, Java, C#, Python y JavaScript.

C

Es un lenguaje creado por Dennis Ritchie para codificar Unix. Catalogado como un lenguaje de alto nivel, estructurado y modular, pero con muchas características de bajo nivel como utilizar punteros para hacer referencia a una posición física de memoria.

Influyó en el diseño de C++, Java, PHP, JavaScript, etc.

C++

Diseñado en 1980 por Bjarne Stroustrup para extender C con tecnología OOP.

Java

Es un lenguaje de OOP desarrollado por Sun Microsystems en 1995. Hereda mucha sintaxis de C y C++, pero con un modelo de objetos más simple. También elimina las herramientas de bajo nivel.

C#

Es un lenguaje de OOP desarrollado por Microsoft en el año 2000 como parte de la plataforma .NET.

PHP

Es un lenguaje interpretado del lado del servidor que se puede usar para crear cualquier tipo de programa, aunque donde tiene más popularidad es en la creación de páginas web dinámicas. La ejecución de código PHP en un servidor suele generar código HTML que se envía a los navegadores de los clientes.

Python

Es un lenguaje de programación interpretado, con una sintaxis limpia que favorece que el código sea legible. Es un lenguaje de código abierto.

JavaScript

Es un lenguaje orientado a objetos, basado en prototipos, débilmente tipado, y dinámico. Se utiliza en el lado del cliente y está implementado como parte de un navegador web, aunque también existe una versión del lado del servidor.

Proceso de Generación del Código

La generación de código consta de tres partes: edición, compilación y enlace.

Edición

Esta fase consiste en escribir el algoritmo de resolución mediante un editor de texto o herramienta incluida en un entorno de desarrollo. El código resultante es el código fuente.

Compilación

Consiste en analizar el código fuente mediante un compilador, para obtener, si no se encuentran errores, el código objeto o código intermedio multiplataforma. Los análisis realizados son:

  • Análisis Léxico: Lee el archivo fuente carácter por carácter y forma grupos de caracteres con un significado léxico mínimo (tokens). Elimina los componentes no esenciales del programa fuente, e ignora todo lo que no sea necesario en fases posteriores.
  • Análisis Sintáctico: Utiliza los tokens encontrados por el analizador léxico y comprueba si llegan en el orden correcto proporcionado por la gramática del lenguaje.
  • Análisis Semántico: Se ocupa de comprobar el significado de las sentencias. Puede haber sentencias sintácticamente correctas, pero que no puedan ejecutarse por no tener ningún sentido.

Síntesis

Permite:

La generación de código intermedio independiente de la máquina. Algunos lenguajes compilados, como C, pasan antes por una fase de preprocesamiento en la que se lleva a cabo operaciones como sustituir las constantes por el valor o incluir archivos de cabecera. Otros, como Java, generan bytecode que podrá ser ejecutado en una JVM.

La traducción del código intermedio anterior al código máquina para obtener el código objeto. Esta traducción lleva consigo también una optimización de código.

Enlace

Consiste en enlazar el archivo objeto obtenido en la compilación con módulos objeto externos para obtener, si no se encuentran errores, el ejecutable.

El archivo obtenido en la compilación puede tener referencias a códigos objeto externos que forman parte de bibliotecas externas estáticas o dinámicas. Si la biblioteca es estática, el enlazador añade códigos objeto de las bibliotecas al archivo objeto, por lo que el archivo ejecutable resultante aumenta de tamaño con relación al archivo objeto, pero no necesita nada más que el SO para ejecutarse.

Si la biblioteca es dinámica, el enlazador añade referencias a la biblioteca, por lo que el archivo ejecutable resultante apenas aumenta de tamaño con relación al archivo objeto, pero la biblioteca dinámica tiene que estar accesible cuando el archivo ejecutable se ejecute.

Ejecución

Si el lenguaje es interpretado, será necesario el archivo fuente y el intérprete para que este vaya traduciendo y ejecutando cada instrucción del archivo fuente a lenguaje máquina. Ej. Python.

Si el lenguaje es compilado, será necesario el archivo ejecutable, y en algunos casos también se necesitan bibliotecas dinámicas. Ej. C.

Si el lenguaje necesita de máquina virtual, será necesario tener el código intermedio y la máquina virtual, para que vaya traduciendo y ejecutando el código intermedio a lenguaje máquina. Ej. Java.

Entradas relacionadas: