Paradigmas de Programación 1



Documentos relacionados
Algoritmos y programas

Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes

METODOS NUMERICOS CATEDRA 0 2. Ingeniería Civil ING.CRISTIANCASTROP. Facultad de Ingeniería de Minas, Geología y Civil

2.1. Introducción al lenguaje Java

1. Manejo de memoria estática 2. Manejo de memoria dinámica

de! texto: Francisco Javier Carreras Riudavets Antonio Carlos González Cabrera Zenón Hernández Figueroa Juan Carlos Rodríguez del Pino

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

INDICE Programación Introducción Capitulo 21 BASIC Capitulo 22. COBOL Capitulo 23 DELPHI Capitulo 24. FORTRAN Capitulo 25.

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015

Introducción a los Tipos Abstractos de Datos

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA


Sesión 6.3: Historia de los Lenguajes de Programación. Dr. Alberto A. Del Barrio García

Procesadores de lenguaje Tema 5 Comprobación de tipos

Instituto Tecnológico de Celaya

Java Inicial (20 horas)

.NET y J2EE VALORACIÓN Y COMPARACIÓN DE LOS ELEMENTOS DE LAS DOS PLATAFORMAS. Definiciones...2 C# y Java...3 Similitudes...4 Ventajas...

Programación Orientada a Objetos

Tipos Abstractos de Datos

Tema 1. Introducción a JAVA

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

APLICACIONES MÓVILES NATIVAS

LENGUAJES DE PROGRAMACIÓN POR QUÉ HAY TANTOS Y APARECEN NUEVOS? Por: Hanna Oktaba

IIC Introducción a la Programación -

Elementos léxicos del lenguaje de programación Java

Estructura general de un programa

8. Sentencia return y métodos

Comunicación con la Computadora

Bloque II. Elementos del lenguaje de programación Java

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Typeset by GMNI & FoilTEX

Resolución de Problemas

Agenda (continuación)

Estructura de Bases de datos. Leonardo Víquez Acuña

Concurrencia. Primitivas IPC con bloqueo

Modelo de Objetos Distribuidos

Curso de Python Inicial

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Curso de Java POO: Programación orientada a objetos

02 Lenguajes de programación y compiladores

Programación Orientada a Objetos con Java

Análisis de Lenguajes de Programación II El Inicio

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

DEPARTAMENTO: Informática. MATERIA: Programación. NIVEL: 1º Desarrollo de Aplicaciones Multiplataforma

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

11. Algunas clases estándar de Java (II)

Tema 1. Conceptos fundamentales de los Sistemas Operativos

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

Ingeniería del Software. Diseño. Diseño en el PUD. Diseño de software. Patrones arquitectónicos. Diseño Orientado a Objetos en UML

RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2013/2014

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Introducción al lenguaje de programación java

Introducción al lenguaje Java

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

DISEÑO DE COMPONENTES DE SOFTWARE *

Tema 1: Computadores y Programas

Estructura de Datos. Unidad I Tipos de Datos

CICLO SUPERIOR DESARROLLO DE APLICACIONES MULTIPLATAFORMA

Estructuras de Control - Diagrama de Flujo

Sistemas de archivos distribuidos. Alvaro Ospina Sanjuan

Lenguajes de Programación

Informática I para Bachillerato

SEGURIDAD Y PROTECCION DE FICHEROS

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Modulo 1 El lenguaje Java

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

2.2.- Paradigmas de la POO


UNIVERSIDAD DR. JOSE MATIAS DELGADO

U.T.4.EL ENTORNO DE DESARROLLO

Fundamentos del diseño 3ª edición (2002)

Arquitectura de Aplicaciones

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

4. Programación Paralela

EL PROCESO DE DISEÑO DEL SOFTWARE

Entidad Formadora: Plan Local De Formación Convocatoria 2010

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

1.1.- Objetivos de los sistemas de bases de datos Administración de los datos y administración de bases de datos Niveles de Arquitectura

Una base de datos es una colección de información ordenada e interrelacionada que es de importancia para una empresa.

TEMA 1: INTRODUCCIÓN

TEMA 1. INTRODUCCIÓN. 1. Diferentes niveles en la arquitectura de un computador

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Proceso de desarrollo del software modelo en cascada

PROGRAMACIÓN CON LENGUAJE JAVA Y ORIENTACIÓN A OBJETOS

Fundamentos de la Programación

RBAC4WFSYS: Modelo de Acceso para Sistemas Workflow basado en RBAC

Asignaturas antecedentes y subsecuentes

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

Tema 3 Elementos básicos de programación

UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

Escuela Provincial de Educación Técnica N 1 UNESCO. Planificación Anual 2015 Ciclo Superior Secundario

Transcripción:

Paradigmas de Programación PLG http://www.plg.inf.uc3m.es/ docweb/pp/ Paradigmas de Programación Paradigmas de Programación 1

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 2

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 3

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 4

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 5

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 6

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 7

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 8

Modelos de computación Lenguajes de programación Modelo computacional: colección de valores y operaciones Tipos de modelos computacionales: imperativo, funcional y lógico Computación: aplicación de una secuencia de operaciones a un valor para obtener otro valor Programa: especificación de una computación Lenguaje de programación: notación para escribir programas Sintaxis de un lenguaje de programación: estructura o forma de los programas Semántica de un lenguaje de programación: relaciones entre un programa y un modelo de computación Pragmática de un lenguaje de programación: grado de éxito con el que un programa cumple sus objetivos tanto en su fidelidad con el modelo de computación subyacente como su utilidad para los programadores Paradigmas de Programación 9

Modelos de computación Modelo de computación imperativo También denominado procedural Conjunto de valores que definen un estado y la operación de asignación de la modificación de estado Un estado es un conjunto de pares nombre-valor de las constantes y variables Un programa es una secuencia de asignaciones Una computación es una secuencia de estados Ejemplo: Programa Estado 0 Modificación Estado 1 Modificación Estado 2 a:=b+c b:=b+1 a=2 b=3 c=4 a:=b+c a=7 b=3 c=4 b:=b+1 a=7 b=4 c=4 Paradigmas de Programación 10

Modelos de computación Modelo de computación imperativo También denominado procedural Conjunto de valores que definen un estado y la operación de asignación de la modificación de estado Un estado es un conjunto de pares nombre-valor de las constantes y variables Un programa es una secuencia de asignaciones Una computación es una secuencia de estados Ejemplo: Programa Estado 0 Modificación Estado 1 Modificación Estado 2 a:=b+c b:=b+1 a=2 b=3 c=4 a:=b+c a=7 b=3 c=4 b:=b+1 a=7 b=4 c=4 Paradigmas de Programación 11

Modelos de computación Modelo de computación funcional Conjunto de valores, funciones y las operaciones de aplicación de función y composición de función Las funciones pueden tomar como argumentos otras funciones y devolverlas como resultados Un programa es una colección de definiciones de funciones Una computación es una evaluación (aplicación) de una expresión (función con sus argumentos) Ejemplo Programa Computación Resultado (defun member (elemento lista) (cond ((null lista) nil) ((eq elemento (car lista)) lista) (t (member elemento (cdr lista))))) (member a (b a c)) (a c) Paradigmas de Programación 12

Modelos de computación Modelo de computación funcional Conjunto de valores, funciones y las operaciones de aplicación de función y composición de función Las funciones pueden tomar como argumentos otras funciones y devolverlas como resultados Un programa es una colección de definiciones de funciones Una computación es una evaluación (aplicación) de una expresión (función con sus argumentos) Ejemplo Programa Computación Resultado (defun member (elemento lista) (cond ((null lista) nil) ((eq elemento (car lista)) lista) (t (member elemento (cdr lista))))) (member a (b a c)) (a c) Paradigmas de Programación 13

Modelos de computación Modelo de computación lógico Conjunto de valores, definiciones de relaciones e inferencias lógicas Un programa es una definición de relaciones Una computación es una prueba (secuencia de inferencias lógicas) Ejemplo: Programa Computación member(a,[a X],[A X]) :-!. member(a,[b X],Y) :- member(a,x,y). Prueba member(a,[b,a,c],[a,c]) 3. A=a, B=b, X=[a,c], Y=[a,c] member(a,[a,c],[a,c]) 2. A=a, X=[c]?- member(a,[b,a,c],x) X=[a,c] Paradigmas de Programación 14

Modelos de computación Modelo de computación lógico Conjunto de valores, definiciones de relaciones e inferencias lógicas Un programa es una definición de relaciones Una computación es una prueba (secuencia de inferencias lógicas) Ejemplo: Programa Computación member(a,[a X],[A X]) :-!. member(a,[b X],Y) :- member(a,x,y). Prueba member(a,[b,a,c],[a,c]) 3. A=a, B=b, X=[a,c], Y=[a,c] member(a,[a,c],[a,c]) 2. A=a, X=[c]?- member(a,[b,a,c],x) X=[a,c] Paradigmas de Programación 15

Modelos de computación Computabilidad Los tres modelos son equivalentes cualquier problema que tenga una solución en un modelo es resoluble en cada uno de los otros dos Se denominan modelos universales de computación Otros modelos también son equivalentes Están mezclados en los lenguajes de programación Java es imperativo, pero incorpora elementos funcionales y lógicos CommonLisp es funcional, pero permite realizar programación imperativa y lógica Prolog es lógico, pero admite determinadas secuencias imperativas Paradigmas de Programación 16

Paradigmas de programación Paradigmas de programación Programación imperativa Programación declarativa Programación orientada a objetos Programación basada en módulos Otros paradigmas Paradigmas de Programación 17

Paradigmas de programación Programación imperativa Modela la arquitectura de la máquina de von Neumann La computación consiste en la ejecución paso a paso de algoritmos (secuencias condicionales o repetitivas de instrucciones) que modifican los contenidos de variables (espacios de memoria) Tipos: Lenguajes procedurales (Pascal, C): utilizan subprogramas como unidades de modularización para definir pasos de computación Lenguajes orientados a objetos (Smalltalk, C++, Java): encapsulan en objetos tanto los datos como las operaciones sobre los mismos Paradigmas de Programación 18

Paradigmas de programación Ejemplo de programación imperativa Function member (e: real; a: lista-reales): lista-reales; begin if (a = nil) then member := nil else while ((aˆ.siguiente <> nil) and (e <> aˆ.elemento)) do a := aˆ.siguiente; if e = aˆ.elemento then member := a else member := nil end; Paradigmas de Programación 19

Paradigmas de programación Programación declarativa Utiliza bloques de construcción como las funciones, la recursión o la equiparación de patrones, para especificar más la solución que su cálculo de bajo nivel Tipos: Lenguajes funcionales (Common Lisp, Scheme, Haskell): utilizan funciones libres de efectos secundarios como bloques primitivos de construcción de programas. Estas funciones pueden aplicarse, construirse y pasarse como argumentos a otras funciones Lenguajes lógicos (Prolog): calculan resultados utilizando reglas e inferencia lógicas Paradigmas de Programación 20

Paradigmas de programación Ejemplo de programación declarativa Programación lógica (Prolog) member(a,[a X],[A X]) :-!. member(a,[b X],Y) :- member(a,x,y). Programación funcional (CommonLisp y Haskell) (defun member (elemento lista) (cond ((null lista) nil) ((eq elemento (car lista)) lista) (t (member elemento (cdr lista))))) fact 0 = 1 fact n = n * fact (n - 1) Paradigmas de Programación 21

Paradigmas de programación Programación orientada a objetos Define la computación como la interacción entre objetos autónomos Mediante la utilización de objetos, la programación se convierte en simulación Los objetos son instancias de clases que se organizan en jerarquías de herencia Los objetos se comportan independientemente Utilizan la selección de las operaciones en tiempo de ejecución cuando interpretan los mensajes provenientes de otros objetos Ejemplos: Smalltalk, Eiffel, y Java son lenguajes orientados a objetos Muchos lenguajes actuales, como C++, Ada-95, o Common Lisp también dan soporte a este tipo de programación Paradigmas de Programación 22

Paradigmas de programación Ejemplo de programación orientada a objetos Clase: lista Atributos: elemento, siguiente Métodos: primero, siguiente, member,... Ejecución de member: mandar un mensaje member a una instancia de la clase lista con el argumento elemento a buscar Paradigmas de Programación 23

Paradigmas de programación Programación basada en módulos Reconoce agrupaciones de variables, procedimientos y tipos como unidades estáticas de modularidad de programa El interface a un módulo (o paquete) especifica y exporta una serie de servicios generales Los detalles de implementación se ocultan en una unidad de programa compilada separadamente Ejemplos: Modula-2, Ada y C++ soportan este estilo de programación que puede ser combinada con cualquier otro tipo de paradigma Paradigmas de Programación 24

Paradigmas de programación Otros paradigmas de programación Programación visual Programación basada en restricciones Programación basada en tipos abstractos de datos Programación genérica Programación concurrente Programación basada en componentes distribuidos Programación basada en agentes Programación literaria Programación basada en patrones de diseño Programación basada en guiones Programación automática: aprendizaje automático Paradigmas de Programación 25

de los lenguajes de programación Charles Babbage Charles Babbage Máquina de diferencias programas con tarjetas perforadas para su Máquina Analítica Lady Ada Lovelace fue la primera programadora 1 1 Hija de Lord Byron Paradigmas de Programación 26

de los lenguajes de programación Zuse, Plankalkül (1945) Z1 Konrad Zuse tipos de datos: bit, escalares (con bits), matrices, registros recursivos no se descubrió hasta los 70 Paradigmas de Programación 27

de los lenguajes de programación 1940-50: código máquina, direcciones absolutas, muy poca memoria John Mauchly (1949): creo un lenguaje, SHORT CODE para el ordenador BINAC (luego UNIVAC), interpretado, sobre operaciones matemáticas Mauchly y Eckert (creadores del ENIAC) ENIAC Paradigmas de Programación 28

de los lenguajes de programación John Backus (1954): extendió el lenguaje máquina para operaciones en coma flotante para el IBM 701, creando FORTRAN (IBM FORmula TRANslation system). Se introdujo en el IBM 704 en 1954 John Backus IBM 701 Paradigmas de Programación 29

de los lenguajes de programación John McCarthy: definió Lisp (1958), Inteligencia Artificial y tiempo compartido Lisp pionero en: estructuras de datos dinámicas tipado dinámico programación orientada a objetos self-hosting : compilador escrito en el propio lenguaje Paradigmas de Programación 30

de algunos lenguajes Lenguaje Años Orígenes Lenguaje Propósito y predecesor características FORTRAN 1954-57-58- J. Backus (IBM) Computación numérica, 1er lenguaje alto nivel, compilación independiente LISP 1956-59- J. McCarthy FLPL (FORTRAN) Computación simbólica, 1er lenguaje funcional, procesamiento de listas, garbage collection Algol 60 1958-60 Comité (USA Europa) FORTRAN Computación numérica, estructura de bloque, estructuras de control, recursión COBOL 1959-60- Comité Procedimientos de negocio, registros y E/S APL 1956-60 K. Iverson Procesamiento de vectores SNOBOL 1962-66 R. Griswold (Bell Labs) Procesamiento de cadenas PL/1 1963-1965 Comité (IBM) FORTRAN, Algol 60 Propósito general, tipo de datos puntero, COBOL concurrencia, gestión de excepciones BASIC 1964- J. Kemeny, T. Kurtz FORTRAN Educativo Simula 1967 O.J. Dahl, K. Nygaard Algol 60 1er lenguaje OO y de simulación, corutinas, clases, herencia Algol 68 1963-68 Comité Algol 60 Propósito general, ortogonalidad, tipos definidos por usuario, matrices flexibles Pascal 1971 N. Wirth Algol 60 Educativo, propósito general, pequeño y simple Prolog 1972 A. Colmerauer Inferencia lógica (IA) Paradigmas de Programación 31

Lenguaje Años Orígenes Lenguaje Propósito y predecesor características C 1972 D. Ritchie (Bell Labs) B, Algol 68 Programación de sistemas Scheme 1975 G. Steele G. Sussman LISP Educativo, simple, funcional Modula-2 1977 N. Wirth Pascal Programación de sistemas, módulos, corutinas Smalltalk 1971-80 A. Kay A. Goldberg Simula (LISP) Computación personal, OO puro, pionero en GUI Ada 1979-83-95 J. Ichbiah Pascal... Sistemas embebidos, paquetes, concurrencia C++ 1984- B. Stroustrup (Bell Labs) C, Simula Programación de sistemas, multi-paradigma, grande, complejo Haskell 1989 Comité(?) ML, Scheme... Programación simbólica, funcional síntesis de programas Tcl/Tk 1988 J.K. Ousterhout shell scripts Lenguaje de scripting Perl 1990 L. Wall shell scripts Lenguaje de scripting Python 1991 G. vanrossum shell scripts Lenguaje de scripting Delphi 1994 BORLAND Pascal Propósito general, modular & OO Java 1995- SUN Microsystems C++, Smalltalk Computación basada en red, Educativo, OO simplificada Paradigmas de Programación 32

. Primeros lenguajes FORTRAN Backus en IBM, 1957, 18 personas-año para desarrollar el primer compilador Metas y contribuciones: problemas numéricos, compilador muy eficiente, compilación separada Muchas revisiones: FORTRAN II, IV, 66, 77, 90,... LISP McCarthy en MIT, 1958 Metas y contribuciones: programación funcional, procesamiento de listas, manipulación de símbolos Padre de Scheme y CommonLisp ALGOL Comité, 1960 Metas y contribuciones: numérico, estructura de bloque, recursión, elegante, muy influyente Padre del ALGOL W, ALGOL 68, Pascal, Modula, Ada, etc. Paradigmas de Programación COBOL 33

Primeras escisiones APL Iverson en Harvard, IBM, 1960 (para la notación) Metas y contribuciones: lenguaje de cálculo de matrices SNOBOL 4 Griswold en Bell Labs, 1966 Metas y contribuciones: procesamiento de cadenas de caracteres a través de equiparación de patrones Padre de ICON Paradigmas de Programación 34

. Consolidación PL/I Comité en IBM, 1967 Combinación de FORTRAN, COBOL, ALGOL 60, pero no integrados Multi-propósito, incluye punteros, registros, excepciones Se considera un fallo ALGOL 68 Comité Elementos ortogonales Elegante, pero difícil de entender Simula 67 Precursor de los lenguajes orientados a objetos Diseñado para la simulación Incluye corutinas Paradigmas de Programación 35

. Consolidación (I) Pascal Wirth, ETH, 1971 Diseñado como lenguaje docente Permite programación estructurada y es elegante Tuvo más éxito que el esperado Paradigmas de Programación 36

FORTRAN Primer lenguaje ampliamente aceptado Introdujo la facilidad de programación, eficiencia de los programas hechos a mano, y la reducción de errores de codificación Énfasis en el cálculo numérico en máquinas con poca memoria y procesadores lentos Primitivas del lenguaje subrutinas (no se hacía compilación separada) formato de E/S condicionales de tipo IF (sin operadores relacionales en el juego de caracteres) repeticiones con el DO Paradigmas de Programación 37

del FORTRAN FORTRAN II (1958): compilación independiente de las subrutinas FORTRAN IV (1962-68) declaraciones explícitas de tipos IF lógico subprogramas como parámetros de otros subprogramas FORTRAN 77 cadenas de caracteres control lógico de bucles (while) la cláusula ELSE para el IF Paradigmas de Programación 38

FORTRAN 90 Operaciones con matrices pre-definidas Matrices dinámicas Registros (llamados tipos derivados) Instrucción CASE Salidas de bucles prematuras Recursión en subprogramas Módulos FORTRAN 95, 2003, 2008,... A good FORTRAN programmer can write FORTRAN code in any language Paradigmas de Programación 39

LISP. John McCarthy (1958) List Processing Language Énfasis en cálculo simbólico Gestión dinámica de memoria para listas Primitivas del lenguaje expresiones condicionales recursión gestión dinámica de memoria los programas pueden ser también datos Otros lenguajes relacionados: Scheme, Common Lisp, ML Lisp has jokingly been called the most intelligent way to misuse a computer. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts. Edsger Dijkstra, CACM, 15:10 Paradigmas de Programación 40

Scheme. Guy L. Steele & Gerard J. Sussman (1984) Desarrollado en MIT a partir del Lisp Conjunto básico de primitivas Utilizado incluso para cursos introductorios de programación Paradigmas de Programación 41

ALGOL A mediados de los 50 hubo una proliferación de lenguajes y ACM formó un comité en 1957 Objetivos: sintaxis cercana a la notación matemática debía ser usable en publicaciones debía ser compilable ALGOL 58 tipos de datos: coma flotante implícita y el resto debían declararse explícitamente identificadores de cualquier longitud matrices con número arbitrario de dimensiones se podían declarar explícitamente los límites inferiores de las matrices ALGOL 60 parámetros se podían pasar por valor y por nombre procedimientos recursivos Paradigmas de Programación 42

Otras cuestiones Requisitos de un lenguaje de programación Universal Natural (expresivo) Implementable Eficiente (escribir, compilar, ejecutar) Robusto Mantenible Paradigmas de Programación 43

Otras cuestiones Abstracciones Abstracciones de datos tipos básicos de datos: enteros, reales, booleanos, caracteres, punteros estructurados: matrices, registros unidades: soporte a tipos abstractos de datos, módulos, paquetes, clases Abstracciones de control básicas: asignación, ir-a, secuencia estructuradas: if-then-else, bucles, procedimientos (funciones) unidades: unidades de compilación separada, módulos, paquetes, tareas concurrentes Paradigmas de Programación 44

Otras cuestiones En cualquier caso, Hay alguno que sea superior a otros lenguajes de programación? Paradigmas de Programación 45

Otras cuestiones La solución: los propios programadores Paradigmas de Programación 46

Otras cuestiones La solución: los propios programadores Paradigmas de Programación 47

Otras cuestiones Algunos ejemplos. Hello world En Lisp (print "Hello World!") En Prolog hello :- display( Hello World! ), nl. En Java import java.io.*; class HelloWorld { static public void main( String args[] ) { System.out.println( "Hello World!" ); } } Paradigmas de Programación 48

Otras cuestiones Algunos ejemplos. Hello world En Pascal program HelloWorld(output); begin WriteLn( Hello World! ); end. En Fortran PROGRAM HELLO WRITE (*,100) STOP 100 FORMAT ( Hello World! /) END Paradigmas de Programación 49

Otras cuestiones Algunos ejemplos. Hello world En Cobol ***************************** IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. MAIN SECTION. DISPLAY "Hello World!" STOP RUN. **************************** Paradigmas de Programación 50

Otras cuestiones Algunas direcciones interesantes HelloWorld: http://www.roesler-ac.de/wolfram/hello.htm Formatos de ficheros: http://www.wotsit.org/ de los lenguajes de programación: http://www.levenez.com/lang/history.html Directorio de algoritmos de programación: http://www.algosort.com/ Algoritmos de la ACM: http://web.uvic.ca/ cssavc/math.libraries/ Diccionario de algoritmos y estructuras de datos: http://www.nist.gov/dads/ Paradigmas de Programación 51

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 52

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 53

Indice 1 Presentación 2 Introducción Modelos de computación Paradigmas de programación Otras cuestiones 3 COMMONLISP 4 Programación funcional 5 Programación lógica. PROLOG Paradigmas de Programación 54