Beruflich Dokumente
Kultur Dokumente
Los pioneros
Los primeros lenguajes de programacin aparecieron a finales de la dcada de los 50 FORTRAN, equipo de IBM dirigido por John W. Backus FORmula TRANslating system Primer manual de FORTRAN octubre de 1956 Primer compilador abril de 1956.
Los pioneros
Los primeros lenguajes de programacin aparecieron a finales de la dcada de
los 50
FORTRAN, equipo de IBM dirigido por John W. Backus FORmula TRANslating system Primer manual de FORTRAN octubre de 1956 Primer compilador abril de 1956.
La siguiente tabla (extraida del libro Programming Languages. Design and Implementation, de Terrence W. Pratt y Marvin V. Zelkowitz) muestra una pequea lista de los lenguajes y las influencias que fueron importante a finales del siglo 20.
Mejora el uso del lenguaje de programacin Incrementa el vocabulario de los elementos de programacin Permite una mejor eleccin del lenguaje de programacin Mejora la habilidad para desarrollar programas efectivos y eficientes Facilita el aprendizaje de un nuevo lenguaje de programacin Facilita el diseo de nuevos lenguajes de programacin
La evolucin no se detiene
Ruby
Matsumoto
Lenguaje multi-paradigma interpretado y muy expresivo que actualmente se
Scala
Scala, diseado en 2003 por el profesor alemn Martin Oderski Respuesta a los problemas de los lenguajes tradicionales imperativos para
manejar la concurrencia
Est implementado sobre Java y corre en la Mquina Virtual Java
Go
Go, el nuevo lenguaje de programacin de Google Una mezcla de C y Python que intenta conseguir un lenguaje de programacin de
Caractersticas de un LP
1. Define un proceso que se ejecuta en un computador 2. Es de alto nivel, cercano a los problemas que se quieren resolver (abstraccin)
Elementos de un LP
Para Abelson y Sussman, todos los lenguajes de progamacin permiten combinar ideas simples en ideas ms complejas mediante los siguientes tres mecanismos
Expresiones primitivas que representan las entidades ms simples del lenguaje Mecanismos de combinacin con los que se construyen elementos compuestos
Sintaxis y semntica
Sintaxis: un conjunto de reglas que definen qu expresiones de texto son
Abstraccin
Modelar como una actividad fundamental
Para escribir un programa que preste unos servicios es fundamental modelar el
Abstracciones computacionales
Existen abstracciones propias de la computacin, que se utilizan en mltiples dominios. Por ejemplo, abstracciones de datos como:
Listas rboles Grafos
Tablas hash
Tambin existen abstracciones que nos permiten tratar con dispositivos y ordenadores externos:
Fichero Raster grfico Protocolo TCP/IP
Construccin de abstracciones
Uno de los trabajos principales de un informtico es la construccin de abstracciones que permitan ahorrar tiempo y esfuerzo a la hora de tratar con la complejidad del mundo real. Cita de Joel Spolsky en su blog Joel on Software TCP is what computer scientists like to call an abstraction: a simplification of something much more complicated that is going on under the covers. As it turns out, a lot of computer programming consists of building abstractions. What is a string library? It's a way to pretend that computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It's a way to pretend that a hard drive isn't really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-within-folders containing individual files that in turn consist of one or more strings of bytes.
Lenguajes de abstracciones
programacin
con
constructores
de
Una misin fundamental de los lenguajes de programacin es proporcionar herramientas que sirvan para construir estas abstracciones.
Paradigmas de programacin
Qu es un paradigma de programacin?
Un paradigma define un conjunto de reglas, patrones y estilos de programacin
Paradigmas ms importantes
Paradigma funcional Paradigma lgico Paradigma imperativo o procedural Paradigma orientado a objetos
Paradigma funcional
Resumen de las caractersticas principales:
La computacin se realiza mediante la evaluacin de expresiones Definicin de funciones Funciones como datos primitivos Valores sin efectos laterales, no existe la asignacin Programacin declarativa
(define (factorial x) (if (= x 0) 1 (* x (factorial (- x 1))))) (factorial 8) 40320 (factorial 30) 265252859812191058636308480000000
Paradigma lgico
Caractersticas:
Definicin de reglas Unificacin como elemento de computacin Programacin declarativa
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 imperativo
Los lenguajes de programacin que complen el paradigma imperativo se caracterizan por tener un estado implcito que es modificado mediante instrucciones o comandos del lenguaje. Como resultado, estos lenguajes tienen una nocin de secuenciacin de los comandos para permitir un control preciso y determinista del estado. Caractersticas:
Definicin de procedimientos Definicin de tipos de datos Chequeo de tipos en tiempo de compilacin Cambio de estado de variables Pasos de ejecucin de un proceso 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;
Ejemplo (Java):
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; } } 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) {
Compiladores e intrpretes
Existe una gran variedad de estrategias para conseguir que un programa se ejecute en un computador. Todas se basan en los "meta-programas" (compiladores, intrpretes, etc.) cuyos datos de entrada son el cdigo fuente de otros programas. Estos meta-programas procesan otros programas y realizan mltiples tareas.
Compilacin
La siguiente figura muestra el proceso de generacin y ejecucin de un programa compilado.
Ejemplos: C, C++
Diferentes momentos en la vida de un programa: tiempo de compilacin y tiempo
de ejecucin
Mayor eficiencia
Interpretacin
Mayor flexibilidad: el cdigo se puede construir y ejecutar "on the fly" (funciones
lambda o clousures).
Preprocesamiento
El preprocesador analiza el cdigo y sustituye macros. Ejemplo: C, C++. Scala hace algo parecido con Java.