PARADIGMAS DE LA PROGRAMACION.
Enviado por Midorima • 22 de Abril de 2016 • Tarea • 3.819 Palabras (16 Páginas) • 311 Visitas
PARADIGMAS DE LA PROGRAMACION
2DA. PARCIAL
- QUE ES PARADIGMA
Paradigma es un ejemplo o un modelo de algo,
Es un conjunto de unidades que pueden sustituirse a otra en una mismo contexto porque cumplen la misma función.
“Un paradigma de programación indica un método de realizar cómputos y la manera en que se deben estructurar y organizar las tareas que debe llevar a cabo un programa”.
- Los paradigmas fundamentales están asociados a determinados modelos de cómputo.
- También se asocian a un determinado estilo de programación
- Los lenguajes de programación suelen implementar, a menudo de forma parcial, varios paradigmas.
- TIPOS DE PARADIGMAS
La división principal reside en el ENFOQUE IMPERATIVO (indicar el cómo se debe calcular) y el ENFOQUE DECLARATIVO (indicar el qué se debe calcular).
- El enfoque declarativo tiene varias ramas diferenciadas: el paradigma funcional, el paradigma lógico, la programación reactiva y los lenguajes descriptivos.
- OTROS PARADIGMAS se centran en la estructura y organización de los programas, y son compatibles con los fundamentales:
Ejemplos: Programación estructurada, modular, orientada a objetos, orientada a eventos, programación genérica.
- Existen también paradigmas asociados a la concurrencia y a los sistemas de tipado.
- PARADIGMA IMPERATIVO
- Describe cómo debe realizarse el cálculo, no el porqué.
- UN CÓMPUTO consiste en una serie de sentencias, ejecutadas según un control de flujo explícito, que modifican el estado del programa.
- LAS VARIABLES son celdas de memoria que contienen datos (o referencias), pueden ser modificadas, y representan el estado del programa.
- La sentencia principal es la asignación
- Asociados al paradigma imperativo se encuentran los paradigmas procedural, modular, y la programación estructurada.
- El lenguaje representativo sería FORTRAN-77, junto con COBOL, BASIC, PASCAL, C, ADA.
- También lo implementan Java, C++, C#, Eiffel, Python, ...
- PARADIGMA DECLARATIVO
- Describe que se debe calcular, sin explicitar el cómo.
- No existe un orden de evaluación prefijado.
- Las variables son nombres asociados a definiciones, y una vez instanciadas son inmutables.
- No existe sentencia de asignación.
- El control de flujo suele estar asociado a la composición funcional, la recursividad y/o técnicas de reescritura y unificación.
- Existen distintos grados de pureza en las variantes del paradigma.
- Las principales variantes son los paradigmas funcional, lógico, la programación reactiva y los lenguajes descriptivos.
- PARADIGMA FUNCIONAL
- Basado en los modelos de cómputo cálculo lambda (Lisp, Scheme) y lógica combinatoria (familia ML, Haskell)
- Las funciones son elementos de primer orden.
- Evaluación por reducción funcional. Técnicas:
- recursividad, parámetros acumuladores, CPS, Mónadas.
- Familia LISP (Common-Lisp, Scheme):
- Basados en s-expresiones.
- Tipado debil.
- Meta-programación
- Familia ML (Miranda, Haskell, Scala):
- Sistema estricto de tipos (tipado algebraico).
- Concordancia de patrones.
- Transparencia referencial
- Evaluación perezosa (estruct. de datos infinitas).
- PROGRAMACION LOGICA
- Basado en la lógica de predicados de primer orden
- Los programas se componen de hechos, predicados y relaciones.
- Evaluación basada en resolución SLD: unificación+backtracking.
- La ejecución consiste en la resolución de un problema de decisión, los resultados se obtienen mediante la instanciación de las variables libres.
- Lenguaje representativo: PROLOG
- PROGRAMACION REACTIVA – DATAFLOW
- Basado en la teoria de grafos.
- Un programa consiste en la especificación del
- flujo de datos entre operaciones.
- Las variables se encuentran ligadas a las operaciones que proporcionan sus valores. Un cambio de valor de una variable se propaga a todas las operaciones en que participa.
- Las hojas de cálculo se basan en este modelo.
- Lenguajes representativos: Simulink, Oz, Clojure.
- HISTORIA
Abu Ja’far Muhammad ibn Musa 780-850 AC – Algoritmo
Gottfried Wilhelm Leibniz 1676 – 1716, Inventor de Calculo y el sistema binario y la calculadora mecánica
Telar de Jacquard 1801, programación de diseños en tarjetas perforadas
Charles Babbage 1791-1871 Maquina analítica
Ada lovelace 1815-1852, implemento el primer algoritmo para la Maquina analítica
Herman Hollerit 1860-1929 Desarrolla el tabulador estadístico
Gottlob Frege 1848-1925 Logica de predicados
Alan Turing 1912-1954, maquina de Turing, programación imperativa
Alonzo Church, 1903 -1995 Lambda calculo, programación funcional
- ¿QUÉ ES UN LENGUAJE DE PROGRAMACION?
- una notación formal para especificar computaciones
- sintaxis (definida por una gramática independiente de contexto)
- semántica para cada construcción sintáctica
- implementación práctica en una máquina (real o virtual, hay que encontrar el balance entre portabilidad y eficiencia)
- LENGUAJE ENSAMBLADOR
La evolución de las tarjetas perforadas los inventan los diseñadores de hardware a principio de los 1950 usan nombres que se pueden recordar en lugar de binarios, tienen macros reusables y subrutinas
- COBOL : Diseñado 1959 y estándar en 1968 por Grace Hooper y el departamento de defensa de los EEUU, trata de imitar el lenguaje natural, para facilitar su uso por no computologos y ser su propia documentación, tremendamente verboso, muy poco estructurado, muy utilizado históricamente y hoy en sistemas legacy.
- FORTRAN: Lenguaje procedural imperativo, es el mas usado en el campo científico, desarrollado por IBM en los años 50 por John Backus
- LISP: Inventado por John McCarthy, de notación formal para lambda-calculo, la primera instanciación de muchos conceptos de lenguajes de programación, manejos de memoria automatizado, tipado dinamico, no se distingue entre código y datos.
- PASCAL: Desarrollado por Niklaus Wirth, revisa los sistemas de tipo Algol, con buenos conceptos de estructuras de datos, mas reactivo que Algol 60/68 es el mas popular para la enseñanza.
- BCPL / B / C : Nace de la frustración de frandes sistemas y grandes lenguajes como multics, PPL/I y Algol 68, mantiene alcance léxico, y recursión, acceso a bajo nivel de la maquina, programación de sistemas operativos par amaquinas con poca memoria
- B: Desarrollado por Ken Thompson, de sintaxis compacta, compilador de un solo paso, con poca memoria, sin alcance anidados.
- C : Desarrollado en Bell Labs por Dennis Ritchie, relacionado con UNIX, añade el tipado débil a B, compila a código nativo.
- C++: Desarrollado en Bell Labs por Bjarne Stroustrup, “C con clases”, influenciado por SIMULA, incorpora herencia multiple, templates genéricos, manejos de excepciones
- JAVA: Desarrollado en SUN por James Gosling, es una mezcla de C y Modula 3, a diferencia de C++ no usa templates, no imprementa herencia multiple, no permite sobrecarga de operadores, interfaces explicitas,manejo de excepciones, garbage collection automatico.
- OTROS LENGUAJES IMPORTANTES
- TIPO ALGOL: Modula, Oberon, Ada
- FUNCIONAL: ISWIM, FP, SASL, Miranda, Haskel, LCF, etc
- ORIENTADO A OBJETOS: Smalltalk, Objetive-C, Eiffel, Modula3, Self, C#, CLOS
- PROGRAMACIÓN LÓGICA: Prolog, Godel, LDL, ACL2, Isabelle, HOL
- PROCESAMIENTO DE DATOS Y BASE DE DATOS: Cobol, SQL, 4GLs, Xquery
- PROGRAMACION DE SISTEMAS: PL/I, PL/M, BLISS
APLICACIONES ESPECIFICAS: APL, Forth, Icon, Logo, SNOBOL4, GPSS, Visual Basic - CONCURRENTES, PARALELOS, DISTRIBUIDOS: Concurrent Pascal, Concurrent C, C*, SR, Occam, Erlang, Obliq
- QUE MOTIVA LA EVOLUCION DE LOS LENGUAJES?
- Como construir mejores herramientas de software para resolver problemas computacionales
- Algunos conceptos útiles evolucionan en diseño de lenguajes.
- La necesidad de hacer las cosas rápido.
- QUE TIENEN EN COMUN LOS LENGUAJES DE PROGRAMACION?
- Estructura y análisis léxico: tokens, expresiones regulares y autómatas
- Estructura y análisis sintácticos
- Cosas practicas: alcance, estructura de bloques, variables locales. Procedimientos.
- Semántica: que significan los programas y su correctitud
- PROGRAMACION CON LOGICA PROPOSICIONAL
En la Lógica Formal se estudian los principios y métodos a través de los cuales podemos determinar la validez de argumentos, desde el punto de vista solamente de su estructura, sin tomar en cuenta el contenido semántico de las expresiones de los argumentos.
...