Download Lenguajes y Paradigmas de Programación

Document related concepts

Wolfram (lenguaje de programación) wikipedia , lookup

Ocaml wikipedia , lookup

Programación funcional wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Lisp wikipedia , lookup

Transcript
LPP 2013-2014
Cristina Pomares
Domingo Gallardo
!
!
Lenguajes y Paradigmas de Programación
Sesión 1: - Descripción de la asignatura
- Tema 1: Historia y conceptos de los lenguajes de programación
1
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Índice de presentación de la asignatura
• Datos académicos
• Recursos de la asignatura
• Objetivos y competencias
• Temario
• Prácticas
• Horarios
• Evaluación
• Bibliografía
2
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Datos académicos
• Departamento de Ciencia de la Computación e Inteligencia Artificial
6 créditos ECTS: 1 clase de teoría de 2h y 1 clase de prácticas de 2h a la semana
• Domingo Gallardo (grupos 2 y 4 de teoría y 2, 3, 5 y 6 de prácticas). email:
[email protected]
• Cristina Pomares (grupos 1 y 3 de teoría y 1, 4, 7 y 8 de prácticas). Coordinadora de la
asignatura - email: [email protected]
3
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Recursos de la asignatura
• Toda la información está disponible en la ficha del campus virtual • Moodle de LPP. Información sobre la asignatura, transparencias, prácticas y otros materiales.
Abierto y accesible a toda la comunidad educativa • Foro de consultas en el sitio Moodle
• Foro de anuncios en el sitio Moodle
4
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Objetivos de la asignatura
• Elementos comunes a los lenguajes de programación
• Características de los lenguajes de programación
• Qué elementos son esenciales y cuáles son accesorios
• Familias/paradigmas de lenguajes de programación
• Cómo diseñar un buen lenguaje de programación
5
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Competencias
• Conocer y diferenciar las características de los distintos paradigmas de programación
(programación funcional, procedural y orientada a objetos) e identificarlas en lenguajes de
programación concretos.
• Conocer los elementos que componen los lenguajes de programación (estructuras de control,
procedimientos, tipos de datos) y distintas implementaciones de estos elementos en distintos
lenguajes.
• Diferenciar entre tiempo de ejecución y tiempo de compilación en distintos ámbitos: detección de
errores o definición, creación o ámbito de vida de variables.
• Conocer modelos de computación específicos que expliquen la semántica de los lenguajes de
programación. En concreto: modelo de sustitución para la programación funcional y modelo de
entornos para explicar el ámbito y los valores de los variables en la programación procedural.
6
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Competencias
• Utilizar la abstracción y la recursión para diseñar correctamente procedimientos y estructuras de
datos (listas y árboles).
• Ser capaz de diseñar, implementar y corregir programas funcionales, en concreto utilizando el
lenguaje de programación Scheme.
• Ser capaz de implementar programas sencillos en Scala, en los que se utilicen las características
multi-paradigma del lenguaje.
• Comparar el paradigma orientado a objetos con el paradigma procedural clásico, reconociendo
las ventajas que aporta en cuanto a abstracción, reutilización y modificación de código.
• Conocer los principios básicos del paradigma de programación lógica.
7
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Temario: disponible en Moodle
• Tema 1. Lenguajes de programación: Historia de los lenguajes de progamación. Elementos de los
lenguajes de programación. Abstracción. Paradigmas de programación. Compiladores e intérpretes. • Tema 2. El lenguaje de programación Scheme: Primitivas. Tipos de datos básicos. Cadenas. Listas.
Definición de funciones.
• Tema 3. Programación Funcional: Características e historia del paradigma de Programación Funcional.
Características declarativas del paradigma funcional. Definición de funciones. Funciones como datos de
primer orden. La forma especial lambda. Ámbito de variables y closures. Dualidad entre datos y
programas: formas especiales apply y eval. Datos compuestos en Scheme: parejas. Construcción,
recorrido y operaciones sobre listas. Listas con elementos compuestos. Listas de listas.
8
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Temario
• Tema 4. Procedimientos y estructuras recursivas: Diseño de funciones recursivas. Recursión
mutua. Procesos recursivos e iterativos. Memoization. Estructuras de datos recursivas:
expresiones-s, árboles binarios y árboles genéricos.
• Tema 5. El lenguaje de programación Scala: Intérprete y scripts. Tipos de datos básicos.
Operadores. Estructuras de control. Ámbito de variables. Tipos de datos compuestos: arrays y
colecciones. Recorriendo colecciones. Definición de clases y herencia en Scala. Paquetes y
sentencias imports en Scala.
• Tema 6. Programación funcional en Scala: Lenguajes multiparadigma. Programación funcional
en Scala. Listas. Recursión pura y recursión por la cola. Funciones como datos de primer orden.
Clousures y funciones anónimas. Funciones de orden superior: mappings y filtros de colecciones.
9
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Temario
• Tema 7. Programación Imperativa: Historia del paradigma de programación imperativo.
Características principales. Datos mutables. Datos mutables en Scheme. Estructuras de datos
mutables en Scheme. Ámbito de variables dinámico y modelo de entornos en Scheme y Scala.
Estado local.
• Tema 8. Programación Orientada a Objetos: Características e historia del paradigma de
Programación Orientada a Objetos. Conceptos avanzados de POO en Scala: Traits en Scala.
Traits como modificaciones apilables. Ventajas de los traits frente a la herencia múltiple.
Miembros abstractos. Modelo de agentes para la programación concurrente.
10
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Temario
• Tema 9. Construcción de nuevos lenguajes de programación: Diseño de lenguajes de
programación. Macros. Lenguajes de dominio (DSL).
• Tema 10. Programación Lógica: El paradigma de programación lógica. Programación lógica en
Scheme. Clausulas y objetivos. Backtracking. Unificación. Operadores lógicos. Variables.
11
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Prácticas
• Realización individual de ejercicios de programación relacionados con los conceptos que se
están estudiando en ese momento que servirán para reforzar y profundizar en las competencias
de la asignatura.
• Lenguajes de programación y entornos de desarrollo:
• Racket (versión de Scheme, lenguaje de programación funcional)
• Scala (lenguaje multiparadigma basado en Java con características de programación funcional
y programación orientada a objetos)
• 10 prácticas, se revisarán en las horas de prácticas. Buena oportunidad para resolver y consultar
dudas de la asignatura
12
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Temario
• Se realizarán 12 sesiones de ejercicios de prácticas de una semana de duración y 2 seminarios
de lenguajes
• En cada sesión se propondrá una hoja de ejercicios con 5 o 6 problemas de programación
relacionados con los temas vistos en las sesiones de teoría que se resolverán de forma individual. • El profesor estará disponible en la sesión de prácticas para resolver dudas y dar pistas sobre
cómo atacar los problemas
• Durante la primera media hora de la sesión práctica, se pondrán en común las soluciones de la
hoja de ejercicios anterior. Los alumnos explicarán en la pizarra algunas propuestas, el profesor y
el resto de compañeros las comentarán y se comentarán también soluciones alternativas.
Durante la hora y media restante se resolverán los ejercicios de la semana actual.
• Al final de la semana, cuando en todos los grupos de prácticas se hayan puesto en común las
soluciones, se publicarán en Moodle las soluciones propuestas por los profesores
13
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Horarios
14
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Evaluación
• Convocatoria normal:
★Examen parcial 1: Temas 1, 2 y 3. Semana del 3 de marzo. 30%
★Examen parcial 2: Temas 4, 5, 6 y 7. Semana del 7 de abril. 32%
★Examen parcial 3: Temas 8, 9 y 10. 10 de junio. 32%
★Asistencia y participación en prácticas: 6% (no recuperable)
★La nota final se calculará con la media ponderada de las 4 notas anteriores
• Convocatoria extraordinaria:
★Examen final: 94%
★Prácticas: Se mantiene la nota de junio
15
extraordinaria de julio) del 33% y del 45%. Pero, más importante, con respecto a los presentados ha!
Lenguajes y Paradigmas de Programación. Universidad
sido del 64% y del 74%.
Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Índice de aprobados en cursos anteriores
Este es el tercer año que se
imparte la asignatura en el grado de
informática. !
En los dos años previos el índice de
aprobados con respecto a
matriculados ha sido (incluyendo la
convocatoria!
extraordinaria de julio) del 33% y
del 45%. !
Pero, más importante, con
respecto a los presentados ha
sido del 64% y del 74%.
16
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Consejos para aprender los contenidos
• Trabajar todas las semanas e intentar seguir el ritmo de la asignatura
• No aprender de memoria. Trabajar los ejercicios, probarlos e inventarse nuevos ejercicios o
soluciones. ¿Qué pasaría si….?
• Pelearse con las prácticas y hacerlas uno mismo sin ver ninguna solución
• Plantearse las soluciones en papel antes de probarlas en el intérprete para no llegar a una
solución mediante “prueba y error”
17
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Bibliografía
• Structure and Interpretation and Computer Programs (SICP)
• Autores: Harold Abelson y Gerald Jay Sussman
• Editorial: MITPress, 1996. Enlace a la edición on-line
• Signatura en la Biblioteca Politécnica: I.06/ABE/STR
• Programming Language Pragmatics (PLP)
• Autor: Michael L. Scott
• Editorial: Morgan Kaufmann Publishers, 2009 (Third Edition)
• Signatura en la Biblioteca Politécnica: POE 004.43/SCO/PRO
• Programming in Scala
• Martin Odersky, Programming in Scala, Artima, 2011
• Signatura en la Biblioteca Politécnica: POE 004.43/ODE/PRO
18
LPP 2013-2014
Cristina Pomares
Domingo Gallardo
LPP 2012-2013
Tema 1: Historia y conceptos de los lenguajes de programación
19
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Objetivos
• Conocer la historia de los lenguajes de programación
• Conocer a los diseñadores de los lenguajes de programación
• Conocer distintas definiciones de lenguajes de programación
• Entender el concepto de abstracción y su importancia en la programación
• Comprender que el objetivo principal de los lenguajes de programación es proporcionar
descripciones de alto nivel
• Conocer los distintos tipos de ejecución de los lenguajes de programación
• Conocer el concepto de paradigma de programación y los paradigmas más importantes
20
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Bibliografía
• Introducción capítulo 1 SICP (Building Abstractions with Procedures)
• Capítulo 1.2 PLP (The Programming Language Spectrum)
• Ampliación:
• Capítulo 1.3 PLP (Why Study Programming Languages)
• Capítulo 1.4 PLP (Compilation and Interpretation)
21
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Calcular y computar
• Los avances tecnológicos en los siglos XVI y XVII
provocan la necesidad de acelerar y mejorar la
precisión de los cálculos
Máquina de Schickard (1623)
• Hasta los años 1940s un computador era una
persona que se contrataba para realizar cálculos
• En los siglos XVII al XIX científicos, relojeros y
aficionados construyeron un gran número de
máquinas de calcular. Todas ellas mecánicas. Máquina de Pascal (1650)
• Reconstrucción en el British Museum de Londres
del motor de diferencias de Babagge para calcular
e imprimir tablas numéricas de logaritmos
Motor de
diferencias de
Babbage (1820)
22
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
De 1935 a 1941: primeros computadores
• (1935, Cambridge) Máquina universal de Turing.
Consiste en un dispositivo lee y escribe 0s y 1s de una
cinta infinita (memoria) y se mueve y los escribe en
función de una tabla definida en la máquina (programa).
Define el concepto de máquina universal que es capaz
de leer de la cinta un programa cualquiera y simular su
comportamiento en otra parte de la cinta (programa
almacenado en memoria)
• (1941, Alemania) Computador Z3 de Zuse.
Constuida por Konrad Zuse, fue uno de los primeros
computadores programables. Podría ejecutar
operaciones aritméticas en punto flotante
codificadas en una cinta perforada.
◦ Contiene registros de memoria denotados por letras (no se
puede acceder de forma indirecta)
◦ La instrucción LOAD carga el contenido del registro (un
número en punto flotante) como un operando de una
operación matemática
◦ La instrucción STORE guarda el resultado de la operación
en un registro
Tecnología: electromecánica, relés
Programación: cinta con instrucciones
codificadas
Memoria: 64 palabras de 22 bits en
23
almacenadas en relés
Velocidad: 1 instrucción por segundo
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
De 1941 a 1945: computadores electrónicos
• (1942, USA). ABC. En paralelo al desarrollo de
Z3, John Vincent Atanasoff en la Universidad de
Iowa y su estudiante de doctorado Cliff Berry
diseñan y desarrollan el primer computador
totalmente electrónico, utilizando unas 300
válvulas de vacío (ABC, Atanasoff-Berry
Computer). Era máquina de cálculo de
propósito específico orientada a la resolución de
sistemas lineales de ecuaciones algebráicas. No
llegó a funcionar correctamente.
• (1944, UK). Colossus. es el primer computador
electrónico digital capaz de funcionar de
forma continua. Se desarrolló para automatizar
la descodificación de los mensajes alemanes
durante la Segunda Guerra Mundial, no fue un
computador general. Construido por el
matemático Max Newman y el ingeniero
Tommy Flowers. Se mantuvo en secreto
durante años.
Tecnología: electrónica, válvulas de vacío
Programación: no es de propósito general, la entrada de datos y ecuaciones se
hace con tarjetas perforadas
Memoria: 60 números en representados en binario en palabras de 50 bits
almacenadas en condensadores
Velocidad: 30 sumas/restas por segundo
Tecnología: electrónica, válvulas de vacío
Programación: no es de propósito general, la entrada/salida se realiza con una cinta de
datos perforada e interruptores
Memoria: no tiene elementos de memoria
24
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
De 1941 a 1945: computadores electrónicos
• (1944, USA). Mark-1. fue diseñada por el
profesor Howard Aiken de Harvard y construida
por IBM. Era una máquina enorme, del tamaño
de una habitación, formada por miles de piezas
conectadas a un árbol de levas de más de 15
metros. El objetivo del Mark–1 era el cálculo de
tablas resultantes de funciones matemáticas.
• (1945, USA). ENIAC.Es el primer computador
electrónico construido en los EEUU. Usado
para el cálculo de tablas numéricas usadas
para el cálculo de posición en los lanzamientos
balísticos de misiles. ENIAC no tenía tampoco
un programa almacenado y para modificar su
funcionamiento era necesario reconfigurar la
máquina usando enchufes e interruptores. John
von Neumann se unió al grupo de desarrollo y
aconsejó modificaciones que llevaron a un
mecanismo primitivo de programa
almacenado en memoria.
Tecnología: electromecánica, relés
Programación: programa codificado en
una cinta, similar al Z3, sin operador de
comparación, entrada de datos con 60
conjuntos de 24 interruptores
Memoria: 72 números en codificación
decimal de 23 dígitos
Velocidad: 3 sumas/restas por segundo,
una división tardaba 15 segundos y un
logaritmo o función trigonométrica
alrededor de 1 minuto
Tecnología: electrónica, 17.000 válvulas de vacío
Programa: podía realizar bucles, condicionales o subrutinas, pero
el programa se introducía modificando sus interruptores y clavijas.
La entrada y salida de datos se realizaba con tarjetas perforadas
Memoria: 20 registros decimales
Velocidad: 5.000 sumas/restas por segundo
25
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
De 1941 a 1945: computadores electrónicos
• (1949, UK). EDSAC. Fue uno de los primeros
computadores en funcionamiento que utilizó la
arquitectura von Neumann con el programa
almacenado en memoria. Fue desarrollado por
un equipo dirigido por Maurice Wilkes. Biblioteca
de programas cortos llamados subrutinas
Tecnología: válvula de vacío
almacenados en tarjetas perforadas
Programa: almacenado en memoria, leído con tarjetas perforadas
Memoria: 1000 palabras de 16 bits almacenadas en memorias de línea de retardo de mercurio
Velocidad: 714 operaciones por segundo
• (1948, UK). Máquina de Manchester. El primer
computador electrónico digital capaz de
almacenar un programa en memoria. Se conoció
con el nombre de Manchester ‘Baby’. Diseñado
por Max Newmann usando la tecnología
proporcionada por los ingenieros F.C. Williams y
Tom Kilburn. Conjunto de instrucciones completo,
capaz de realizar saltos, condicionales y
direccionamiento indirecto
26
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Los primeros lenguajes
• En los años 40 sólo existía el código máquina. No existían
los lenguajes de programación.
• Código máquina: secuencia de bits que controlan
directamente un procesador. Muy tedioso. 55 89 e5 53 83
ec 04 f0 e8 31...
• Ensamblador: Abreviaturas mnemotécnicas para expresar
operaciones. El traductor abreviatura-instrucción código
máquina es el ensamblador. subl, pushl, movl, ...
• Necesidad de un lenguaje independiente de la máquina
(años 50).
27
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
UNIVAC primer computador comercial en 1951
Anuncio en Youtube
Aparece por primera vez la figura del programador: manuales, cursos de formación, ofertas de
empleo, etc.
28
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
IBM 704
• El IBM 704 fue el otro gran ordenador
comercial de la década de los 50
• Difusión mucho mayor que el UNIVAC:
centros gubernamentales,
universidades
• Los primeros lenguajes de
programación de alto nivel se
desarrollan para este computador
29
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Los primeros lenguajes de alto nivel
• Los primeros lenguajes de alto nivel se desarrollaron a finales de la década de los 50
• Dos enfoques muy distintos desde el principio
FORTRAN: 1956
Primer lenguaje comercial, equipo de IBM dirigido
por John W. Backus
LISP: 1958
Lenguaje diseñado en un departamento de
investigación, un equipo del MIT dirigido por John
McCarthy
Lenguaje imperativo: estado, estructuras de control, Lenguaje funcional: funciones, recursión, listas,
contador de programa, celdas de memoria
símbolos
Lenguaje compilado
Lenguaje interpretado
30
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
FORTRAN
• Desarrollado por IBM para programar el IBM 704
• FORmula TRANslating system
• Primer manual de FORTRAN octubre de 1956 para el IBM
• Primer compilador abril de 1956.
• Cita de John Backus (Wikipedia sobre FORTRAN):
Much of my work has come from being lazy. I didn't like writing programs, and so, when I was
working on the IBM 701, writing programs for computing missile trajectories, I started work on
a programming system to make it easier to write programs.
31
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
FORTRAN
• Tomado del manual de FORTRAN del IBM 704
32
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
LISP: finales de 50s en el MIT por John McCarthy
• Manual de LISP de 1960 para el IBM 704 escrito por Phyllis A. Fox. del grupo de investigación del
MIT dirigido por McCarthy
• Ejemplo tomado de “The Programming Language LISP”, MIT Press, 1964
33
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
La explosión: más de 2500 (The Language List)
34
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Algunos lenguajes y su fecha de creación
• Consultar el documento PDF y la web de Éric Lévénez
35
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Aspectos que provocan la evolución de los LP
• Recursos y tipos de ordenadores: evolución de los ordenadores
• Aplicaciones y necesidades de los usuarios: desde apps militares a apps personales • Nuevos métodos de programación: el diseño de los LP tienen que soportar los buenos
métodos de programación para implementar programas grandes y complejos
• Estudios teóricos: gracias a la investigación de más de 50 años se conocen los puntos fuertes y
débiles, e influyen en el diseño de los nuevos LP
• Estandarización: cada vez es más necesario que los programas sean portables de unos
sistemas a otros
36
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Lista TIOBE
37
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Categorías de los creadores de los LPs
• Si comprobamos la historia de los lenguajes de programación, podemos clasificar a sus
creadores en tres grandes categorías:
★Investigadores trabajando en empresas (Backus-IBM-FORTRAN, Gosling-Sun-Java)
★Investigadores en universidades y departamentos de ciencia de los computadores (McCarthyMIT-LISP, Wirth-ETH-Pascal, Odersky-EHT-Scala)
★Desarrolladores open source que distribuyen su trabajo a la comunidad (Wall-Perl, MatsumotoRuby)
38
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Los LP en continua evolución: Ruby
• Ruby, un lenguaje de programación ideado en 1993 por
un joven japonés llamado Yukihiro Matsumoto
• Lenguaje multi-paradigma interpretado y muy expresivo
que actualmente se utiliza tanto para desarrollar
aplicaciones web como videojuegos.
• Combina LISP, Smalltalk y Perl
• Proyecto vivo, cada año aparecen nuevas versiones
39
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Los LP en continua evolución: Scala
• Scala, diseñado en 2003 por el profesor alemán
Martin Odersky
• Trabajó en la especificación de Java y fue el
creador del compilador javac
• Respuesta a los problemas de los lenguajes
tradicionales imperativos para manejar la
concurrencia
• Está implementado sobre Java
• Corre en la Máquina Virtual Java
I was convinced that unifying functional and object-oriented programming would
have great practical value. I was frustrated both by the dismissive attitude of the
functional programming community toward OOP and by the belief of objectoriented programmers that functional programming was just an academic
exercise. So, I wanted to show that the two paradigms can be unified and that
something new and powerful could result from that combination. I also wanted to
create a language in which I would personally feel comfortable writing programs.
40
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Historia de los lenguajes de programación
Los LP en continua evolución: Go
• Go, el nuevo lenguaje de programación de Google
lanzado en 2009
• Desarrollado, entre otros, por Ken Thompson, uno
de los padres del UNIX
• Una mezcla de C y Python que intenta conseguir un
lenguaje de programación de sistemas muy
eficiente, expresivo y también multiparadigma.
package main!
!
import "fmt"!
!
func main()!
{!
fmt.Printf("Hola, mundo\n")!
}
41
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Elementos de los lenguajes de programación
Definición de lenguaje de programación
!
• Definición de la Encyclopedia of Computer Science
A programming language is a set of characters, rules for combining them, and rules specifying their effects when executed by a
computer, which have the following four characteristics:
!
- It requires
no knowledge of machine code on the part of the user
- It has machine independence
- Is translated into machine language
!
- Employs
a notation that is closer to that of the specific problem being solved than is machine code
• Definición de Abelson y Sussman
Permite construir nuevas
!
A powerful programming language is more than just a means for instructing a computer to perform
abstracciones que se
tasks. The language also serves as a framework within which we organize our ideas about
processes. Thus, when we describe a language, we should pay particular attention to the means adapten al dominio que se
that the language provides for combining simple ideas to form more complex ideas.
programa
Es de alto nivel, cercano a los
Define un proceso que se
problemas que se quieren resolver
(abstracción)
ejecuta en el ordenador
42
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Elementos de los lenguajes de programación
Para Abelson y Sussman, todos los lenguajes de progamación permiten combinar ideas simples
en ideas más complejas mediante los siguientes tres mecanismos
• Expresiones primitivas que representan las entidades más simples del lenguaje
• Mecanismos de combinación con los que se construyen elementos compuestos a partir de
elementos más simples
• Mecanismos de abstracción con los que dar nombre a los elementos compuestos y
manipularlos como unidades
Los lenguajes son para las personas
43
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Elementos de los lenguajes de programación
Importancia del aprendizaje de técnicas de LPs
• Mejora el uso del lenguaje de programación
• Incrementa el vocabulario de los elementos de programación
• Permite una mejor elección del lenguaje de programación
• Mejora la habilidad para desarrollar programas efectivos y eficientes
• Facilita el aprendizaje de un nuevo lenguaje de programación
• Facilita el diseño de nuevos lenguajes de programación
44
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Abstracción
Ejemplo: modelado de una biblioteca
El
modelado
del
funcionamiento de una
biblioteca contiene
abstracciones como “libros”,
“reserva”, “pre-reserva” o
“libros disponibles” que
representan conceptos del
dominio que deben ser
implementados en nuestra
solución
Una misión fundamental de los lenguajes de programación es
proporcionar herramientas que sirvan para construir estas
abstracciones.
45
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Paradigmas de programación
• Un paradigma define un conjunto de reglas, patrones y estilos de programación que son usados
por un grupo de lenguajes de programación
• La separación entre los paradigmas y los lenguajes no es estricta
• Paradigmas más importantes:
• Paradigma funcional
• Paradigma lógico
• Paradigma imperativo o procedural
• Paradigma orientado a objetos
46
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Paradigmas de programación
Paradigma funcional
• La computación se realiza mediante la evaluación de
expresiones
• Definición de funciones
• Funciones como datos primitivos
• Valores sin efectos laterales, no existen referencias a
celdas de memoria en las que se guarda un estado
modificable
Ejemplo en Lisp
(define (factorial x)!
(if (= x 0)!
1!
(* x (factorial (- x 1)))))!
!
(factorial 8)!
40320!
(factorial 30)!
265252859812191058636308480000000
• Programación declarativa (en la programación
funcional pura)
• Lenguajes: LISP, Scheme, Haskell, Scala, Clojure.
47
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Paradigmas de programación
Paradigma lógico
• Definición de reglas
• Unificación como elemento de computación
Ejemplo en Prolog
padrede('juan', 'maria'). % juan es padre de maria!
padrede('pablo', 'juan'). % pablo es padre de juan!
padrede('pablo', 'marcela').!
padrede('carlos', 'debora').!
!
• Programación declarativa
• Lenguajes: Prolog, Mercury, Oz.
hijode(A,B) :- padrede(B,A).!
abuelode(A,B) :- padrede(A,C), padrede(C,B).!
hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \==
B.
!
!
familiarde(A,B) :- padrede(A,B).!
familiarde(A,B) :- hijode(A,B). !
familiarde(A,B) :- hermanode(A,B).!
!
?- hermanode('juan', 'marcela').!
yes!
?- hermanode('carlos', 'juan').!
no!
?- abuelode('pablo', 'maria').!
yes!
?- abuelode('maria', 'pablo').!
no
48
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Paradigmas de programación
Paradigma imperativo
• Definición de procedimientos
• Definición de tipos de datos
Los lenguajes de programación que cumplen el paradigma imperativo se
caracterizan por tener un estado implícito que es modificado mediante
instrucciones o comandos del lenguaje. Como resultado, estos lenguajes
tienen una noción de secuenciación de los comandos para permitir un
control preciso y determinista del estado.
• Chequeo de tipos en tiempo de compilación
• Cambio de estado de variables
• Pasos de ejecución de un proceso
Ejemplo en Pascal
type !
tDimension = 1..100;!
eMatriz(f,c: tDimension) = array [1..f,1..c] of real;!
!
!
!
!
tRango = record!
f,c: tDimension value 1;!
end;!
tpMatriz = ^eMatriz;!
procedure EscribirMatriz(var m: tpMatriz);!
var filas,col : integer;!
begin!
for filas := 1 to m^.f do begin!
for col := 1 to m^.c do!
write(m^[filas,col]:7:2);!
writeln(resultado);!
writeln(resultado)!
end;
!
end;
49
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Paradigmas de programación
Paradigma OO
• Definición de clases y herencia
public class Bicicleta {!
public int marcha;!
public int velocidad;!
!
!
!
• Objetos como abstracción de datos y
procedimientos
• Polimorfismo y chequeo de tipos en
tiempo de ejecución
!
public Bicicleta(int velocidadInicial, int marchaInicial) {!
marcha = marchaInicial;!
velocidad = velocidadInicial;!
}!
public void setMarcha(int nuevoValor) {!
marcha = nuevoValor;!
}!
public void frenar(int decremento) {!
velocidad -= decremento;!
}!
public void acelerar(int incremento) {!
velocidad += incremento;!
}!
}!
!
public class MountainBike extends Bicicleta {!
public int alturaSillin;!
!
• Ejemplo en Java
!
public MountainBike(int alturaInicial, !
int velocidadInicial, int marchaInicial) {!
super(velocidadInicial, marchaInicial);!
alturaSillin = alturaInicial;!
}
!
public void setAltura(int nuevoValor) {!
alturaSillin = nuevoValor;!
}
!
}!
!
public
!
class Excursion {!
public static void main(String[] args) {!
MountainBike miBicicleta = new MoutainBike(10,10,3);!
miBicicleta.acelerar(10);!
miBicicleta.setMarcha(4);!
miBicicleta.frenar(10);!
}!
50
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Compiladores e intérpretes
• Existen una gran variedad de estrategias para conseguir que un programa se ejecute en un
ordenador
• Todas se basan en los "meta-programas" (compiladores, intérpretes, etc.) cuyos datos de entrada
son el código fuente de otros programas.
• El resultado final debe ser siempre la ejecución del programa que se está procesando.
• Esto lo consiguen los meta-programas con distintos enfoques y técnicas: compilación,
interpretación, ejecución mediante máquina virtual, enlazado de librerías, etc.
51
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Compiladores e intérpretes
Compilación
• Imágenes tomadas del libro Programming Language Pragmatics
• Ejemplos: C, C++
• Diferentes momentos en la vida de un programa: tiempo de compilación y tiempo de ejecución
• Mayor eficiencia
52
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Compiladores e intérpretes
Interpretación
• Ejemplos: BASIC, LISP, Scheme, Python, Ruby
• No hay diferencia entre el tiempo de compilación y el tiempo de ejecución
• Mayor flexibilidad: el código se puede construir y ejecutar "on the fly" (funciones lambda o
clousures)
53
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Compiladores e intérpretes
Ejecución en máquina virtual
• Cuidado, no confundir con las máquinas virtuales del tipo VirtualBox o VmWare.
• En nuestro caso, la máquina virtual es un proceso que se ejecuta en el sistema operativo y que
ejecuta el código binario intermedio al que se compila un lenguaje (Java, por ejemplo).
• Permite independizar la generación de código del procesador en el que se ejecuta el programa. El
código binario intermedio es multiplataforma.
• Ejemplos: Java, Scala
54
Lenguajes y Paradigmas de Programación. Universidad Alicante. DCCIA. Curso 2013-2014. Cristina Pomares, Domingo Gallardo
Compiladores e intérpretes
Enlazado de rutinas y librerías y preprocesamiento
Enlazado de rutinas y librerías
El preprocesador analiza el código y
sustituye macros. Ejemplo: C, C++
55