Ministerio de Cultura y Educación
Universidad Nacional de San Luis
Facultad de Ciencias Físico Matemáticas y Naturales
Departamento: Informatica
Área: Area IV: Pr. y Met. de Des. del Soft.
(Programa del año 2012)
(Programa en trámite de aprobación)
(Programa presentado el 05/03/2012 11:48:10)
I - Oferta Académica
Materia Carrera Plan Año Periodo
PROGRAMACION II TEC.REDES COMP. 12/13 2012 1° cuatrimestre
PROGRAMACION II TEC.REDES COMP. 12/13 2012 1° cuatrimestre
PROGRAMACION II TCO.UNIV.EN WEB 08/13 2012 1° cuatrimestre
II - Equipo Docente
Docente Función Cargo Dedicación
BERON, MARIO MARCELO Prof. Responsable P.Adj Exc 40 Hs
MIRANDA, ENRIQUE ALFREDO Auxiliar de Práctico A.2da Simp 10 Hs
III - Características del Curso
Credito Horario Semanal Tipificación Duración
Teórico/Práctico Teóricas Prácticas de Aula Práct. de lab/ camp/ Resid/ PIP, etc. Total B - Teoria con prácticas de aula y laboratorio Desde Hasta Cantidad de Semanas Cantidad en Horas
Periodo
 Hs. 4 Hs. 3 Hs. 3 Hs. 10 Hs. 1º Cuatrimestre 14/03/2012 22/06/2012 15 150
IV - Fundamentación
Con el propósito de recordar y reforzar esos conceptos previos referentes a programación en el presente programa se incluye una unidad inicial que consiste en la revisión de los conceptos de Programación Imperativa usando como lenguaje de estudio al lenguaje C. En esta unidad se pretende hacer énfasis en la construcción y manipulación de diversas estructuras de datos que son ampliamente utilizadas en los sistemas de software. Actualmente este lenguaje es muy usado para el desarrollo de software de base como así también para la interacción con diversos dispositivos. Además, el lenguaje C, tiene una sintaxis similar a otros lenguajes de amplio uso en la construcción de aplicaciones de Internet. Esta característica es interesante ya que el alumno se familiariza con la notación de esos lenguajes de programación.
El Paradigma Imperativo no es el único, existen otros como por ejemplo el Orientado a Objetos que permiten concebir a la programación desde otras perspectivas. Actualmente, el Paradigma Orientado a Objetos ha alcanzado una amplia popularidad debido a las facilidades que proporciona para la construcción de software. Particularmente, este paradigma se ha utilizado mucho en el desarrollo de aplicaciones de red a través del uso del lenguaje Java. Por esta razón, la enseñanza del Paradigma Orientado a Objetos y de Java se considera esencial en Programación II.
Finalmente, existen lenguajes de programación que posibilitan la utilización de diferentes paradigmas de programación. Dicha posibilidad cuando es apropiadamente usada proporciona una herramienta muy útil para el desarrollo de aplicaciones. Este es el caso del lenguaje de programación Python. Como fue mencionado previamente con Python es posible escribir programas que usen el Paradigma Imperativo como así también el Orientado a Objetos y el Funcional. Los dos primeros son abordados en las unidades iniciales de la materia mientras que el último, el Funcional, sólo será brevemente introducido en la última unidad. Python es un lenguaje ampliamente usado para el desarrollo de aplicaciones de red y proporciona librerías que posibilitan la construcción de sistemas de forma rápida. Estas características hacen de Python un lenguaje atractivo para el técnico debido a que el desarrollo de sistemas aplicados a la red es una de sus principales funciones.
Es importante notar que Programación II presenta temáticas de propósito general, remarcando como las mismas pueden ser aplicadas en el contexto de la red, y prepara el camino para que el alumno pueda asimilar los tópicos de cursos superiores. De esta manera, el alumno que haya aprobado todas las materias relacionadas con programación tendrá un espectro general de las formas y técnicas de programación y de las herramientas que utilizará en el mercado laboral.
V - Objetivos / Resultados de Aprendizaje
Este curso tiene los siguientes objetivos:
*Reforzar los conceptos de la Programación Imperativa.
*Introducir en los conceptos necesarios para creación de programas que usen el Paradigma de Programación Orientado a
Objetos.
*Dar a conocer las bases del paradigma de Programación Funcional.
VI - Contenidos
Unidad 1: Programación Imperativa. Tipos de Datos Abstractos en C
Recapitulación de los conceptos del Lenguaje de Programación C. El concepto de Tipo de Dato Abstracto. Definición e Implementación de Tipos de Datos Abstractos: Pilas, Colas, Listas, etc. en sus versiones dinámica. El Tipo de Dato Abstracto Árbol, definición e implementación en sus versiones estática y dinámica. Ejercicios de aplicación.

Unidad 2: Paradigma de Programación Orientada a Objetos-Lenguaje Java
Introducción. Génesis de la Programación Orientada a Objetos: La Vía de la Simulación. La Vía de la Ingeniería de Software. Abstracción de Datos e Información Oculta. El Concepto de Objeto. El Encapsulamiento: Propiedad Fundamental. Mensajes. Objetos en Programación Orientada a Objetos: Instancias y Clases. Clases e Instancias. Definición de Clases. Creación de Clases. Requisitos Iniciales. Definición de la Estructura. Definición del Comportamiento. Constructores. Métodos de Instancia. La Referencia this. Paquetes e Importación de Clases. Reglas de Accesibilidad a una Clase. Reglas de Acceso a Variables y Métodos de Instancia. Composición en la Definición de una Clase. Métodos y Variables de Clase. Jerarquías de Clases. El Mecanismo de la Herencia. Algoritmo de Búsqueda de Métodos. Superposición de Métodos y Variables. Modificadores y Redefinición de Métodos. Clases sin Subclases. Clases y Constructores. Creación de Clases Via Herencia. Compatibilidad entre Clases y Subclases. Polimorfismo. Aplicación de todos los conceptos previamente mencionados usando el lenguaje de programación Java.

Unidad 3: Programación Multiparadigma – Lenguaje Python
Características Imperativas de Python. Carcterísticas Orientadas a Objeto de Python. Breve introducción a las caracterísiticas funcionales de Python. Python como lenguaje de scripting. Desarrollo de Interfaces gráficas rápidas usando Python.

VII - Plan de Trabajos Prácticos
Unidad 1: Los prácticos de esta unidad consistirán en la resolución de dos clases de ejercicios. Los primeros están relacionados en la implementación de los tipos de datos abstractos dados en teoría. Los segundos son ejercicios de aplicación que implican el uso de los tipos de datos abstractos implementados previamente.

Unidad 2: Los prácticos de esta unidad estarán divididos en dos partes. La primera de ellas se centrará en la familiarización del alumno con el Lenguaje de Programación Java. Para este fin se presentará una guía de prácticos simples que impliquen el uso de tipo básicos y sentencias primitivas. La segunda se basará en el uso de los conceptos de programación orientada a objetos.

Unidad 3: La parte práctica de esta unidad se dividirá en cuatro partes. En la primera se utilizarán las características imperativas del lenguaje Python. En la segunda se utilizarán las características orientadas a objetos del lenguaje Python. En la tercera, se utilizarán librerías gráficas para el desarrollo de interfaces con el usuario. En esta etapa se intentará resolver ejercicios que impliquen el uso de algoritmos que el alumno utilizará en el mercado laboral. Finalmente, en la última parte se mostrarán brevemente las características funcionales de Python.

Laboratorios:
Cada unidad tendrá una laboratorio que consistirá en el desarrollo de un programa que resuelva un problema de aplicación
utilizando el paradigma de programación y lenguaje que se estudia en la unidad correspondiente.
VIII - Regimen de Aprobación
Regularización de la Asignatura: El alumno debe aprobar los exámenes parciales o sus correspondientes recuperaciones, y deberá presentar en tiempo y forma los prácticos de máquina solicitados por la cátedra. Se tomará una recuperación general adicional a los alumnos que hayan presentado certificado de trabajo en tiempo y forma.

Aprobación de la Asignatura:
*Promoción de la Asignatura: El alumno debe cumplir con las condiciones de regularización y aprobar los exámenes parciales con un nivel superior o igual al 70% del total.

*Examen Final: Los alumnos rendirán un examen teórico-práctico el cual puede ser escrito u oral.

*Examen Libre:
Se aceptarán alumnos libres siempre y cuando cumplan con los requisitos dispuestos por Art. 27 de la odenanza 13/03 CS.
IX - Bibliografía Básica
[1] Rossum, G; Drake, F. “Python Tutorial”. Python Software Foundation, version en español.
[2] Material de la Cátedra “Programación Orientada a Objetos” del Prof. Mario Martins. Universidade do Minho. http://sim.di.uminho.pt/ensino2.php3?seccao=geral&id=90.
[3] Eckel, B. “Thinking in Java”. Versión en español. President, Mind View Inc.
[4] Kernighn, Brian; Ritchie, Dennis. "El Lenguaje de Programación C". Editorial: Prentice-Hall. Edición 1991.
[5] Material proporcionado por la cátedra
X - Bibliografia Complementaria
[1] Meyer, B. “Object Oriented Software Construction”. Second Edition. Pretince Hall. 1997.
[2] Niemeyer, P; Knudsen, J. “Learning Java”. Editorial: O’Really. ISBN: 1-56592-718-4. 722 páginas.
[3] Norton, P; Samuel, A. Aitel, D; et.al. “Beginning Python”. Wiley Publishing, Inc. 2005. ISBN-10: 0-7645-9654-3
[4] Ascher, D; Lutz, M. “Learning Python”. O'Reilly Second Edition. 2004. ISBN: 0-596-00281-5.
XI - Resumen de Objetivos
*Reforzar conceptos de programación imperativa.
*Introducir los conceptos fundamentales de la programación orientada a objetos.
*Dar a conocer los conceptos básicos de la programación funcional.
XII - Resumen del Programa
Unidad I: Programación Imperativa. Tipos de Datos Abstractos en C.
Unidad II: Programación Orientada a Objetos. Lenguaje Java.
Unidad III: Programación Multiparadigma. Lenguaje Python.
XIII - Imprevistos
Serán resueltos por los integrantes del área en el momento apropiado en la medida de lo posible.
XIV - Otros