2. AGENDA
• ¿Qué es un lenguaje?
• ¿Qué es un lenguaje de programación?
• Clasificación de los lenguajes de programación
• Propiedades de los lenguajes de programación
• Paradigmas de lenguajes de programación
• Dominios de aplicación de los lenguajes de
programación
• Historia de los lenguajes de programación
• Cualidades de los lenguajes de programación
3. ¿QUÉ ES UN LENGUAJE?
• Conjunto de sonidos articulados con
que los hombre manifiesta lo que
piensa o siente. Según RAE
• Informático: Conjunto de signos y
reglas que permite la comunicación
con un ordenador. Según RAE
• Cualquier sistema de signos
destinados a la comunicación entre
seres humanos, entre hombres y
máquinas, o entre máquinas, que se
estructura sobre un conjunto definido
de reglas, convenciones y
representaciones gráficas y/o
fonológicas. Según Universidad de la
República Oriental del Uruguay
4. ¿QUÉ ES UN LENGUAJE DE
PROGRAMACIÓN?
• Conjunto de símbolos e
instrucciones que permiten al
hombre indicarle al computador
como operar.
• Sistema de símbolos y reglas
que permite la construcción de
programas con los que la
computadora puede operar así
como resolver problemas de
manera eficaz.
• Es una notación formal para
describir algoritmos o funciones
que serán ejecutadas por un
ordenador. Cueva Lovello, Juan Manuel.
Conceptos básicos de procesadores de
lenguaje.
5. CLASIFICACIÓN DE LOS LENGUAJES DE
PROGRAMACIÓN
• Los lenguajes se pueden clasificar en muchas
categorías:
• Según el nivel de complejidad: Alto nivel, medio nivel, bajo nivel
• Según el tipo de ejecución: Compilados, interpretados, mixtos
• Según el tipo de aplicaciones que permiten: Visuales, de script,
web.
• Según el Paradigma: Imperativos, orientados a objetos, guiados
por eventos, funcionales, lógicos, concurrentes, orientados a
aspectos, multiparadigma.
6. PROPIEDADES DE LOS LENGUAJES DE
PROGRAMACIÓN
• Sintaxis
• Se refiere a lo que constituye un programa bien escrito. Lo componen la
gramática y el vocabulario de palabras y símbolos que son válidos en
dicho lenguaje.
• La sintaxis se divide en dos grandes partes
• La parte léxica que se refiere a los símbolos usados para la escritura del
programa, es decir que correspondan al alfabeto.
• La parte léxica también se encarga de la ejecución de las reglas para
armar componentes léxicos, es decir las “palabras” del programa.
• Los componentes léxicos característicos de un lenguaje de
programación son: identificadores (de usuario y reservados), literales
(números, caracteres, cadenas, booleanos y otros como fechas),
operadores (matemáticos, relacionales, lógicos, de asignación y otros
como de concatenación), separadores, espacios en blanco y
comentarios.
• La parte sintáctica propiamente dicha se refiere al orden de las
“palabras” dentro de “frases” bien formadas que conforman el programa.
7. PROPIEDADES DE LOS LENGUAJES DE
PROGRAMACIÓN
• Sistemas de tipos y semántica:
• Se refiere a los tipos de valores que puede manipular un programa y
al significado (semántica) del mismo.
• Cuando se escribe un programa, es importante entender asuntos
como el efecto exacto que tiene una asignación sobre el estado de
la computación, el impacto de la ejecución de una secuencia de
pasos y la definición de lo que significa ejecutar un bucle o una
instrucción condicional.
• Gestión de memoria:
• Se centra en el conjunto de técnicas que ayudan a entender la
correspondencia entre los valores, las estructuras de datos y las
estructuras de los programas con la memoria en la que residen.
• Se requiere distinguir entre memoria estática y memoria dinámica,
pilas y montículos (heap), los tiempos de vida de los tipos de objetos
y según su alcance, las técnicas de reclamación y de detección de
basura.
8. PROPIEDADES DE LOS LENGUAJES DE
PROGRAMACIÓN
• Manipulación de excepciones:
• Se refiere al manejo de los eventos erróneos que pueden suceder
en un programa en ejecución, de manera que afecten lo menos
posible al resultado final.
• Como un error de entrada, una división por cero o un intento de
crear un bloque de espacio en un montículo. Este tipo de eventos
se conocen como excepciones y es necesario que los lenguajes de
programación no solo capten sino que además respondan de forma
adecuada a estas excepciones, sin que la computación en su
conjunto se vea comprometida.
9. PARADIGMAS DE LENGUAJES DE
PROGRAMACIÓN
• Por paradigma podemos entender las diversa
tendencias o maneras de programar.
• Normalmente cada paradigma se especializa en un
dominio de aplicación, aunque algunos lenguajes
son aplicables a la solución de problemas de
cualquier dominio.
• Algunos lenguajes no se pueden establecer
claramente en un solo paradigma, así que los
llamamos Multiparadigma. Ej Java – C# - Ruby
10. PARADIGMAS DE LENGUAJES DE
PROGRAMACIÓN
• Programación imperativa:
• Los programas son estructurados y paso por paso.
• Cada paso realiza un cálculo específico, recupera una
entrada o genera una salida.
• La abstracción procedimental es un bloque de creación
esencial (Uso de procedimientos y funciones)
• Maneja sentencias condicionales, asignaciones, bucles
o repeticiones y secuencias.
• Ejemplos principales: Cobol, Fortran, C, Basic, Pascal.
11. PARADIGMAS DE LENGUAJES DE
PROGRAMACIÓN
• Programación orientada a objetos:
• El programa es una colección de objetos que interactúan
unos con otros trasladándose mensajes que transforman
su estado.
• El modelado, la clasificación y la herencia de objetos son
bloques de creación esenciales.
• Es la tendencia más popularizada que existe, gracias
sobretodo a la gran difusión de lenguajes como java, C# o
PHP, así como por los procesos de desarrollo de software
por componentes.
• Los lenguajes orientados a objetos principales son:
Smalltalk, java, C++ e Eiffel.
12. PARADIGMAS DE LENGUAJES DE
PROGRAMACIÓN
• Programación Funcional:
• El programa es una colección de funciones
matemáticas, cada una de ellas con su entrada
(dominio) y su resultado (intervalo).
• Las funciones interactúan y se combinan las unas con
las otras utilizando condicionales, recursividad y
composición funcional.
• Sus lenguajes aplican en el dominio de la
computación científica así como la inteligencia artificial
• Los lenguajes de programación funcional principales
son Lisp, Scheme, Haskell y ML.
13. PARADIGMAS DE LENGUAJES DE
PROGRAMACIÓN
• Programación Lógica:
• El programa es una colección de declaraciones lógicas
sobre el resultado que debería conseguir una función, en
vez de ¿cómo se debe obtener el resultado?
• La ejecución del programa aplica las declaraciones para
obtener una serie de soluciones posibles a un problema.
• No determinismo, las soluciones a muchos problemas no
son únicas, sino múltiples.
• El lenguaje de programación más importante es Prolog,
aunque SQL también pertenece a este paradigma.
14. PARADIGMAS DE LENGUAJES DE
PROGRAMACIÓN
• Programación Guiada por eventos:
• El programa es un bucle continuo que responde a los
eventos generados en un orden no predecible.
• Estos eventos se originan a partir de acciones del usuario
en la pantalla (por ejemplo clics de ratón o pulsaciones de
teclas) o de otras fuentes.
• Se puede pensar que es una tendencia o característica de
programación, más que un verdadero paradigma.
• Los lenguajes de programación guiada por eventos más
importantes incluyen los visuales como visual Basic o
visual C++ y java.
15. PARADIGMAS DE LENGUAJES DE
PROGRAMACIÓN
• Programación Concurrente:
• El programa es una colección de procesos cooperativos, que
comparten información unos con otros.
• Los procesos operan generalmente en forma asíncrona.
• También se puede producir el paralelismo en un solo proceso,
como el caso de la ejecución en paralelo de las diversas
iteraciones de un ciclo.
• Los lenguajes de programación concurrentes incluyen SR, Linda
y Fortran de alto rendimiento.
16. DOMINIOS DE APLICACIÓN DE LOS
LENGUAJES DE PROGRAMACIÓN
• Entre los dominios de
aplicación más comunes
de los lenguajes de
programación se tienen:
• Científica
• Sistemas de gestión de
información
• Inteligencia artificial
• Sistemas
• Orientada a la web
17. CONSIDERACIONES PARA EL
ESTUDIO DE LOS LENGUAJES
• Restricciones de arquitectura
• Los lenguajes de programación están diseñados para los
computadores.
• Un lenguaje bien diseñado e implementado puede mejorar mucho la
utilidad de un computador en un dominio de aplicación.
• La mayoría de los diseños de computadores de las últimas décadas
han seguido el modelo «von Neumann».
• Muchos lenguajes, como Fortran, Cobol y C, cuadran muy bien en
esta arquitectura; otros, como Lisp no.
• Cuando se consideran las virtudes de las distintas opciones de
diseños de lenguajes, siempre hay una limitante por la necesidad
de implementar dichos lenguajes de forma eficiente y efectiva
dentro de las restricciones impuestas por las variantes actuales del
modelo von Neumann.
• La idea de que un buen diseño de lenguaje puede conducir a una
arquitectura de computadoras viable radicalmente nueva y
comercial probablemente no sea una opción.
18. CONSIDERACIONES PARA EL
ESTUDIO DE LOS LENGUAJES
• Restricciones contextúales
• Los lenguajes no están diseñados sólo para cuadrar
dentro de las restricciones de una familia de
arquitecturas determinada.
• También lo esta para satisfacer otras restricciones
impuestas por el contexto en el que se van a utilizar.
• El área de aplicación, el sistema operativo, la red y las
preferencias de la comunidad de programación.
• Algunos lenguajes tienen un diseño de propósito
general más intencionado, optando por servir a los
intereses. de un gran número de aplicaciones.
• Otros lenguajes han sido diseñados para tener una
naturaleza mas de propósito especial.
• Algunos lenguajes de programación se implementan
utilizando un proceso de compilación.
• Otros lenguajes se implementan utilizando un proceso
interpretativo.
• Otros como Java, utilizan un modelo mixto, de
compilación «Java byte code» e interpretación «Java
Virtual Machine» o JVM.
• Un equipo virtual es cualquier modelo abstracto de
una computadora que se implementa en software,
pero no en hardware.
19. CONSIDERACIONES PARA EL
ESTUDIO DE LOS LENGUAJES
• Intérpretes y equipos virtuales
• A veces, se diseñan los lenguajes de forma que el compilador se escribe
sólo una vez utilizando un equipo virtual como equipo objetivo y, después,
este equipo virtual se implementa a partir de un intérprete en cada uno de
los equipos reales.
• Este es el caso de Java, o del Framework .NET.
• Cuando seleccionaron este diseño, los diseñadores del lenguaje Java
sacrificaron un poco de eficiencia en favor de la flexibilidad y la portabilidad.
• Se puede implementar cualquier cambio en las especificaciones del lenguaje
Java alterando un solo compilador, en lugar de toda una familia.
20. CONSIDERACIONES PARA EL
ESTUDIO DE LOS LENGUAJES
• Normalizaciones
• Cuando un lenguaje de programación recibe
suficiente atención y uso entre los
programadores. normalmente comienza el
proceso de normalización.
• Un esfuerzo para hacer una definición de un
lenguaje normalizado independiente del
equipo a la que deben adherirse todos los
implementadores de dicho lenguaje.
• Las organizaciones más importantes que
supervisan y mantienen las normalizaciones
de los lenguajes de programación son el
Instituto de Normalización Nacional
Americano (ANSI) y la Organización
Internacional de Normalización (ISO).
• El proceso de normalización de lenguajes es
complejo y lleva su tiempo, incluyendo el
largo período en el que una comunidad está
ocupada en ello y. normalmente, la
voluminosa definición de la normalización y
su resultado.
• ANSI Cobol (1985)
• ISO Fortran; (1997)
• ISO Prolog (1995)
• ANSI/ISO C (1999)
• ANSI Basic (1989)
• ANSI/ISO Ada (1995)
• ANSI Smalltalk (1998)
• ISO Pascal (1990)
21. CONSIDERACIONES PARA EL
ESTUDIO DE LOS LENGUAJES
• Sistemas heredados
• Se ha estimado que el 90 por ciento del tiempo de un programador se
aplica al mantenimiento de las aplicaciones ya existentes, o sistemas
heredados.
• Solo el 10 por ciento se ocupa en el desarrollo de código para
aplicaciones nuevas.
• Probablemente, la mayor parte del código de los sistemas heredados
está escrito en Cobol
• El caso de C++, que fue diseñado como una extensión de C para
mantener esta compatibilidad.
• El diseño de Java se aparta de esta tradición, pese a que gran cantidad
de sus características son reminiscencias de las de C++. Como punto
central, los diseñadores de Java querían liberar su nuevo lenguaje del
soporte de las características menos deseables de C++. así que,
sencillamente, las eliminaron.
• El resultado fue un lenguaje más sencillo para el desarrollo de
aplicaciones moderno, pero cualquier sistema C++ heredado que
tengamos que convertir a Java tiene que pasar un proceso de
recodificación antes de que se pueda compilar o ejecutar.
23. CUALIDADES DE LOS LENGUAJES DE
PROGRAMACIÓN
• Criterios para elegir un lenguaje o al momento de
escribirlo.
• Simplicidad y claridad:
• ¿Es fácil para un programador escribir un programa en el
lenguaje?, ¿Hasta qué punto es inteligible este programa
para un lector promedio?, ¿Es fácil aprender y enseñar el
lenguaje?.
• Uniones:
• Un elemento del lenguaje se une a una propiedad en el
momento en que se define dicha propiedad para el. Ej, la
unión de una variable con su tipo al declararla.
• Los principales momentos de unión de los electos con sus
propiedades son:
24. CUALIDADES DE UN LENGUAJE DE
PROGRAMACIÓN
• Uniones
• Momento de definición del lenguaje: Al unir los tipos básicos de
datos con las palabras reservadas del lenguaje.
• Momento de Implementación del lenguaje: Al unir los valores
numéricos con las representaciones del equipo, ej: que los
valores enteros se representen en 16 bits.
• Momento de escritura del programa: Al unir los nombres de las
variables con los tipos de datos y se unen durante todo el tiempo
de vida de la variable.
• Momento de la compilación y carga del programa: Al unir las
variables “estáticas” con las direcciones de memoria fijas.
• Momento de ejecución del programa: Cuando las variables se
unen con los valores. ( x=3; )
25. CUALIDADES DE UN LENGUAJE DE
PROGRAMACIÓN
• Ortogonalidad:
• ¿Un símbolo o una palabra reservada tienen siempre
el mismo significado, independiente del contexto en el
que se utilice?,
• Fiabilidad de los programas:
• ¿El programa se comporta igual cada vez que se
ejecuta con los mismos datos de entrada?
• Aplicabilidad:
• ¿El lenguaje proporciona un soporte adecuado para
las aplicaciones del dominio en el que se está
usando?.
26. CUALIDADES DE UN LENGUAJE DE
PROGRAMACIÓN
• Abstracción:
• Es una característica fundamental para la reutilización
de código, el permitir crear y cargar bibliotecas y
librerías agiliza el trabajo de los programadores. Por
ejemplo, las librerías de lenguajes como C y Java.
• Implementación eficiente:
• ¿Permite las construcciones y las características de
un lenguaje su implementación practica y eficiente en
las plataformas coetáneas?