Download Paradigmas de Programación - UTN-FRRe

Document related concepts

Ocaml wikipedia , lookup

Programación funcional wikipedia , lookup

Meta Lenguaje wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Transcript
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"