UNIVERSIDAD DEL TOLIMA
Instituto de Educación a Distancia - IDEAD

PIC  (Plan Integral de Curso)
Programa: 	Ingeniería de Sistemas por ciclos
Área: 		Ingeniería aplicada
Núcleo  
programático: Sistemas de Información
Asignatura: 	Paradigmas de Programación
Semestre:	II
Créditos:	4
(15 horas de trabajo académico en sesiones presenciales, 2 horas de acuerdo pedagógico, 4 horas de convocatoria individual, asesorías, actividades no presenciales: trabajo colaborativo en CIPAS, lecturas, consultas e investigación)

Proyecto de  
investigación: Los Sistemas de Información como agentes de cambio para la competitividad organizacional.

OBJETO DE TRABAJO CURRICULAR

Ante la transitoriedad de las tecnologías informáticas, los estudiantes de sistemas necesitan capacitarse con conocimientos y habilidades para ejercer en forma competente esta profesión. Fundamentalmente, se requiere que el ingeniero tenga capacidad para “aprender a aprender” y adaptación al cambio, mentalidad de actualización permanente, capacidad para valorar, aportar y transformar el medio en que se desempeña. 

Para el dominio de las tecnologías computacionales, con énfasis en los sistemas de información, el estudiante deberá apropiarse de los aspectos cognitivos relacionados con programación,  construyendo conceptos básicos  sobre: Generalidades de los paradigmas de programación más comunes y  características  principales de los lenguajes de programación correspondientes.

Como estrategia metodológica principal, se promoverá la interacción y desarrollo de habilidades de auto-estudio, motivando siempre al estudiante para que consulte, investigue, solucione ejercicios y problemas del mundo real, aplicando los paradigmas de programación en un mundo computacional.
 
OBJETIVOS
o	Generales
Formar profesionales con competencias necesarias para la eficiente producción de software.
o	Específicos 
•	Dominar los diferentes paradigmas de programación (imperativo, funcional, orientado a objetos, lógico o declarativo…).
•	Hacer posible una mejor elección del lenguaje de programación.
•	Fomentar en el estudiante su espíritu de investigación en el campo del análisis y desarrollo de software.

PRINCIPIOS DE FORMACIÓN
•	Aprender a diferenciar los diferentes paradigmas de programación
•	Facilitar el aprendizaje de un nuevo lenguaje de programación.
•	Mejorar la habilidad para desarrollar programas eficientes.
•	Hacer posible una mejor elección del lenguaje de programación.
•	Optimizar el uso de los lenguajes de programación disponibles.
•	Aumentar el propio vocabulario con construcciones útiles sobre programación.
•	Fomentar en el estudiante su espíritu de investigación en el campo del análisis y desarrollo de software.
•	Dominar los diferentes paradigmas de programación (imperativo, funcional, orientado a objetos, lógico o declarativo…).

ARTICULACIÓN DEL CURSO
Los procesos de enseñanza y de aprendizaje han evolucionado a través del tiempo, como ha sucedido también con los paradigmas y lenguajes de programación. La educación contemporánea exige un gran cambio de actitud, tanto de alumnos como de docentes, y es por eso que atrás quedaron los modelos gastados del pasado. Hoy nuestro reto es formar profesionales para la comprensión de las necesidades de una comunidad y entrega de eficientes alternativas de solución en el mundo del software, un mundo abstracto, siempre dinámico, cambiante e interdisciplinario que exige una constante actualización, para lo cual se requiere mayor habilidad de auto-estudio, capacidad de lectura crítica y actitud investigativa. 
Las tecnologías de desarrollo de software se han convertido en las últimas décadas en uno de los motores de la economía mundial. Por ello es importante que los estudiantes conozcan, y aprendan haciendo, los conceptos fundamentales, las técnicas de análisis, diseño y construcción de programas genéricos. 
Sólo a través de un aprendizaje autónomo y significativo, el alumno puede ser el verdadero protagonista de su propio proceso de formación.

JUSTIFICACIÓN DEL CURSO
La formación del estudiante en el manejo de los diferentes paradigmas de programación de computadores le permitirá aplicar su conocimiento para la solución de diversos problemas reales en el contexto social.  Para desarrollar software de calidad, se requiere también la capacidad de elegir el paradigma y el lenguaje de programación pertinentes.

UNIDADES ACADÉMICAS
•	Unidad 1
Introducción a los Paradigmas de Programación
•	Descripción y análisis de temática
Descripción
Existen más de 1000 lenguajes de programación y normalmente uno utiliza 1 o dos, hasta cuatro quizás. Muchos estudiantes piensan que si no van a utilizar esos lenguajes, entonces no deberían estudiarlos, pero existen muchas razones en el mundo del software que justifican la necesidad e importancia de estudiar, no sólo las características principales de los lenguajes, sino también el paradigma de programación al cual corresponden y muchos otros conceptos esenciales e inherentes al desarrollo de software.

Temática
•	Conceptos fundamentales de programación
•	Reseña histórica de los Lenguajes de Programación
•	Influencias en la evolución de los LP
•	Atributos de un buen Lenguaje de Programación
•	Modelos básicos de Paradigmas de los LP
•	Nuevos Paradigmas de Programación

Preguntas generadoras
•	¿Cuál es la diferencia entre un compilador y un intérprete?
•	¿Por qué la capacidad de los computadores influye en la evolución de los lenguajes de programación?
•	¿Un programa escrito en lenguaje de alto nivel se ejecuta más rápido que un programa escrito en lenguaje de bajo nivel?
•	¿En qué consiste la arquitectura de Von Neumann?
•	¿Qué constituye el entorno de programación?
•	¿En cuál paradigma los lenguajes de programación están orientados al “qué”  y no al  “cómo”?.
•	¿Por qué es importante la portabilidad de un lenguaje de programación?

Acreditación de la Unidad
Dominar los conceptos fundamentales de programación. 

•	Unidad 2
Programación Imperativa o Procedural
•	Descripción y análisis de temática
Descripción
Es el paradigma clásico o tradicional. En el paradigma imperativo, un programa es visto como una lista de instrucciones o comandos. Los programas imperativos o procedurales, explícitamente o implícitamente, asumen el computador basado en la arquitectura de Von Neumann.

Temática
•	Características del paradigma imperativo
•	Lenguaje C
•	Tipos de datos
•	Estructuras de control
•	Procesos iterativos
•	Definición de funciones
•	Estructuras de datos

Preguntas generadoras
•	¿Cuáles son los tipos de datos básicos en programación? ¿Existen restricciones al declarar variables y/o constantes? ¿En qué se diferencian estos identificadores?
•	¿Cuáles son los operadores matemáticos, relacionales y lógicos? ¿Existe alguna jerarquía entre estos operadores?
•	¿Cómo añadir comentarios a un programa y para qué sirven?
•	¿Para qué sirve una instrucción de asignación?  ¿Cuáles son las instrucciones de entrada/salida?
•	¿Qué son las estructuras de selección y para qué se utilizan?
•	¿Para qué sirven los contadores y acumuladores en programación?
•	¿Cómo devuelve valores una función? ¿cuántos valores puede retornar una función?

Acreditación de la Unidad
Comprender las principales características del paradigma de programación imperativa.

•	Unidad 3
Programación Funcional
•	Descripción y análisis de temática
Descripción
Un punto de vista alternativo de la computación representado por un lenguaje de programación consiste en examinar la función que el programa representa, y no sólo los cambios de estado conforme el programa se ejecuta, enunciado por enunciado.

Temática
•	Características del paradigma Funcional
•	Imperativo Vs Funcional
•	Lenguaje Scheme
•	Tipos de datos
•	Sintaxis
•	Definición de procedimientos
•	Estructuras de control
•	Procedimientos recursivos
•	Listas

Preguntas generadoras
•	¿Qué significa la notación posfija en programación Funcional?
•	¿Cómo se realiza el control de un programa a través de recursión?
•	¿Se utiliza la instrucción de asignación en un programa Funcional?
•	¿En qué consiste el Lexical Scoping del lenguaje Scheme?
•	¿Qué tipo de aplicaciones se desarrollan con el paradigma de programación Funcional?

Acreditación de la Unidad
Comprender las principales características del paradigma de programación Funcional.

•	Unidad 4
Programación Orientada a Objetos
•	Descripción y análisis de temática
Descripción
La programación Orientada a Objetos es un paradigma muy importante en el desarrollo de software contemporáneo. En la programación Orientada a Objetos, las estructuras de datos y los algoritmos se integran en bloques o unidades llamadas Clases.

Temática
•	Características de la Programación Orientada a Objetos
•	Clases y Objetos
•	Herencia
•	Polimorfismo
•	Lenguaje Java
•	Tipos de datos
•	Creación de Objetos
•	Constructores
•	Applets

Preguntas generadoras
•	¿Cuál es la diferencia entre una Clase y un Objeto?
•	¿En qué consiste el encapsulamiento?
•	¿Cómo se comunican los Objetos?
•	¿Cómo se accede a los atributos de una Clase?
•	¿Qué es una Clase Base y qué características debe tener una Clase para ser considerada así?
•	¿A qué se le llama variables de instancia?
•	¿Toda Clase definida en Java debe ser una extensión de otra Clase?
•	¿La sobrecarga es una clase de Polimorfismo? 

Acreditación de la Unidad
Comprender las principales características del paradigma de Programación Orientada a Objetos.

•	Unidad 5
Programación Lógica
•	Descripción y análisis de temática
Descripción
La programación Lógica, la otra variedad de la programación declarativa, usa como base sentencias de la lógica de primer orden, en concreto las cláusulas de Horn (restricción del Cálculo de Predicados de Primer Orden) y su forma de ejecución es el principio de Resolución de Robinson.

Temática
•	Características de la Programación Lógica
•	Lenguaje Prolog
•	Hechos y Reglas
•	Preguntas (Queries)
•	Cláusulas de Horn
•	Cláusulas de Horn y Prolog
•	Listas

Preguntas generadoras
•	¿En qué consiste un motor de inferencia?
•	¿El lenguaje natural es muy diferente del Cálculo de predicados?
•	¿Qué es una pregunta en Prolog?
•	¿Cuál es la estructura de una cláusula de Horn?
•	¿Qué tipo de aplicaciones se desarrollan con el paradigma de programación Lógica?

Acreditación de la Unidad
Comprender las principales características del paradigma de Programación Lógica.

ACREDITACIÓN GENERAL DEL CURSO
Cada CIPAS deberá desarrollar un proyecto computacional utilizando alguno de los paradigmas de programación estudiados.

MATERIAL DE CONSULTA RECOMENDADO

•	Pratt, Terrence W. Lenguajes de Programación. Prentice-Hall. 
•	Schildt, Herbert. C guía de autoenseñanza. McGraw-Hill.
•	Stroustrup, Bjarne. El lenguaje de programación C++. Addison Wesley. 
•	Deitel, H.M. Cómo programar en C/C++. Prentice-Hall. 
•	Joyanes Aguilar, Luis. Programación orientada a objetos. McGraw-Hill.
•	Fernández Sastre, Sergio. Fundamentos del diseño y la programación orientada a objetos. McGraw-Hill.
•	Deitel, Harvey. C/C++ cómo programar y Java. Prentice-Hall.
•	Villalobos, Jorge / Casallas, Rubby. Fundamentos de programación. Aprendizaje activo basado en casos. Pearson Educación 

Enlaces de interés: 
•	http://www.unibague.edu.co/~gustavo.martinez/cursos/paradigmas/index.html
•	www.frsf.utn.edu.ar/universidad_virtual/catedras/sistemas/paradigmas/
•	www.elrincondelc.com
•	www.programadores.net 
•	www.c.conclase.net 
•	www.programacion.com
•	www.lawebdelprogramador.com
•	www.toptutoriales.com
•	http://www.java.sun.com/docs/books/tutorial/ 
•	www.abcdatos.com/tutoriales/programacion/prolog.html
•	www.mundotutoriales.com/ tutoriales_prolog-mdpal15249.htm
•	es.wikipedia.org/wiki/Programación_funcional
•	es.wikipedia.org/wiki/Écheme
•	webdia.cem.itesm.mx/ac/rtrejo/Scheme/karina/
•	www.geocities.com/v.iniestra/apuntes/pro_log/
•	www.lania.mx/biblioteca/newsletters/ 1996-primavera-verano/art4.html
•	www.solocursos.net/lisp-slckey14587.htm

http://www.cui.edu.co/~gmartin