Paradigmas de Programación
Transcripción
Paradigmas de Programación
Carrera: Ingeniería en Sistemas de Información Plan: 2008 Bloque: Tecnologías Básicas Área: Programación Asignatura: PARADIGMAS DE PROGRAMACIÓN Régimen de Cursado: Cuatrimestral Horas/Semana: 8 Horas/Semana Anuales: 4 Nivel de Implementación: Segundo Horas/Año: 128 1. Objetivos Generales de la asignatura Comprender los fundamentos de los paradigmas de programación básicos que son utilizados por los lenguajes de programación actuales. Conocer el modelo formal o semiformal subyacente de cada paradigma y la forma en que el mismo es incorporado en un lenguaje de programación concreto. Aplicar los diferentes paradigmas en la resolución de problemas. Objetivos específicos: Analizar algunos paradigmas de lenguajes de programación, introduciendo sus conceptos principales. Evaluar los conceptos de lenguajes de programación en términos de su contribución al proceso de desarrollo de software y al desempeño para determinados propósitos. Desarrollar criterios necesarios para realizar dicha evaluación. Ejercitar el juicio crítico para extraer conclusiones en forma independiente sobre los contenidos de la materia. Usar el lenguaje técnico de la materia. Aprender y desarrollar programas de distinta complejidad en un lenguaje de programación Orientado a Objetos: SmallTalk. 2. Contenidos Mínimos Concepto de Paradigmas de Programación. Paradigmas Fundamentales. Paradigma Funcional. Cálculo Lambda. Lenguajes de Programación Funcional. Paradigma Lógico. Lógica de Predicados de Primer Orden y Formas Restringidas. Regla Inferencia de Resolución. Lenguaje de Programación Lógica. Paradigma Orientado a Objetos. Conceptos Básicos. Clasificación, Clase y Objeto. Método y Mensaje. Clase Abstracta y Concreta. Herencia y Tipos de Herencia. Polimorfismo y Tipos de Polimorfismo en el Modelo de Objetos. Lenguajes de Programación Orientados a Objetos. Extensiones al Modelo Básico de Objeto en un Lenguaje Particular. 3. Programa Analítico UNIDAD I: Introducción Qué es un Paradigma. Qué es un Paradigma de programación. "2013 - Año del 60º Aniversario del Primer Ciclo Lectivo de la Universidad Obrera Nacional" Criterios para el estudio y análisis de lenguajes. Importancia de estudiar conceptos comparados en lenguajes de programación para la formación de criterios. Características de lenguajes de programación representativos de cada paradigma. Ámbitos o entornos de aplicación. Historia de los lenguajes de Programación. Peso histórico y cuantitativo de los lenguajes imperativos. Orígenes y evolución. Puntos relevantes y aspectos críticos. UNIDAD II: Conceptos Comparados en Lenguajes de Programación Valores y Tipos. Tipos Simples y Compuestos Sistemas de Tipos. Equivalencias. Axiomas de equivalencia estructural. Verificación de tipos de forma estática y dinámica. Principio de Completitud de Tipos. Lenguajes con sistemas fuertemente tipados. Tipos monomórficos. Inferencia de tipos monomórficos. Sobrecarga. Polimorfismo. Paramétrico y de Inclusión. Tipos genéricos. "BINDING": Enlace o Resolución de vínculos entre entidades y atributos. Enlace y ámbito. Lenguajes con estructura de bloques. Alcance y visibilidad. Declaraciones. Alcance de las declaraciones. Ligamiento estático y dinámico. Abstracciones. Mecanismos de abstracción. Tipos (abstractos) de datos. Parámetros. Mecanismos de paso de parámetros. Por copia y por referencias. Orden de evaluación de parámetros. Evaluación impaciente y perezosa. Funciones estrictas y no estrictas. Variables y Actualizaciones. Variables compuestas. Tiempo de Vida de una variable. Variables globales y locales. Variables de pila y variables persistentes. Conclusiones. Balance de características y propiedades de lenguajes de programación. Aportes oportunos de cada paradigma. Mención de otros paradigmas. Nuevos enfoques: fronteras entre paradigmas. UNIDAD III: Paradigma de Programación Orientada a Objetos Impacto en el enfoque Orientado a Objetos. Conceptos básicos de la Programación en Grande. Encapsulamiento. Ocultamiento. Modularidad. Jerarquía. Polimorfismo. Objetivos de la Orientación a Objetos. Ventajas. Programación estructurada vs. POO Definiciones de términos. Objetos. Clases. Ocultación de Información y visibilidad. Instanciación. Notación de objetos. Mensajes. Herencia Simple y Múltiple. Conflicto de nombres en la herencia múltiple. Redefinición de Clases. Sobrecarga. Clases abstractas. Variables de instancia y de clase. Métodos de instancia y de clase. Polimorfismo. Ligadura dinámica. C++, SmallTalk. Ejemplos. UNIDAD IV: Paradigma de Programación Lógica Programación Declarativa. Principios del Paradigma lógico. Concepción de problemas. Características particulares. Representación formal. Espacio de Búsqueda. Tipos de soluciones. Búsqueda. Búsqueda en grafos y árboles. Algoritmo de Control. Dirección de la búsqueda: Encadenamiento hacia adelante; Encadenamiento hacia atrás. Métodos de búsqueda: Primero en profundidad; Primero en amplitud; Ventajas y desventajas; Backtraking. Lógica Proposicional. Lenguaje de representación. Sintaxis, Semántica. Fórmulas Bien Formadas. Interpretación Lógica. Consecuencia Lógica: Métodos de prueba. Inferencia Lógica. Cláusulas: Literal Proposicional; Cláusula proposicional; Cláusula proposicional de Horn. "2013 - Año del 60º Aniversario del Primer Ciclo Lectivo de la Universidad Obrera Nacional" Regla de Resolución proposicional. Refutación y Deducción. Mundo Cerrado. Árbol de resolución. Árbol SLD. Negación en Programación Lógica. Lógica de Predicados. Lógica de Predicado de Primer Orden. Sintaxis y Semántica. Cláusulas de Skolem. Cláusulas de Horn. Sustitución y Unificación. UMG. Principio de Resolución de Robinson. Regla de Resolución de Predicados. Notación Prolog. Lenguaje de Programación Prolog. Hechos. Consultas. Variables. Variables anónimas. Conjunciones y Disyunciones. Aritmética. Reglas. Backtracking y Recursión. El predicado Cut y Fail. Listas: Representación; Unificación; Ejemplos. UNIDAD V: Paradigma de Programación Funcional Antecedentes Históricos. Importancia de los lenguajes funcionales. Lenguajes funcionales puros e híbridos. El cálculo lambda. Fundamentos. Expresiones lambda. Sintaxis. Convenciones sintácticas. Variables: ámbito, Libres y Ligadas. Lambda Reducciones: -reducción; α-reducción o αconversión; β-reducción; -reducción. Órdenes de Reducción. Propiedad de Confluencia y Terminación Estructura de los Lenguajes Funcionales. Definición y llamada de funciones. Forma Normal. Modos de evaluación. Normal y lazy vs. eager. Polimorfismo. Transparencia Referencial. Recursividad. Lenguaje de programación Haskell. Valores y Tipos. Funciones. Funciones de orden superior. Estructuras de Datos infinitas. Expresiones Case y Pattern matching. 4. Bibliografía Básica: Watt David, “Programming Languages Design Concepts”, Department of Computing Science, University of Glasgow, Scotland, 2004. Aguilar, Luis Joyanes. “Programación Orientada a Objetos”. Adolfo Kvitca. “Resolución de problemas en Inteligencia Artificial”. Michael Huth y Mark Ryan. “Logic in Computer Science”. Cambridge University Press. 2004 Jorge Vidart y Alvaro Tasistro. “Programación Lógica y Funcional”. Blas C. Ruiz, Francisco Gutiérrez, Pablo Guerrero y José E. Gallardo. “Razonando con Haskell - Un curso sobre programación funcional”. Paraninfo. Rodríguez Antalejo, Mario. “Programación Funcional”. Herramienta para visualizar árboles SLD. http://www.lcc.uma.es/~pacog/sldDraw/ Programación Funcional. Hugs On Line: http://cvs.haskell.org/Hugs/ http://www.haskell.org/ Gregory R. Andrews y Fred B. Schneider. “Concepts and Notations for Concurrent Programming”. March 1983. Wilf Lalonde. “Descubra SmallTalk”. Adisson Wesley / Diaz de Santos. Carleton University. Alec Sharp. “Smalltalk. The Developer´s Guide, by Example”. Complementaria: Brad J. Cox y Andrew J. Novobilski. “Programación Orientada a Objetos. Un enfoque evolutivo.” Addison-Wesley/Diaz de Santos. 1993. Ghezzi Carlo & Jazayeri Mehdi, "Programming Languages Concepts", John Wiley & Sons Inc, 1987. Alan Burns & Andy Wellings, Sistemas de Tiempo real y lenguajes de Programación. Tercera Edición, Adison Wesley. 2003. Cardelli Luca & Wegner Peter, "On understanding Types, Data Abstractions and Polimorphism", ACM Computing Surveys, Vol. 17, N4, Dec. 1985. "2013 - Año del 60º Aniversario del Primer Ciclo Lectivo de la Universidad Obrera Nacional" Horowitz Ellis, "Fundamentals of Programming Languages", Computer Science Press Inc. Springer-Verlag, 1983. Nilsson. Logic Programming, and Prolog. Manuel Alfonseca, Alfonso Alcalá. Programación Orientada a Objetos. Teoría y técnicas OPP para desarrollo de software. Ediciones Anaya. 1992. Elaine Rich & Kevin Knight. “Inteligencia Artificial” Segunda Edición. Mc Graw Hill. 1994. ¡Aprende Haskell por el bien de todos!. http://aprendehaskell.es/main.html "2013 - Año del 60º Aniversario del Primer Ciclo Lectivo de la Universidad Obrera Nacional"