Download Lenguajes y Paradigmas de Programación

Document related concepts

Haskell wikipedia , lookup

Función de orden superior wikipedia , lookup

Wolfram (lenguaje de programación) wikipedia , lookup

Ocaml wikipedia , lookup

Caml wikipedia , lookup

Transcript
Lenguajes y Paradigmas
de Programación
Clase 2: Lenguajes de Programación
Índice
Historia de los lenguajes de programación
Características de los lenguajes de
programación
Paradigmas de programación
Lenguajes más importantes
1957 FORTRAN
1958 ALGOL
1960 Lisp
1960 COBOL
1962 APL
1962 SIMULA
1964 BASIC
1964 PL/I
1970 Prolog
1972 C
1975 Pascal
1975 Scheme
1975 Modula
1983 Smalltalk-80
1983 Objective-C
1983 Ada
1986 C++
1986 Eiffel
1987 Perl
1988 Tcl/Tk
1990 Haskell
1991 Python
1993 Ruby
1995 Java
1995 PHP
2000 C#
enlace
Lista completa
Diagrama completo
Póster de O'Reilly
Influencias en la evolución de los LP
Recursos del ordenador
Aplicaciones
Métodos de programación
Estudios teóricos
Estandarización
Lenguajes y sus influencias a finales
del siglo XX
¿Por qué estudiar lenguajes de
programación?
Mejora el uso de los lenguajes 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
Proyectos activos en la actualidad
freshmeat.net
Historia en expansión
Timeline of Programming Languages
¿Quién diseña un lenguaje de programación?
Lenguaje de Programación Ruby
1993
Yukihiro Matsumoto
Más potente que Perl
Más OO que Phyton
P. Funcional e Imperativa
balanceada
Expansión: grupos de noticias
¿Podemos conocer TODOS los
lenguajes de programación?
XML no es un lenguaje de
programación
XML es un lenguaje de representación de datos
No tiene semántica asociada
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
<person>
<name>Fred Bloggs</name>
<birthdate>27/11/2008</birthdate>
<gender>Male</gender>
</person>
<person>
</people_list>
¿Los lenguajes visuales son lenguajes de
programación?
Son lenguajes muy interesantes pero no todos son
lenguajes de programación. Por ejemplo, un lenguaje
para definir animaciones multimedia no es un LP.
Scratch : un lenguaje visual para niños
¿Qué es un 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:
1. It requires no knowledge of machine code on the
part of the user
2. It has machine independence
3. Is translated into machine language
4. Employs a notation that is closer to that of the
specific problem being solved than is machine code"
¿Qué es un lenguaje de
programación?
Definición de Abelson y Sussman:
"A powerful programming language is more
than just a means for instructing a computer to
perform 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 that the language provides for
combining simple ideas to form more complex
ideas."
Características de un lenguaje de
programación
Define un proceso que se ejecuta en un
computador
Es de alto nivel, cercano a los problemas que se
quieren resolver (abstracción)
Permite construir nuevas abstracciones que se
adapten al dominio que se programa
Elementos de los LP
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
Abstracción
La abstracción es la herramienta/habilidad fundamental de
los informáticos.
Los informáticos usan abstracciones:
Arrays, grafos, estructuras de datos, ...
Protocolos: TCP/IP, HTTP, llamadas a procedimiento
remoto
Servicios del sistema operativo: dispositivos, memoria,
ficheros
Los informáticos crean nuevas abstracciones:
Nuevas APIs para los programas
Modelos de datos que simulan la realidad (aplicaciones
de gestión, inventario, matriculación, etc.)
Nuevos interfaces de usuario (iPhone, web, etc.)
Abstracción
Según la Wikipedia:
"Abstraction is the process or result of generalization by
reducing the information content of a concept or an observable
phenomenon, typically in order to retain only information which
is relevant for a particular purpose.
For example, abstracting a leather soccer ball to a ball retains
only the information on general ball attributes and behaviour.
Computer scientists use abstraction to understand and solve
problems and communicate their solutions with the computer in
some particular computer language."
Los lenguajes de programación proporcionan herramientas
para construir abstracciones.
Paradigmas de programación
Los más importantes
Paradigma funcional
Paradigma lógico
Paradigma imperativo o procedural
Paradigma orientado a objetos
Buen artículo en la Wikipedia:
http://en.wikipedia.org/wiki/Programming_paradigm
Paradigma funcional
Definición de funciones
Funciones como datos primitivos
Valores sin efectos laterales, no existe la mutación
Programación declarativa
Lenguajes: LISP, Scheme, Haskell, Scala, Clojure
Ejemplo: Scheme
(define (factorial x)
(if (= x 0)
1
(* x (factorial (- x 1)))))
>(factorial (+ 2 1 5))
40320
>(factorial 30)
265252859812191058636308480000000
Paradigma lógico
Definición de reglas
Unificación como elemento de computación
Programación declarativa
Lenguajes: Prolog, Mercury, Oz
Ejemplo: Prolog
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela').
padrede('carlos', 'debora').
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
Paradigma procedural
Definición de procedimientos
Definición de tipos de datos
Chequeo de tipos en tiempo de compilación
Cambio de estado de variables
Pasos de ejecución de un proceso
Lenguajes: Fortran, Algol, C, Pascal
Ejemplo: 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;
Paradigma Orientado a Objetos
Definición de clases y herencia
Objetos como abstracción de datos y procedimientos
Polimorfismo y chequeo de tipos en tiempo de ejecución
Lenguajes: Modula, Smalltalk, Java, C#
Ejemplo: Java (1)
public class Bicicleta {
public int marcha;
public int velocidad;
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;
}
}
Ejemplo: Java (2)
public class MountainBike extends Bicicleta {
public int alturaSillin;
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);
}
}
Resumiendo
Siempre se ha dicho que aprender
idiomas sirve para abrir la mente y
madurar como persona...
¡Lo mismo pasa con los lenguajes de
programación!
¿Preguntas?