Saltar al contenido

LDP | §1.3 - Clasificación elemental de lenguajes informáticos

§1.2 Lenguajes informáticos

A los efectos de tener un "mapa" que nos permita clasificar con comodidad a los lenguajes más conocidos, presentaremos un esquema básico, sin pretensión de exactitud académica o histórica, sino más bien con la idea de ser útil a los objetivos de este curso.

En principio, como anticipamos, distinguiremos los lenguajes de programación de aquellos que son de descripción. Nosotros haremos uso de ambos tipos, por lo cual refinaremos un poco esta primera clasificación.

Los lenguajes de programación

Nos enfocaremos en lenguajes de tercera generación o posteriores, es decir, de alto nivel, que son los que interesan en general.

Lenguajes de tipo imperativo

La mayoría de los lenguajes de alto nivel reflejan de alguna forma el funcionamiento del hardware sobre el que van a operar, y por lo tanto tienen un estilo llamado imperativo, es decir, las diferentes operaciones que el algoritmo debe expresar toman la forma de "órdenes" que deben ejecutarse. Adicionalmente, según la filosofía elegida sobre cómo deben especifcarse esas órdenes, la manera de describir los datos, la forma en que el código debe escribirse, etc, los lenguajes pueden estar basados uno o varios paradigmas de programación:

Un paradigma de programación se refiere a las características de un lenguaje que permiten  obtener cierta forma de ejecución, o bien que presentan en la forma en que el código se organiza en diferentes unidades lógicas, o bien con el estilo y sintaxis de su gramática.

Esta definición algo "difusa" quizás se comprenda mejor viendo los casos más comunes de esos paradigmas:

  • Programación estructurada: como veremos luego, es posible reconocer ciertas formas o estructuras con las cuales pueden escribirse los algoritmos. Un lenguaje es estructurado cuando su propia sintaxis ofrece al programador esas formas, sin que deba contruirlas "a mano". En otras palabras, el programador está liberado del detalle minucioso de "qué debo hacer exactamente a continuación", y deja que el lenguaje se encargue del flujo de instrucciones con sólo limitarse a utilizar esas formas básicas.
  • Programación procedural: este paradigma descansa en el anterior, y consiste en poder separar los programas en procedimientos, cada uno de los cuales se construye para solucionar un problema en particular. De esta forma, cuando en un punto del programa se requiere esa solución, solo debo "llamar" a ese procedimiento. Un procedimiento puede llamar a otro, y en la mayoría de los lenguajes modernos puede llamarse también a sí mismo, técnica llamada recursión.
  • Programación orientada a objetos: los dos paradigmas anteriores se enfocan en la forma en que el código se organiza y se ejecuta, pero no dice nada sobre cómo organizar o tratar a los datos. En este paradigma, un objeto es una construcción abstracta que permite "encapsular" tanto procedimientos como datos de un ente que tiene una existencia más o menos real. Por ejemplo, en los paradigmas anteriores una persona podría representarse por una serie de datos "sueltos" (nombre, fecha de nacimiento, nacionalidad) y podría definir un procedimiento que tome como datos la fecha de nacimiento y la fecha actual para calcular su edad. Sería responsabilidad del programador implementar lo necesario para mantener "juntos" esos datos y procedimientos. En la orientación a objetos, el lenguaje ofrece directamente una construcción que permitiría, en ese caso, crear el objeto "Persona" con todo lo relacionado dentro de una sola unidad lógica.

Lenguajes de tipo declarativo

Además del tipo imperativo, existe otra familia de lenguajes que no se basan en la idea de orden o comando, sino que apuntan a describir un algoritmo enunciando las relaciones entre los datos y las condiciones que debe cumplir la solución. Este estilo se denomina declarativo, y cuenta con estos paradigmas:

  • Programación funcional: El concepto principal de este paradigma es cada tarea debe presentarse como una función que espera una entrada (los datos de la tarea) y devuelve un resultado como consecuencia. En este tipo de lenguajes los algoritmos se escriben mediante la definición y composición de funciones, y permiten que éstas se traten como cualquier otro tipo de datos; por ejemplo, una función puede aceptar que los datos de entrada sean también funciones, y también puede devolver una función como resultado.
  • Programación lógica: Este tipo de programación descansa esencialmente en la lógica formal. Cualquier programa escrito utilizando este paradigma utiliza una serie de sentencias escritas en forma de cláusulas lógicas, expresando reglas de deducción y propiedades sobre el dominio del problema en cuestión. La "ejecución" de un programa de este estilo no es más que una consulta sobre la validez lógica de una cierta sentencia, que como "efecto lateral" produce los datos que harían que la respuesta sea afirmativa.
  • Consulta de datos: Aquí el concepto sobre el cual descansa el paradigma es la teoría de conjuntos, y es útil cuando el programa debe operar sobre bases de datos relacionados entre sí, ya que ofrece estructuras para seleccionar y modificar los datos sobre la base de los criterios que esos datos deben cumplir para ser alcanzados por la operación.

Los lenguajes de descripción

En este tipo de lenguajes, la clasificación tradicional es quizás algo menos rígida que en el caso de los de programación. Para nuestros fines será suficiente considerar estos dos tipos:

  • Lenguajes de marcas (markup languages): La mejor manera de ver este tipo de lenguajes es pensar en un documento, donde un corrector o editor debe realizar alguna anotación sobre ciertas partes del mismo. Como las anotaciones en sí mismas son texto, debe pensarse en una forma de separar el texto del documento del de las anotaciones. En un documento impreso anotado a mano, la diferenciación entre lo impreso y lo manuscrito sirve a ese propósito. Un lenguaje de marcas formaliza esta noción mediante una sintaxis especial de marcas (markup) que es fácil de diferenciar del texto y que provee información sobre cómo interpretar o procesar cada parte del documento. Debemos notar que nada decimos de cómo debe procesarse cada parte; solamente proveemos un significado a la misma.
    Este tipo de lenguaje es un paradigma en si mismo, y si bien existen muchos, todos se basan en esta idea central. Los mejores exponentes de este tipo de lenguajes son XML y sus derivados, como HTML, SVG y otros.
  • Lenguajes de estilo: En un principio, los lenguajes de marcas se emplearon para dar "formato" a un documento, pero lentamente se comenzó a comprender que era necesario separar el significado de cada parte del mismo (su semántica) de la manera de presentarlo (su aspecto). De esta forma, los lenguajes de marcas se especializaron en lo primero, y la tarea de definir la presentación se dejó a los segundos.
    El paradigma dominante aquí es la hoja de estilo en cascada, que toma la estructuración jerárquica normal de los documentos en los que se aplica, definiendo que cada atributo que se aplica a una parte de un documento, es automáticamente heredado por todas las partes interiores a ellas. Probablemente sean los tipos de lenguajes más jóvenes, por lo cual no hay muchos ejemplos. Por abrumadora mayoría el principal es CSS, seguido de sus extensiones LESS y SASS.
§1.4 Los ladrillos básicos de la programación >