Historia de los lenguajes
de programación
Eduard Tomàs i Avellana
@eiximenis
Inicios...
Charles Babbage
(1791 – 1871)
Ada Lovelace
(1815 – 1852)
Grace Murray Hopper
1906 - 1992
Inventó el primer
compilador (A0) para el
UNIVAC 1 en 1951
Popularizó la idea de
lenguajes...
El primer bug
Se encontró una
arna atrapada en
una válvula del
Mark 2
Primeros ordenadores
• 1943 Colossus Mark 1,2,3
• 1946 ENIAC
• Primer Turing completo
• 1960 Circuito integrado
• 1971 Mic...
Turing completo
Un ordenador es “turing completo” si tiene un poder computacional
equivalente a la máquina universal de Tu...
Lenguajes “padre”
1. Fortran (1957)  Algol, BASIC
2. ALGOL(1958)  Pascal, Modula 2, Simula
3. LISP (1958)  Clojure, Sch...
70’s segunda generación
• Pascal (1970)
• C (1972)
• Prolog (1972)
• ML (1973)
• Scheme (1975)
• SQL (1978)
80’s – Imperativos al poder
Se mejoran y combinan los paradigmas
inventados en las décadas 60-70.
• C++ (1980)
• MATLAB (1...
90’s – Auge funcional
• Haskell (1990)
• Python (1991)
• Ruby (1993)
• CLOS (1994)
• Java (1995)
• JavaScript (1995)
• C# ...
Actualidad...
Mezca de paradigmas, metaprogramación,
programación distribuída...
• F# (2002)
• Groovy, Scala (2003)
• Cloj...
Vista aérea de lenguajes
de desarrollo
Eduard Tomàs i Avellana
@eiximenis
Una clasificación de lenguajes...
Con / Sin tipos
Estáticos / Dinámicos
Fuerte / Débil
Nominal / Duck
Typing / Structural
...
Según paradigma
Imperativos secuenciales
El código se ejecuta en el orden en que está
escrito
Control de flujo muy reducido (salta x línea...
Imperativos estructurados
Basados en los secuenciales añaden secuencias
básicas de estructura:
Secuencias
Bucles (for, whi...
Imperativos procedurales
Código es básicamente un conjunto de procedimientos
(funciones).
Un procedimiento concreto es el ...
Imperativos orientados a objetos
Código consiste en un conjunto de objetos que colaboran entre ellos.
Objeto consiste en i...
Declarativos lógicos
Lenguajes basados en la lógica formal
Programa es un conjunto de sentencias en
lógica formal indicand...
Declarativos funcionales
Código basado en funciones entendiendo por
función el concepto matemático de ella: sin
cambios de...
Según tipado
Tipado estático vs dinámico
En tipado estático...
1. El tipo de una variable es fijo e inmutable
2. El tipo de una variabl...
Tipado fuerte vs tipado débil
No hay definición clara sobre lo que es tipado fuerte y tipado débil.
En general decimos que...
Primera clasificación...
Tipado estático Tipado dinámico
Tipado fuerte Scala, Haskell, Java, C++, Java, C# Ruby
Tipado déb...
Duck typing
Paradigma típico de algunos lenguajes en el que la presencia de
determinados métodos y propiedades en un objet...
Structural typing
Sistema de tipos estático en el que la presencia de determinados
métodos y propiedades en una clase dete...
Próxima SlideShare
Cargando en…5
×

Vista aérea de los lenguajes de programación

834 visualizaciones

Publicado el

PPT de la última clase del curso de "Introducción a la programación" impartido por EscuelaIT.

Un repaso rápido a la historia de los lenguajes de programación y su clasificación según paradigma (procedurales, estructurados, orientados a objetos, funcionales,...) y su sistema de tipos (dinámicos, estáticos).

Publicado en: Software
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
834
En SlideShare
0
De insertados
0
Número de insertados
41
Acciones
Compartido
0
Descargas
30
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

Vista aérea de los lenguajes de programación

  1. 1. Historia de los lenguajes de programación Eduard Tomàs i Avellana @eiximenis
  2. 2. Inicios... Charles Babbage (1791 – 1871) Ada Lovelace (1815 – 1852)
  3. 3. Grace Murray Hopper 1906 - 1992 Inventó el primer compilador (A0) para el UNIVAC 1 en 1951 Popularizó la idea de lenguajes independientes de la máquina
  4. 4. El primer bug Se encontró una arna atrapada en una válvula del Mark 2
  5. 5. Primeros ordenadores • 1943 Colossus Mark 1,2,3 • 1946 ENIAC • Primer Turing completo • 1960 Circuito integrado • 1971 Microprocesador • 1981 IBM PC
  6. 6. Turing completo Un ordenador es “turing completo” si tiene un poder computacional equivalente a la máquina universal de Turing • Si tuviese memória infinita • Si tuviese almacenamiento infinito Tesis Church-Turing: Todo algoritmo puede ser descrito mediante una máquina universal de Turing. Es el inicio de los ordenadores programables (arquitectura de Von Neumann)
  7. 7. Lenguajes “padre” 1. Fortran (1957)  Algol, BASIC 2. ALGOL(1958)  Pascal, Modula 2, Simula 3. LISP (1958)  Clojure, Scheme 4. COBOL (1959) 5. Simula (1962, 67) Smalltalk, C++ 6. CPL (1963)  C, C++, Java, C#, ObjectiveC
  8. 8. 70’s segunda generación • Pascal (1970) • C (1972) • Prolog (1972) • ML (1973) • Scheme (1975) • SQL (1978)
  9. 9. 80’s – Imperativos al poder Se mejoran y combinan los paradigmas inventados en las décadas 60-70. • C++ (1980) • MATLAB (1984) • Eiffel (1985) • Erlang (1986) • Perl (1987)
  10. 10. 90’s – Auge funcional • Haskell (1990) • Python (1991) • Ruby (1993) • CLOS (1994) • Java (1995) • JavaScript (1995) • C# (2000)
  11. 11. Actualidad... Mezca de paradigmas, metaprogramación, programación distribuída... • F# (2002) • Groovy, Scala (2003) • Clojure (2007) • Dart (2011) • Swift (2014)
  12. 12. Vista aérea de lenguajes de desarrollo Eduard Tomàs i Avellana @eiximenis
  13. 13. Una clasificación de lenguajes... Con / Sin tipos Estáticos / Dinámicos Fuerte / Débil Nominal / Duck Typing / Structural Typing Tipado Imperativo Secuencial Estructurado Procedural OOP Declarativo Lógico Funcional Paradigma
  14. 14. Según paradigma
  15. 15. Imperativos secuenciales El código se ejecuta en el orden en que está escrito Control de flujo muy reducido (salta x líneas, salta a la línea x) No hay encapsulación de ningún tipo (todas las variables globales) Ejemplo: Ensamblador
  16. 16. Imperativos estructurados Basados en los secuenciales añaden secuencias básicas de estructura: Secuencias Bucles (for, while, loop) Condicionales (if/switch) No hay encapsulación de ningún tipo Ejemplo: Basic
  17. 17. Imperativos procedurales Código es básicamente un conjunto de procedimientos (funciones). Un procedimiento concreto es el “inicial” El programa consiste en una secuencia de llamadas a procedimientos Encapsulación de estado de procedimiento (variables locales) Ejemplo: C, Pascal
  18. 18. Imperativos orientados a objetos Código consiste en un conjunto de objetos que colaboran entre ellos. Objeto consiste en identidad, estado y funcionalidad Encapsulación a nivel de objeto (estado) Basados en clases (Smalltalk, Java, C#, C++, Ruby) Usan clases para definir la funcionalidad y posibles valores de los estados de los objetos Basados en objetos (JavaScript) Se definen objetos y se especifica su funcionalidad y estado ad-hoc para cada objeto Todos ellos soportan las características “básicas” de la OOP (herencia, polimorfismo, ...)
  19. 19. Declarativos lógicos Lenguajes basados en la lógica formal Programa es un conjunto de sentencias en lógica formal indicando hechos y reglas sobre un determinado problema Ejemplo: Prolog
  20. 20. Declarativos funcionales Código basado en funciones entendiendo por función el concepto matemático de ella: sin cambios de estado, inmutabilidad, sin efectos colaterales (función “pura”) Muy basados en recursión y en tratamiento de listas (influencia matemática) Ejemplos: Scala, F#, LISP, Scheme, Haskell
  21. 21. Según tipado
  22. 22. Tipado estático vs dinámico En tipado estático... 1. El tipo de una variable es fijo e inmutable 2. El tipo de una variable es conocido en algun momento antes de usarse En tipado dinámico... 1. El tipo de una variable es mutable 2. El tipo de una variable no tiene por que ser declarado ni conocido de antemano
  23. 23. Tipado fuerte vs tipado débil No hay definición clara sobre lo que es tipado fuerte y tipado débil. En general decimos que un lenguaje tiene tipado débil si las reglas sobre lo que se puede hacer con los tipos no son estrictas. Variables de distintos tipos pueden ser mezcladas en distintas operaciones. En caso contrario decimos que el lenguaje tiene un tipado fuerte. Pero muchos lenguajes ofrecen comportamientos mixtos. No debe confundirse nunca con lenguajes dinámicos o estáticos
  24. 24. Primera clasificación... Tipado estático Tipado dinámico Tipado fuerte Scala, Haskell, Java, C++, Java, C# Ruby Tipado débil Objective-C, Visual Basic (variant) JavaScipt Algunos lenguajes con tipado estático fuerte ofrecen características de tipado estático débil (C# con conversiones de tipo, C/C++ con punteros void, ...) Algunos lenguajes con tipado estático ofrecen características de tipado dinámico (C# con dynamic, Objective-C con id, Swift con Any, ...).
  25. 25. Duck typing Paradigma típico de algunos lenguajes en el que la presencia de determinados métodos y propiedades en un objeto determina su validez semántica, en lugar de la relación de herencia que pueda tener con otros objetos. Se resume en la frase: “Si camina como un pato y grazna como un pato, entonces es un pato”. Muy común en lenguajes dinámicos
  26. 26. Structural typing Sistema de tipos estático en el que la presencia de determinados métodos y propiedades en una clase determina su validez semántica. Dos tipos se consideran “iguales” si tienen las mismas propiedades y métodos con independencia de donde se declaran. Viene a ser el “equivalente” al Duck Typing para lenguajes con tipado estático. Ejemplo: C++ a través de templates, Ocaml, Scala

×