Download Historia de los Lenguajes

Document related concepts

Programación funcional wikipedia , lookup

Clojure wikipedia , lookup

Scheme wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Lisp wikipedia , lookup

Transcript
FIEC01552
Lenguajes de Programación
Sesión 1: Introducción a Lenguajes
Lenguajes de Programación
Los lenguajes de Programación son el corazón de
la Ciencia de la Computación.
Son herramientas que usamos no solo para
comunicarnos con las máquinas sino también con
las personas.
“el valor de un lenguaje se debe juzgar según la
forma en que afecta la producción de Software y
a la facilidad con la que puede integrarse a otras
herramientas”
Slide  2
Objetivos
Adquirir
habilidad de apreciar y evaluar
lenguajes,
identificando
sus
límites
y
posibilidades.
Habilidad
para elegir, para diseñar, implementar
o utilizar un lenguaje.
Enfatizar
Slide  3
la abstracción.
Contenido:
¿Por
qué estudiar Lenguajes?
Historia
de los Lenguajes
Paradigmas
en Lenguajes
Criterios
para evaluar los lenguajes de
programación
–
Slide  4
¿Qué hace a un Lenguaje bueno?
¿Por qué estudiar Lenguajes?
Aumentar
–
Slide  5
la capacidad para producir software.
Conocer profundamente las características de los
lenguajes permite aprovechar su potencia y evitar
errores, minimizando esfuerzo
¿Por qué estudiar Lenguajes?
Mejora
la habilidad para desarrollar mejores
algoritmos.
–
Aprendemos a elaborar los algoritmos más
eficientes en concordancia con el lenguaje que
estamos utilizando.
–
Ejemplo: Recursión
Slide  6
¿Por qué estudiar Lenguajes?
Mejora
el uso de su lenguaje de programación
preferido.
–
Si se entiende como se implementa cada
característica se mejora la capacidad para escribir
programas eficientes.
–
Ejemplo: Orientación a Objetos (Herencia)
Slide  7
¿Por qué estudiar Lenguajes?
Incrementar
–
–
Slide  8
el vocabulario
El lenguaje
•
equivale a comunicación.
•
es una ayuda y una limitación al pensamiento.
•
permite expresar y estructurar el pensamiento
Incrementamos la capacidad para expresar ideas
¿Por qué estudiar Lenguajes?
Incrementa
el conocimiento de construcciones
posibles.
–
Libera la mente para poder pensar en términos del
problema y no de determinado lenguaje.
–
Ejemplo: Tratar de resolver todo en termino de las
capacidades de C.
Slide  9
¿Por qué estudiar Lenguajes?
Permite
elegir mejor el lenguaje a utilizar para
cada tarea.
–
Slide  10
Conocer las fortalezas y debilidades de los
diferentes lenguajes nos permite saber que
problema podemos resolver más fácilmente con
cada uno y por lo tanto se reduce el esfuerzo de
codificación.
•
CGI de Internet vs. Programar un controlador de
dispositivo.
•
calculo
ADA – Fortran
•
inteligencia artificial
Prolog - ML
¿Por qué estudiar Lenguajes?
Hace
más fácil aprender nuevos lenguajes de
programación.
–
Slide  11
Un conocimiento de la estructura de los lenguajes de
programación reduce considerablemente la curva de
aprendizaje de un lenguaje nuevo.
¿Por qué estudiar Lenguajes?
Hace
más fácil el diseño e implementación de
lenguajes.
–
El programador puede convertirse en diseñador o
implementador de un lenguaje.
–
O no necesariamente nuevos lenguajes de
programación, pero cuando programamos muchas
veces necesitamos crear códigos de comunicación.
–
Ejemplo: Manejo de formas en Internet
Slide  12
Contenido:
¿Por
qué estudiar Lenguajes?
Historia
de los Lenguajes
Paradigmas
en Lenguajes
Criterios
para evaluar los lenguajes de
programación
–
Slide  13
¿Qué hace a un Lenguaje bueno?
ENIAC
Slide  15
15
IBM 29: Oct /1964
Slide  17
Historia de los Lenguajes
Slide  22
Contenido:
¿Por
qué estudiar Lenguajes?
Historia
de los Lenguajes
Paradigmas
en Lenguajes
Criterios
para evaluar los lenguajes de
programación
–
Slide  23
¿Qué hace a un Lenguaje bueno?
Paradigmas de Lenguajes
Se
reconoce generalmente 4 paradigmas de
programación:
–
Imperativo (Estructurado)
–
Aplicativo (Funcional)
–
Orientado a Objetos
–
Lógico
Slide  24
Lenguajes Imperativos
Su
objetivo es entender y definir el estado de la
máquina (conjunto de posiciones de memorias,
cada una conteniendo un valor).
Lenguajes
orientados a instrucciones
El
programa consiste en elaborar un conjunto de
instrucciones para que la máquina llegue a la
respuesta.
Ejemplos:
Sintaxis:
Slide  25
C, Fortran, Pascal, Cobol
S1, S2, S3, S4, …
Lenguajes Imperativos
Programación:
serie de pasos (input, cálculo,
ouput).
Elementos:
abstracción procedural, asignación,
loops, secuencias, condicionales.
Slide  26
Lenguajes Funcionales
Su
objetivo es entender la función que produciría
la respuesta deseada.
Es
orientada hacia la composición de funciones.
Programar
consiste en construir la función que
halle la respuesta.
Ejemplos:
Sintaxis:
Slide  27
ML, Lisp, Scheme, Haskell
F1(F2(F3(x)))
Lenguajes Funcionales
Programación:
colección de funciones que se
combinan en formas complejas para construir
nuevas funciones.
Elementos:
Slide  28
alto orden, composición, recursión.
Orientados a Objetos
Su
objetivo es modelar el problema con elementos
similares a los realmente presentes.
Programar
significa generar objetos que
intercambian mensajes entre si para resolver un
problema.
Ejemplos:
Sintáxis:
Slide  29
Smalltalk, C++, Java, Squeak, C#
O1 ->mensaje-> O2.
Orientados a Objetos
Lenguajes
imperativos que unen
aplicativos con sentencias imperativas.
diseños
Sintaxis:
Conjunto de objetos (clases) conteniendo
datos (concepto imperativo) y métodos (conceptos
aplicativos).
Programación:
colección de objetos que
interactúan pasándose mensajes que transforman
estados.
Elementos:
modelado de
herencia, encapsulamiento.
Slide  30
objetos,
clases,
Lenguajes Lógicos
Definen
reglas para decidir cuando la respuesta
ha sido alcanzada.
Utiliza
un conjunto de reglas para deducir los
atributos de la respuesta.
Ejemplos:
Sintaxis:
Slide  31
Prolog
Regla -> Conclusión
Contenido:
¿Por
qué estudiar Lenguajes?
Historia
de los Lenguajes
Paradigmas
en Lenguajes
Criterios
para evaluar los lenguajes de
programación
–
Slide  32
¿Qué hace a un Lenguaje bueno?
Slide  33
Facilidad de Escritura
La
facilidad de escritura es la medida de cuan fácil
resulta usar un lenguaje para construir soluciones.
 Simplicidad
 Claridad
 Ortogonalidad
 Soporte
Slide  34
de Abstracción
Facilidad de Escritura
Simplicidad
–
El lenguaje debería ser lo suficientemente pequeño y simple para
ser entendido en su totalidad
• Un pequeño número de construcciones primitivas.
• Un conjunto consistente de reglas para combinarlas
(ortogonalidad).
–
¿Qué tienen de malo los lenguajes “grandes” y “complejos”?
• Contienen tantas características que muchas de ellas
nunca llegan a usarse ni a entenderse.
• La complejidad del lenguaje crece de forma no lineal
con el número de características que incorpora.
Slide  35
Facilidad de Escritura
Simplicidad
–
Sin embargo,
• El lenguaje más usado (C++) es complejo.
• Uno de los más recomendados (Ada) es
grande y complejo.
• Java, que nació con vocación de ser simple,
tiende a hacerse más grande y complejo.
Slide  36
Facilidad de Escritura
Claridad
–
–
Un programador sólo puede escribir programas fiables si
entiende con toda claridad lo que significa (implica) cada
una de las estructuras del lenguaje.
La especificación del lenguaje y la calidad de su
documentación es absolutamente crítica en este aspecto:
• Debe evitarse cualquier ambigüedad.
• No debe ser necesario escribir y ejecutar
fragmentos de código para descubrir el
significado de una característica del lenguaje.
–
Slide  37
.
Facilidad de Escritura
Ortogonalidad
–
El efecto de la combinación de características debe
entenderse fácilmente y ser predecible.
–
Proporciona un mayor grado
restricciones ni casos especiales.
–
Las reglas del lenguaje deben tener las mínimas
excepciones posibles.
–
El usuario comprende mejor si tiene un pequeño
número de primitivas y un conjunto consistente de
reglas de combinación.
Slide  38
de
generalidad
sin
Facilidad de Escritura
Ortogonalidad

Si es ortogonal, un lenguaje es fácil de aprender y usar.

Por ejemplo: Asignación y Tipos
X=5
F(x)=x+3
A[y]=8
Slide  39
Facilidad de Escritura
Ortogonalidad
–
¿Qué tienen de malo la falta de ortogonalidad?
• Que hace imposible deducir nuevas propiedades del lenguaje de
las que ya se conocen.
• Que va en contra de la claridad.
–
Ejemplos de falta de ortogonalidad:
• En Pascal todos los tipos escalares pueden leerse y escribirse,
excepto los booleanos que sólo pueden escribirse.
• En C las funciones pueden retornar “structs” pero no “arrays”
• En C los parámetros se pasan a las funciones por valor, excepto
los arrays que se pasan por referencia.
Slide  40
Facilidad de Escritura
Soporte
de Abstracción
–
La abstracción es la capacidad para definir y utilizar
estructuras y operaciones muy complicadas de forma
que la complejidad quede oculta.
–
Concepto clave para manejar la complejidad.
–
Abstracción de procesos y de datos.
–
Principio de diseño: Ocultamiento de la información
Slide  41
Legibilidad
Fácil
de leer a las personas (equipo)
 SEMANTICA
 SINTAXIS
 DEFINICION
 ESTRUCTURAS
DE DATOS
 ESTRUCTURAS
DE CONTROL
Slide  42
Legibilidad
Semántica
–
Slide  43
La semántica de un lenguaje especifica el significado
algorítmico de un programa y se define como un conjunto
de reglas que describen el comportamiento de ese
lenguaje en tiempo de ejecución.
Legibilidad
Sintaxis
–
La sintaxis determina la forma en que se combinan los elementos del
lenguaje para construir sentencias y programas.
–
Unas reglas sintácticas adecuadas son fundamentales para que los
programas sean legibles.
• Documentación y comentarios
• Elección de nombres
• Uso de constantes
• If-then-else anidados
• Separación de sentencias
• Indentación
Slide  44
Legibilidad
Sintaxis
–
Ejemplos de una “mala” sintaxis:
• Restringir el tamaño de los identificadores.
• Uso del símbolo = para realizar asignaciones.
• Palabras reservadas con más de un significado (static
en en C).
• Uso de llaves {... ...} para delimitar bloques.
Slide  45
Legibilidad
Definición
del lenguaje
–
Precisión en la definición de la sintaxis y de la semántica
–
Ambigüedad: ejemplo, M(i) puede significar un
elemento del arreglo M ó una llamada a la
función M
–
Portabilidad
–
Definiciones formales
Slide  46
Legibilidad
Estructuras
–
Programación estructurada
Estructuras
–
Slide  47
de control
de datos
Facilidades para expresar los datos del problema
Confiabilidad
 Correcto:
cumple con las especificaciones
 Verificación
 Chequeo
 Robusto
Slide  48
de programas: probar su corrección
de tipos
Confiabilidad
Chequeo
–
de tipos
Chequeos estáticos y dinámicos
Robusto
–
Capacidad de prevenir situaciones
–
Manejo de excepciones
Slide  49
Mantenibilidad
Modificabilidad
Factoreo
Localidad
Slide  50
Mantenibilidad
Mantenible
–
Modificabiliad: facilidad de introducir
cambios
–
Factoreo: una sola vez y luego rehusar
–
Localidad: el efecto de una característica
se restringirse a una porción local del
programa
Slide  51
Eficiencia
 Tiempo
y Espacio
 Esfuerzo
humano
 Optimizable
Slide  52
Contenido:
¿Por
qué estudiar Lenguajes?
Historia
de los Lenguajes
Paradigmas
en Lenguajes
Criterios
para evaluar los lenguajes de
programación
–
Slide  53
¿Qué hace a un Lenguaje bueno?
¿Qué hace a un lenguaje bueno?
Naturalidad
de la aplicación
–
La estructura del programa refleja la estructura lógica del
algoritmo.
–
Cada lenguaje generalmente se especializa en un campo
de acción determinado y es más fácil resolver ciertos
problemas con él.
Slide  54
¿Qué hace a un lenguaje bueno?
Facilidad
de verificación
–
Debe proveer una manera de corroborar que el programa
efectivamente realiza su tarea.
–
Una sintaxis sencilla facilita la verificación.
Slide  55
¿Qué hace a un lenguaje bueno?
Ambiente
de programación
–
Debe contar con un entorno que facilite la programación
en el lenguaje.
–
Generalmente lenguajes no tan buenos, pero que tienen
un buen entorno de programación, son más usados en el
mercado.
Slide  56
¿Qué hace a un lenguaje bueno?
Portabilidad
–
Que tan fácil se puede transportar la aplicación de la
máquina en que se desarrolló a otras máquinas donde va
a ser ejecutada.
–
El mejor ejemplo de esto es programación para Internet.
Slide  57
¿Qué hace a un lenguaje bueno?
Costo
de uso
–
Costo de ejecución
–
Costo de traducción
–
Costo de creación, prueba y uso
–
Costo de mantenimiento
Slide  58