La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Paradigmas de Programación

Presentaciones similares


Presentación del tema: "Paradigmas de Programación"— Transcripción de la presentación:

1 Paradigmas de Programación
Prof. Wilmer Pereira Universidad Católica Andrés Bello Universidad Simón Bolívar

2 Primeros pasos en los lenguajes de alto nivel
El primer computador (1940) tenía el poder cálculo de una calculadora actual. No fue ENIAC sino COLOSSUS (1938). Primer lenguaje de alto nivel FORTRAN (IBM 1957) y LISP (John McCarthy en 1958) con traducción directa del lenguaje alto nivel al lenguaje de máquina. Entre los lenguajes lógicos el principal representante es Prolog desarrollado en Marseille (A. Colmerauer & P. Roussel). Comenzo como un programa para procesamiento de lenguaje natural. Fue la base para el proyecto japones de 5ta generación de computadores con Prolog como lenguaje de máquina (decada de los 80). También en Francia se desarrolló el lenguaje funcional ML que generó CAML La primera versión se creó en 1987 por Ascander Suarez. Haskell es un versatil lenguaje funcional desarrollado en las universidades de Glasgow y Yale. Es un proyecto que pretende conjugar todas las tendencias en programación funcional.

3 ¿Por qué hay tantos lenguajes?
Evolución de las instrucciones o primitivas de uso: Ciclos estilo lenguajes ensamblador (goto) Ciclos estructurados (while, repeat) Orientación a objetos Programación concurrente ... Especificidad en función a la aplicación a programar: C como lenguajes cercano al bajo nivel LISP para manipulación de símbolos Prolog para aplicaciones con relaciones lógicas en la data Preferencias personales: Recursión vs iteración Apuntadores o no ...

4 ¿Qué hace a un lenguaje exitoso?
Poder expresivo: aunque todos tienen el poder de computo de una Máquina de Turing ... hasta el lenguaje ensamblador Facilidad de uso para los novatos: LOGO es intencionalmente sencillo Para algunos BASIC y PASCAL también lo son ... Estandarización: Aunque los diferentes desarrolladores agregan ciertas características casi todos respetan el mínimo del estandar. Código abierto: Casi todos los lenguajes tiene al menos un compilador o interpretador Buenos compiladores: FORTRAN es reconocido en este aspecto Apadrinamiento: ADA por ejemplo fue impulsado, sin mucho, exito por el departamento de defensa. En cambio JAVA tuvo exito siendo una propuesta de una compañía privada ...

5 Tipos de Lenguajes ... Inicialmente se anteponen los declarativos vs los imperativos. Los declarativos se consideran de más alto nivel … … pero los imperativos ofrecen mejor rendimiento Imperativos dan énfasis al como: Estructurados bajo el modelo Von Neumann (C) Orientados a Objetos inspirados en simula (JAVA) Orientados a Strings con énfasis en prototipado rápido (PERL) Declarativos se centran en el que: Funcionales inspirado en lambda cálculo (HASKELL) Lógicos provenientes del cálculo de predicado simplificado (PROLOG) Flujos de datos inherentemente concurrente (VAL) CONCURRENTES: Estos lenguajes son independiente de la clasificación anterior En muchos casos se estila tener librerías que permiten desarollar aplicaciones concurrentes en lenguajes secuenciales También depende de la arquitectura (Cluster, Grid, ...)

6 Máximo común divisor ... PROLOG: mcd(A,B,X) :- B, C is A - B, mcd(C,B,X). mcd(A,B,X) :- A, C is B - A, mcd(A,C,X). mcd(A,A,A). HASKELL: mcd :: Int -> Int -> Int mcd a b | (a == b) = a | (a > b) = mcd (a-b) b | otherwise = mcd a (b-a) C: #include <stdio.h> #include <stdlib.h> int gcd (int a, int b) { printf("El MCD de a = %d y b = %d es ",a,b); while (a!=b)if (a>b) a=a–b; else b=b-a; printf("%d.\n",a); } main (int argc, char **argv) { gcd(atoi(argv[1]),atoi(argv[2]));

7 ¿ Por qué estudiar diferentes lenguajes de programación?
Entender aspectos obscuros ... herencia múltiple, union, etc. Esto hace más fácil comprenderlo cuando se desean utilizar Saber seleccionar entre diferentes maneras de escribir un proceso o instrucción para generar código más eficiente Hacer uso eficiente de depuradores (debuggers), enlazadores. Saber ciertos detalles permite descubrir errores dificiles. Usar buenas prácticas o funcionalidades en lenguajes que no las ofrecen. Por ejemplo, armar código estructurado en FORTRAN o usar iteradores. Hacer buen uso de la tecnología de lenguajes

8 Filosofías de traducción ...
Los lenguajes de programación pueden ser compilados, interpretados o bajo un paradigma de máquina virtual Compilación pura: El código fuente es traducido directamente a lenguaje de máquina El programa objeto opera indepedientemente sobre el procesador Son más eficiente a cambio de un costo previo de procesamiento Interpretación pura: La traducción se realiza paso a paso, ejecutandose directamente sobre el procesador Cada línea es analizada y ejecutada con sus entradas y salidas Los programas tienen menos velocidad de ejecución pero son más flexible en el diagnóstico

9 Compilación + Interpretación
El código fuente es traducido a una representación intermedia de más bajo nivel El código intermedio es interpretado por una máquina que ejecuta sobre el procesador La calidad de la traducción y la expresividad del lenguaje intermedio combinado con la implantación eficiente de la máquina virtual, permite un buen compromiso: velocidad de ejecución y velocidad de desarrollo

10 Compilación ... Código fuente Compilador Entrada Código Objeto Salida

11 Interpretación ... Código fuente Interpretador Salida Entrada

12 Compilación + Interpretación ...
Código fuente Compilador Código Intermedio Interpretador Salida Entrada

13 Compilación + Librería + Enlazador ...
Código fuente En un lenguaje puramente compilado, el enlazador resuelve las dependencias estáticamente. Compilador En un lenguaje puramente interpretado, el enlazador resuelve las dependencias dinámicamente, agregando las librerías durante la ejecución. Código fuente incompleto Enlazador Código objeto Librerías

14 Preprocesador ... Código fuente Expande macros Enriquece código fuente
Elimina código condicionado Preprocesador Código fuente modificado Compilador Código objeto

15 ¿Cómo escribir un compilador del lenguajes con el propio?
Niklaus Wirth adaptó para distribuir PASCAL una estrategia conocida como bootstrapping BOOTSTRAPPING: En vez de escribir compilador de código fuente a ensamblador, escribir un interpretador que es más sencillo Ahora escribir un compilador del lenguaje X en X Correr el compilador en el intrepretador dandole como entrada el compilador anterior El programa objeto opera indepedientemente sobre el procesador son más eficiente a cambio de un costo previo de procesamiento Técnica de PASCAL: Compilador para PASCAL escrito en PASCAL que genera p-code Compilador para PASCAL traducido en p-code Interpretador de p-code escrito en PASCAL Ahora basta con traducir ese interpretador en un lenguaje local ...


Descargar ppt "Paradigmas de Programación"

Presentaciones similares


Anuncios Google