Tema 24 – Lenguajes de programación. Tipos. Características.

1. Introducción. 1

1.1. Relación con los ciclos impartidos en FP. 1

1.2. Introducción a los Lenguajes de Programación. 1

1.3. Elementos de los lenguajes de programación. 1

2. Tipos de Lenguajes de Programación (Clasificación) 1

2.1. En función de la Cercanía a la Máquina. 1

2.2. En función de la Evolución del Hardware. 2

2.3. Según el paradigma de programación. 2

3. Procesadores de lenguajes de programación. 3

3.1. Introducción. 3

3.2. Traductores. 3

3.3. Ensambladores. 3

4. Lenguajes de programación actuales. 3

4.1. C y C++. 3

4.2. JAVA. 4

4.3. Visual Studio .Net 4

5. Bibliografía. 4

1. Introducción

1.1. Relación con los ciclos impartidos en FP

Este tema está directamente relacionado con los siguientes módulos y ciclos formativos de la rama de informática:

· CFGS Administración de Sistemas Informáticos:

o Fundamentos de programación (Informática).

· CFGS Desarrollo de Aplicaciones Informáticas:

o Programación en lenguajes estructurados (Informática).

1.2. Introducción a los Lenguajes de Programación

· Es imprescindible definir varios conceptos antes de exponer que es un lenguaje de programación:

· Instrucción: Es una cadena de símbolos de un alfabeto, formada de acuerdo con ciertas reglas sintácticas que el procesador (o el traductor) entiende, y que finalmente serán interpretadas y ejecutadas por el procesador.

· Programa: Conjunto de instrucciones en algún lenguaje de programación suministradas al ordenador, ordenadas de una forma determinada, para que éste ejecute las operaciones para resolver un problema.

· Lenguaje de programación: Técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una computadora. Consiste en un conjunto de reglas sintácticas y semánticas que definen un programa informático.

Un lenguaje de programación permite a un programador especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados y transmitidos, y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico.

· De cada lenguaje de programación es preciso estudiar varias facetas:

Nivel léxico: los símbolos que se pueden usar en el lenguaje.

Nivel sintáctico: las construcciones válidas de esos símbolos.

Nivel semántico: el significado de dichas construcciones.

1.3. Elementos de los lenguajes de programación

· Identificadores: Nombres simbólicos que se darán a ciertos elementos de programación, como nombres de variables, tipos, funciones, instrucciones, etc.

· Tipos de datos: Los tipos de datos más simples son los numéricos, enteros o reales, los caracteres y los booleanos. Los tipos más complejos son por un lado las estructuras de datos estáticas, como registros, vectores o tablas, y por otro las dinámicas, como listas, colas, pilas o árboles.

· Constantes: datos que no cambiaran su valor a lo largo del programa.

· Expresiones: suelen estar compuestas por la unión de varios operandos: variables, constantes o literales; unidos entre sí por operadores que realizan una acción sobre ellos.

· Variables: Son zonas de memoria que contendrán un dato, al cual se le asigna un nombre para poder referenciarlo y así acceder a su valor o modificarlo.

· Operadores: Elementos que se aplican a uno o varios operadores, realizando algún tipo de operación. Los básicos son los Aritméticos (+,-,*,/,^), Condicionales (=,<,>,<>), Lógicos (AND, NOT, OR) y de Asignación (:=, <-), etc.

· Instrucciones: Primitivas de entrada, salida y asignación, y de control alternativas y repetitivas.

· Comentarios: texto que se usará para documentar los programas.

2. Tipos de Lenguajes de Programación (Clasificación)

2.1. En función de la Cercanía a la Máquina

· Los lenguajes de programación se pueden clasificar en función de la cercanía a la máquina, según su nivel de abstracción.

· Lenguajes de bajo nivel (máquina): Es el único lenguaje de programación que entiende directamente la máquina. Utiliza el alfabeto binario (símbolos 0 y 1) para comunicarse con el hardware. Fue el primer lenguaje utilizado en la programación de ordenadores, pero dejó de utilizarse debido a la complejidad de su utilización, ya que requiere conocer perfectamente la arquitectura de la máquina. Los datos son referidos utilizando direcciones de memoria, las instrucciones tienen formato rígido y no permiten comentarios. Conocidos también como lenguajes de primera generación.

· Lenguajes intermedios (ensambladores): Separan las características del hardware de la labor de programación. Se sustituyen los códigos numéricos por representaciones textuales equivalentes a las instrucciones máquina que representan. Siguen teniendo una fuerte relación con los lenguajes máquina pero permiten utilizar direcciones simbólicas e incluir líneas de comentarios. Conocidos también como lenguajes de segunda generación.

· Lenguajes de alto nivel (C, C++, C#, pascal, cobol, JAVA, ADA, etc.): Liberan al programador de tareas tediosas y complejas que frenan la productividad y la eficiencia. Tienen un gran nivel de abstracción que hace innecesario el conocimiento de la arquitectura de la máquina. Las instrucciones se expresan por caracteres alfanuméricos; permiten definir variables; disponen de instrucciones muy ponentes de tipo aritmético, lógicas, tratamiento de caracteres, etc.; son fáciles de corregir y actualizar y fáciles de aprender. Por el contrario, son menos efectivos en cuanto a prestaciones y consumo de recursos. Conocidos como lenguajes de tercera generación. De cuarta generación son conocidos los lenguajes no procedimentales como SQL y que permiten el desarrollo rápido de aplicaciones mediante entornos IDE y herramientas CASE.

2.2. En función de la Evolución del Hardware

· Primera generación: Lenguajes de bajo nivel (máquina)

· Segunda generación: Lenguajes ensambladores

· Tercera generación: Lenguajes estructurados de alto nivel como C, pascal, cobol, etc.

· Cuarta generación: Son conocidos por lenguajes 4GL los lenguajes no procedimentales como SQL que permiten al programador definir cuales son los resultados finales que se desea obtener sin necesidad de preocuparse de cómo se va a hacer.

· Quinta generación: Aparece ADA para la programación en tiempo real. Aparición y generalización de los lenguajes orientados a objetos (SmallTalk, C++, Eiffel, JAVA, etc.). Generalización absoluta de los interfaces gráficos de usuario (GUI) y la aparición de herramientas RAD (Rapid Application Development) que incrementan la productividad incluyendo herramientas CASE, entornos visuales de trabamo – IDE, etc. Algunos ejemplos son Visual Studio .Net, Developer 2000, JDeveloper, Eclipse, etc. d

2.3. Según el paradigma de programación

· Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software en función de su estructura gramatical. No es mejor uno que otro sino que dependiendo de las situaciones, resultará más apropiado uno que otro. No existe un acuerdo universal sobre este tema, pero es interesante definir algunos de ellos:

· Lenguajes imperativos: Describe la programación como una secuencia instrucciones o comandos que cambian el estado de un programa. El código máquina en general está basado en el paradigma imperativo. Tanto los lenguajes estructurados de alto nivel como C o PASCAL, o los orientados a objetos como C++ elevan el nivel de abstracción, pero no dejan de ser lenguajes imperativos. Su contrario es el paradigma declarativo.

· Lenguajes declarativos: No se basa en el cómo se hace algo (cómo se logra un objetivo paso a paso), sino que describe (declara) las propiedades de la solución buscada, dejando indeterminado el algoritmo usado para encontrar esa solución. Es más complicado de implementar que el paradigma imperativo, tiene desventajas en la eficiencia, pero ventajas en la solución de determinados problemas. En este paradigma se incluyen los paradigmas funcional, lógico y no procedimental, por lo que un ejemplo sería el lenguaje SQL.

· Lenguajes estructurados: la programación se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre sí. Además la programación se controla con secuencia, selección e iteración. Permite reutilizar código programado y otorga una mejor compresión de la programación. Es contrario al paradigma inestructurado, de poco uso, que no tiene ninguna estructura, es simplemente un “bloque”, como por ejemplo, los archivos batch (.bat).

· Lenguajes orientados a objetos: Está basado en la idea de encapsular estado y operaciones en objetos, definiendo previamente las “Clases” de objetos. En general, la programación se resuelve comunicando dichos objetos a través de mensajes. Suelen permitir herencia y polimorfismo. Ej.: Smalltalk, C++, Java, Visual Basic .NET, etc. Su principal ventaja es la reutilización de códigos y su facilidad para pensar soluciones a determinados problemas dado su alto nivel de abstracción.

3. Procesadores de lenguajes de programación

3.1. Introducción

· Programa que transforma las instrucciones escritas en un lenguaje simbólico (ensamblador o de alto nivel) a instrucciones en código máquina, comprensibles y ejecutables por el ordenador.

3.2. Traductores

· Reciben como entrada un texto en un lenguaje de programación concreto y produce, como salida, un texto en lenguaje máquina equivalente.
Programa Fuente –à programa objeto

· Consta de dos fases: Análisis, que comprueba que el programa fuente sea correcto según las reglas del lenguaje en distintos niveles (léxico, sintáctico y semántico) y traducción, que realiza la generación de código y la optimización del programa.

· Dependiendo de cómo se realice se tienen los distintos tipos de traductores (compiladores e interpretes).

· Compiladores: Realizan la su tarea globalmente, en un único proceso se analiza todo el programa fuente, se genera el código objeto y se almacena el resultado. Dependiendo del tipo de compilador el objeto puede ser directamente ejecutable o necesitar otros pasos previos como ensamblado, enlazado y carga. Los compiladores permiten crear bilibotecas de módulos objeto. Para incluirlos en el código máquina final se ha de usar un enlazador que devuelve un único programa ejecutable. Los programas objeto se ejecutan mucho más rápidamente que los interpretados, pero no permite transportar código objeto entre distintas plataformas de ejecución. Ejemplos de lenguajes cuyos traductores son compiladores son FORTRAN, COBOL, C, PASCAL, ADA…

· Interpretes: Son traductores que simultanean el proceso de traducción y el de ejecución. Su forma de trabajo es ir analizando bloques del programa fuente, generando el código máquina y ejecutándolo. Por lo que son más lentos que los compilados, por el contrario, son fácilmente transportables entre distintas máquinas, puesto que es e propio programa fuente lo que se mueve. Ejemplos de lenguaje interpretado son LISP, PROLOG, y SQL interactivo (amén de lenguajes de Internet como ASP 3.0, PHP o Javascript.)

· Híbridos: Aprovechan lo mejor de ambos mundos como Java o Visual Studio .NET. Son capaces de compilar el código a un lenguaje intermedio denominado bytecode en JAVA y MSI en .NET, que luego son interpretados por una máquina virtual (MVJ o .NET Framework), así consiguen una sustancial mejora en el rendimiento y mantienen la característica de transportabilidad entre distintas plataformas.

3.3. Ensambladores

· Por ensambladores se entiende tanto el lenguaje de medio nivel como el traductor utilizado para generar un programa objeto. Toma un programa fuente escrito en lenguaje ensamblador y produce un programa objeto, escrito en lenguaje máquina.

4. Lenguajes de programación actuales

4.1. C y C++

· C: Es un lenguaje de programación creado en 1969 por Ken Thompson y Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B. Es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.

Se trata de un lenguaje de alto nivel pero con algunas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel como los punteros o el acceso directo a memoria. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.

· C++: Lenguaje de programación, diseñado a mediados de los ochenta, como extensión del lenguaje de programación C. Es un lenguaje híbrido en el sentido de que permite mezclar sentencias de C con otras de C++, y resulta más sencillo de aprender para los programadores que ya conocen C. Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Las principales características del C++ son:

o Abstracción (encapsulación)

o Programación orientada a objetos (polimorfismo y herencia múltiple)

o Plantillas o programación genérica (templates)

o Sobrecarga de operadores

o Manejo de excepciones

o Bibliotecas disponibles de varios suministradores y para multitud de entornos como, por ejemplo, las MFCs (Microsoft Fundation Classes)

4.2. JAVA

· Lenguaje desarrollado por Sun Microsystems a principios de los 90. Es ideal para programar en Internet debido a que se ejecuta sobre una “máquina virtual” y por tanto es portable e independiente de la plataforma de ejecución. Por el contrario, y debido precisamente a que su lenguaje intermedio BYTECODE debe ser interpretado sus prestaciones son menores que las de los lenguajes compilados.

· Características:

o Es más simple que C++

o Es híbrido (se compila a BYTECODE y después este se interpreta)

o Permite la ejecución multitarea y los hilos (threads)

o Es robusto y más seguro que C++ (por ejemplo ha eliminado el uso de punteros)

o Incorpora recolección automática de memoria (garbage collection).

o Es fuertemente tipificado e incorpora comprobación estática de tipos.

o Dispone de una librería de clases estándar.

o Admite un cierto grado de herencia múltiple mediante interfaces.

4.3. Visual Studio .Net

· NET es un proyecto de Microsoft para crear una nueva plataforma de desarrollo de software con énfasis en transparencia de redes, con independencia de plataforma y que permita un rápido desarrollo de aplicaciones. Es la respuesta de Microsoft al creciente mercado de los negocios en entornos Web, como competencia a la plataforma Java.

· Debido a la publicación de la norma para la infraestructura común de lenguajes (CLI por sus siglas en inglés), el desarrollo de lenguajes se facilita, por lo que el marco de trabajo .NET soporta ya más de 20 lenguajes de programación y es posible desarrollar cualquiera de los tipos de aplicaciones soportados en la plataforma con cualquiera de ellos.

· Algunos de los lenguajes desarrollados para el marco de trabajo .NET son: C#, Visual Basic, C++, J#, Perl, Fortran y Cobol.NET.

· La herramienta de desarrollo compila el código fuente de cualquiera de los lenguajes soportados por .NET en un código intermedio (MSIL, Microsoft Intermediate Lenguaje), similar al BYTECODE de Java. De esta forma se consigue con .NET independencia de la plataforma hardware.

5. Bibliografía

· Pressman, R.S.: Ingeniería del sofware. Un enfoque práctico. McGraw-Hill

· Alcalde, E y García, M.: Metodología de la programación. McGraw-Hill

· http://es.tldp.org Documentación libre en español de Linux/Unix

· http://www.tutorialparaprofesores.com Documentación de Microsoft para profesores.

· http://technet.microsoft.com Documentación tecnológica de Microsoft

· https://msdn.microsoft.com Centro de desarrollo de Microsoft

· http://algoritmia.com Web sobre el diseño de algoritmos

Publicado: marzo 17, 2019 por Laura Gonzalez

Etiquetas: tema 24 informatica