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 2024)
I - Oferta Académica
Materia Carrera Plan Año Periodo
PROGRAMACION II ING. EN COMPUT. 28/12 2024 2° cuatrimestre
PROGRAMACION II ING. INFORM. 026/12- 08/15 2024 2° cuatrimestre
II - Equipo Docente
Docente Función Cargo Dedicación
BERON, MARIO MARCELO Prof. Responsable P.Adj Exc 40 Hs
BERNARDIS, EDGARDO Responsable de Práctico JTP Semi 20 Hs
SANCHEZ, HECTOR ENRIQUE Responsable de Práctico JTP Exc 40 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. 2 Hs. 1 Hs. 3 Hs. 6 Hs. 2º Cuatrimestre 05/08/2024 15/11/2024 15 90
IV - Fundamentación
Los paradigmas de programación son uno de los núcleos basales de los profesionales en informática. Cada paradigma de programación proporciona métodos, estilos de programación, etc. que facilitan el abordaje de problemas informáticos. Por esta razón, impartir los conceptos relacionados con esta temática es primordial en las carreras de ingeniería. Uno de los paradigmas que ha adquirido mucho énfasis en los últimos tiempos, debido a sus fundamentos y a los métodos y herramientas que proporciona para la solución de problemas, es la Programación Orientado a Objetos (POO).
POO provee mecanismos interesantes que liberan al programador de detalles de implementación que incrementan la posibilidad de introducir errores de programación. Además, posibilita que el código desarrollado pueda ser reutilizado evitando de esta manera la pérdida de tiempo producida por la re-implementación de soluciones. Otro paradigma reciente que ha alcanzado mucha importancia es el proporcionado por la Programación Dirigida por Eventos. Esta forma de concebir la programación tiene como principal objetivo proporcionar los métodos y herramientas adecuadas para desarrollar sistemas donde el flujo de ejecución está determinado por el usuario, acciones internas del sistema u otros externos. El creador de un programa dirigido por eventos debe definir los eventos que manejarán su programa y las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como el administrador de evento. Los eventos soportados estarán determinados por el lenguaje de programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo programador. La Programación Dirigida por Eventos es la base para desarrollar interfaces de usuario aunque también es útil para desarrollar otros tipos de aplicaciones como por ejemplo: módulos del núcleo de un sistema operativo. La programación basada en scripts es importante en el ámbito de procesamiento por lotes y archivos de comando en sistemas operativos y así como también su evolución hacia lenguajes de propósito general. Como se puede observar en las breves descripciones presentadas en los párrafos precedentes, los paradigmas Orientados a Objetos, Dirigidos por Eventos y la programación Script son fundamentales para el desarrollo de aplicaciones industriales y científicas y por consiguiente son tópicos muy importantes que deben conformar el trasfondo de conocimientos de todo Ingeniero.
V - Objetivos / Resultados de Aprendizaje
Objetivos / Resultados de Aprendizaje
Al finalizar el curso se espera que el alumno sea capaz de:
* Conocer y aplicar correctamente los conceptos fundamentales del paradigma de programación orientada a objetos (POO).
* Desarrollar una visión clara del tipo de situaciones en las que el paradigma POO es adecuado y la forma en que los conceptos de clase, herencia, polimorfismo y ligadura dinámica de mensajes interactúan.
* Desarrollar y ejecutar programas cortos usando un lenguaje representativo del POO.
* Comprender los conceptos fundamentales de la programación dirigida por eventos (PDE).
* Aplicar esta forma de programación en ejemplos concretos que involucren eventos y manejadores de eventos.
* Comprender los conceptos fundamentales de la programación de la programación basada en scripts.

Durante el dictado de la asignatura se abordan los siguientes ejes transversales:
* Concepción, diseño y desarrollo de proyectos de de ingeniería en sistemas de información/informática.
* Utilización de técnicas y herramientas de aplicación en de ingeniería en sistemas de información/informática.
* Generación de desarrollos tecnológicos y/o innovaciones tecnológicas.
* Fundamentos para el aprendizaje continuo.
* Fundamentos para el desempeño en equipos de trabajo.
* Fundamentos para una comunicación efectiva.
* Fundamentos para una actuación profesional ética y responsable.
VI - Contenidos
Contenidos Mínimos


Programación Orientada a Objetos. Tipos de datos abstractos. Ocultamiento de la información y encapsulamiento. Definición de clases. Control de Acceso. Herencia. Subclases. Herencia simple y múltiple. Tipos de datos elementales y estructurados en POO. Estructuras de control. Polimorfismo y ligadura dinámica. Clases y Métodos abstractos. Ejemplos de un lenguaje POO particular. Paquetes. Interfaces. Excepciones. Entrada-salida. Ambientes de programación. Desarrollo de aplicaciones usando librerías.
Introducción a la Programación dirigida por eventos (PDE). PDE en POO. PDE e interfaces de usuario gráficas. Su uso en un lenguaje que responda al paradigma POO. Programación basada en scripts. Conceptos básicos de scripts. Características principales de un lenguaje script Phyton o simiJlar.

Para cada unidad se deja disponible el material correspondiente a los contenidos de la unidad, las diapositivas de clase, el apunte teórico y su correspondiente trabajo práctico en el repositorio digital. Para una mejor organización, tanto de los estudiantes como del equipo docente, se presenta un cronograma en donde se detalla la información de la materia: días y horarios de clase, horarios de consulta, fechas de parciales y sus respectivas recuperaciones, fecha de inicio y fin de los laboratorios.


Unidad I: Introducción a Java
Sintaxis y semántica de Java. Definición de variables. Visibilidad y Vida de las variables. Tipos de dato primitivos. Conversión de tipos. Uso de Operadores mediante ejemplos sencillos en laboratorio: Aritméticos, Asignación, instanceof, condicional, incrementales, relacionales, lógicos, concatenación de caracteres. Precedencia entre operadores. La clase String. Integer, Float y Number. Arreglos. Wrappers. Estructuras de control de flujo: Selección if else, Selección switch, Bucle while, Bucle for, Bucle do while, Sentencia break, Sentencia continue. Comentarios en Java. Caracteres especiales.

Unidad II: Programación Orientada a Objetos - Lenguaje Java
Programación Orientada a Objetos y Java. Clase. Ejemplos de construcción de una clase en Java. Clases y Objetos en Java. Atributos. Métodos en Java. Pasaje de parámetros. Encapsulamiento. Control de acceso. Constructores. Herencia en Java. Sub-clases y super-clases. This. Super. Herencia múltiple. Redefinición de métodos heredados. Accesibilidad a clases o interfaces, variables. Polimorfismo. Ligadura Dinámica. Clase abstracta. Abstracción en Java. Interfaz; ejemplos en Java. Métodos Abstractos. Paquetes. Relaciones entre paquetes.

Unidad III: Colecciones
El framework Collection en Java: Interfaces, implementaciones y algoritmos. La interfaces Collection, List, Queue, Dequeue, Map, Set y sus respectivas implementaciones y algoritmos. Iteradores.

Unidad IV: Manejo de Archivos en Java
Archivos. Conceptos Fundamentales. Apertura, lectura y cierre de archivos. Archivos en Java. FileReader. FileWriter. Buffers. BufferedReader. BufferedWriter.

Unidad V: Mecanismos de Manejo de Excepciones en Java
Manejo de Excepciones. Ventajas. Manejo de excepciones en Java: La clase Throwable; bloques try, catch y finally. Tipos de Excepciones: Excepciones verificadas y no verificadas. Creación de excepciones propias. La sentencia throw. La clase Exception como superclase. La cláusula throws. Estudio comparativo y mediante ejemplos en laboratorio.

Unidad VI: AWT y Swing
La interfaz gráfica. AWT. Concepto y uso. Componentes y eventos soportados. Jerarquía de componentes, eventos y sus relaciones. Estructura de una aplicación AWT. Swing. Estructura de una aplicación Swing. Swing vs. AWT. Componentes Swing: Contenedores. JFrame. JComponent JDialog. JApplet. Jpanel. Organización en el IDE. Manejo de ventanas y layout. Introducción a la Programación Dirigida a Eventos. El modelo de eventos de Java. Programación de eventos GUI en Java.

Unidad VII: Programación Dirigida por Eventos
El Paradigma de Programación Dirigida a Eventos. Diferencias entre las distintas formas de paradigmas de programación vistos. El usuario dirigiendo el flujo del programa. Detección de eventos. Problemática. Interfaces gráficas con el usuario en un entorno dirigido a Eventos. Herramientas visuales de desarrollo. Lenguajes utilizados en la Programación Dirigida a Eventos. Referencias. Enlaces externos. Definición de Eventos y notificaciones. Subscripción de Eventos. Proceso de Suscripción. Modelos. Protocolos de Entrega de Notificación.

Unidad VIII: Programación de Scripts
Programación basada en scripts. Conceptos básicos de scripts. Orígenes de la programación script (shell scripts). Desarrollo moderno de lenguajes de script. Tipos de lenguajes de scripting. Características generales. Introducción al lenguaje Python. Tipos: entero, flotantes, caracter, booleano, strings, listas, tuplas y diccionarios. Sentencias. Funciones. Definición de funciones. Invocación de funciones. Aplicaciones.

VII - Plan de Trabajos Prácticos
Metodología de la Enseñanza

Los trabajos prácticos correspondientes a las unidades del programa consisten en problemas que deben ser resueltos por los estudiantes guiados por los docentes. En cada trabajo práctico los estudiantes deben resolver ejercicios que están relacionados con la teoría que se ha dictado en ese momento. Los ejercicios están organizados por orden de complejidad comenzando por ejercicios más simples, luego los de complejidad media y por último los más complejos. En cada práctico, con el fin de realizar una evaluación formativa, se resuelven ejercicios (correspondientes a cada nivel de complejidad) en el pizarrón de forma tal de fomentar la comunicación, hacer explícita la relación de conceptos, y detectar los inconvenientes que los estudiantes puedan tener.
En caso de detectar un problema, el docente resuelve ejercicios del mismo tipo y propone otros nuevos con la finalidad de que el estudiante pueda asimilar los conceptos y sus relaciones. Además, con este tipo de actividad, se busca que el estudiante empiece a expresarse de manera escrita utilizando un vocabulario acorde a los contenidos vistos, a socializar y reflexionar sobre sus respuestas y a detectar los conceptos no comprendidos.
Las clases están pensadas para que el alumno participe activamente respondiendo preguntas que el docente realiza las cuales pueden ser de teóricas o prácticas y resolviendo ejercicios en el pizarrón. A medida que se van desarrollando las clases, el docente va realizando análisis del desempeño de los estudiantes de forma tal de poder establecer el nivel de grupo y proponer actividades que resuelvan las dificultades que se puedan presentar.
Todos los ejercicios pueden ser validados utilizando herramientas (IDEs, compiladores e intérpretes) que permiten la ejecución de los ejercicios (dado que en la materia se enseñan lenguajes de programación utilizados tanto en el ambiente académico como en el profesional). Con el fin de promover una relación más estrecha con el mercado laboral y también con el de investigación, en la materia se utilizan herramientas de uso profesional asociadas a los lenguajes que se enseñan en la materia (los cuales también son muy utilizados en el contexto académico y el empresarial.
Durante todo el desarrollo de la materia los docentes hacen énfasis en conceptos del paradigma en sí remarcado como se concretan en los lenguajes estudiados e informando que el proceso de capacitación es continuo, en primera instancia es guiada por los docentes de la materia y luego conducido por los propios estudiantes. Se refuerza esta idea basándose en que los lenguajes de programación evolucionan constantemente lo que conduce a que aparezcan nuevos lenguajes y por consiguiente se deban estudiar para que la inserción en el ambiente laboral sea más sencilla. También se promueve el trabajo en equipo, el desarrollo de soluciones innovadoras de los prácticos y el uso de vocabulario técnico, preciso y claro cuando los estudiantes explican los prácticos en clase.
La materia consta de laboratorios en los cuales el estudiante integra los conocimientos adquiridos en los prácticos de aula. En estos laboratorios también se le solicita al estudiante que use técnicas de desarrollo de sistemas y de resolución creativa de problemas para promover la innovación. Una vez finalizado cada laboratorio los estudiantes realizan una presentación la cual es evaluada por los docentes. En la evaluación se tiene en cuenta el vocabulario utilizado, la forma de comunicación, la calidad de la solución y las tareas realizadas por cada miembro del equipo.

Unidad I: Introducción a Java
Se introducen los conceptos iniciales del lenguaje de programación Java. Los ejercicios están orientados a realizar programas simples que usen clases primitivas, expresiones, sentencias de flujo de control.

Objetivo: Con este práctico se pretende que el alumno conozca las construcciones de programación provistas por el lenguaje de programación Java.

Metodología:

* Desarrollo de ejercicios en papel y en la computadora.

* Discusión en clase de las soluciones donde se hace énfasis en las buenas prácticas de programación.

* Utilización de entornos de desarrollo que se usan en la academia y en las empresas.

El práctico incluye ejercicios donde se pretende que el estudiante:

* Utilice las sentencias (secuencia, selección e iteración) que provee el lenguaje java para resolver ejercicios básicos de programación.

* Aplique en las soluciones algoritmos simples

En este práctico se realiza el siguiente laboratorio:

Laboratorio I: Implementación y ejecución de programas cortos usando el lenguaje orientado a objetos Java.


Unidad II: Programación Orientada a Objetos - Lenguaje Java
En este práctico se introducen los conceptos necesarios para la creación de clases y de las relaciones posibles entre ellas en el Lenguaje de Programación Java.

Objetivo: En este práctico se pretende que el alumno defina clases, herencia y polimorfismo.

Metodología:

* Se plantean ejercicios en donde los estudiantes deben definir clases. Las soluciones son discutidas en clase con la supervisión del docente.

* Se plantean ejercicios donde los estudiantes deben relacionar las clases usando herencia. Las soluciones son discutidas en clase con la supervisión del docente. Se hace énfasis en el funcionamiento de constructores, en como se invocan los métodos, y en la reutilización de diferentes elementos de las clases.

* Se realizan ejercicios, en general usando los prácticos anteriores, donde los estudiantes deben utilizar polimorfismo. Las soluciones son discutidas en clase con la supervisión del docente.

El práctico incluye ejercicios donde se pretende que el estudiante:

* Identifique e implemente clases con todos los miembros necesarios.

* Identifique e implemente relaciones de herencia entre las clases.

* Aplique soluciones polimórficas a problemas típicos de programación.

* Integre todos los conceptos vistos en la unidad.

En este práctico se desarrolla el siguiente laboratorio:

* Laboratorio II: Implementación y ejecución de programas que impliquen el uso de las jerarquías de clases disponibles para el lenguaje orientado a objetos Java.

Unidad III: Colecciones
En este práctico se desarrollarán ejercicios con la utilización de las interfaces de: list, map, etc.

Objetivo: En este práctico se pretende que el estudiante:

* Sepa utilizar las estructuras de datos provistas por Java como así también utilizar los algoritmos apropiados para resolver problemas de programación

* Pueda definir sus propias estructuras de datos a partir de la infraestructura de estructuras de datos provistas por Java.

Metodología:

* Los ejercicios están organizados en distintos niveles de complejidad, comenzando con simples usos de estructuras de datos y a medida que se avanza se va elevando el nivel de los ejercicios hasta proponer algunos donde a partir de narrativas cortas el estudiante identifique las clases correspondientes como así también sus relaciones y use las estructuras de datos provista por el lenguaje de programación.

* En el práctico se plantean ejercicios donde el estudiante debe seleccionar la estructura de datos apropiada para elaborar una solución.

* En clase se discuten los criterios que utilizó el estudiante para seleccionar la estructura de datos para resolver el problema.

* En clase también se discuten los algoritmos que se utilizaron en las soluciones como así también los criterios empleados para su selección.

* Las soluciones de los ejercicios más complejos como así también los que causaron inconvenientes a los alumnos son resueltos en clases por los estudiantes con la supervisión del docente.

El práctico incluye ejercicios donde se pretende que el estudiante:

* Utilice de forma directa las estructuras de datos provistas por el lenguaje de programación.

* Seleccione y utilice las estructuras de datos provistas por el lenguaje de programación Java en sus soluciones.

* Cree estructuras de datos simples y las incorpore, cuando el problema lo amerite, a la jerarquía de clases del lenguaje de programación.

* Elabore criterios de selección de estructura de datos y algoritmos.

En este práctico se desarrolla el siguiente laboratorio:

* Laboratorio III: Implementación y ejecución de programas que impliquen el uso de la infraestructura de colecciones provistas por el lenguaje de programación Java.

Unidad IV: Manejo de Archivos en Java
En este práctico se desarrollarán ejercicios que utilicen las funciones provistas por Java para la manipulación de archivos.

Objetivo: En este práctico se pretende que el estudiante:

* Aprenda a administrar la memoria secundaria.

Metodología:

* El práctico consta de ejercicios sencillos en donde el estudiante tiene que realizar las operaciones de lectura y escritura de archivos.

* Los ejercicios se resuelven en papel y en la computadora y son supervisados por el docente.

* Se explican las soluciones de aquellos ejercicios que les resultaron más complicados a los estudiantes.


El práctico incluye ejercicios donde se pretende que el estudiante:

* Aprenda a aplicar los pasos que son necesarios para trabajar con archivos.

* Abra archivos usando los diferentes modos que provee el lenguaje de programación.

* Escriba archivos en memoria secundaria.

En este práctico se desarrolla el siguiente laboratorio:

Laboratorio IV: Construcción y ejecución de programas que:

* Almacenen en memoria secundaria información ingresada por un usuario.

* Escriban en memoria secundaria información ingresada por el usuario.

* Recuperen y procesen información de memoria secundaria, procesen la información recuperada y escriban información la información resultante del procesamiento en memoria secundaria.

Unidad V: Mecanismos de Manejo de Excepciones en Java
Los ejercicios desarrollados en el práctico correspondiente a la unidad III serán mejorados introduciendo rutinas de manejo de excepciones, errores, etc.

Objetivo: En este práctico se pretende que el estudiante:

* Aprenda a aplicar el concepto de excepción.

* Combine los mecanismos de manejo de errores tradicionales con los provisto por las excepciones.

* Elabore criterios respecto a cuando puede aplicar: i) El mecanismo de manejo de errores tradicional; ii) El de excepciones, o iii) Una combinación de los mismos.

Metodología:

* Los ejercicios están organizados en distintos niveles de complejidad, comenzando con simples del mecanismo de excepciones y a medida que se avanza se va elevando el nivel de los ejercicios hasta proponer algunos donde la aplicación de excepciones es más elaborada e incluyan combinaciones con el esquema tradicional de manejo de errores.

* En el práctico se plantean ejercicios donde el estudiante debe seleccionar estrategia de manejo de errores apropiada para elaborar una solución.

* En clase se discuten los criterios que utilizó el estudiante para seleccionar la estrategia de manejo de errores para resolver el problema.

* En clase también se discuten los criterios empleados para la selección de la estrategia de manejo de error.

* Las soluciones de los ejercicios más complejos como así también los que causaron inconvenientes a los alumnos son resueltos en clases por los estudiantes con la supervisión del docente.


El práctico incluye ejercicios donde se pretende que el estudiante:

* Utilice el mecanismo de manejo de excepciones provisto por el lenguaje de programación.

* Analice el funcionamiento del mecanismo de excepciones.

* Use las excepciones provistas por el lenguaje de programación.

* Defina sus propias excepciones.

* Combine las estrategias de manejo de errores tradicionales con las de manejo de excepciones.

En este práctico se desarrolla el siguiente laboratorio:

Laboratorio V: Ejecución y corridas de programas donde el estudiante utilice excepciones provistas por el lenguaje de programación y defina sus propias excepciones.

Unidad VI: AWT y Swing

Objetivo: En este práctico se pretende que el estudiante:
Construya interfaces gráficas utilizando AWT y SWING.

Metodología:

* Los ejercicios están organizados en distintos niveles de complejidad, comenzando con simples aplicaciones de las diferentes componentes de awt o swing y a medida que se avanza se va elevando el nivel de los ejercicios hasta crear una GUI.

* En el práctico se plantean ejercicios donde el estudiante debe seleccionar la componente gráfica más apropiada para facilitar el uso por parte del usuario.

* En clase se discuten los criterios que utilizó el estudiante para seleccionar las componentes gráficas.

* En clase también se discuten los criterios empleados la creación de GUIs.

* Las soluciones de los ejercicios más complejos como así también los que causaron inconvenientes a los alumnos son resueltos en clases por los estudiantes con la supervisión del docente.

El práctico incluye ejercicios donde se pretende que el estudiante:

* Utilice el mecanismo utilice las widgets provistas por AWT y SWING.

* Analice el funcionamiento de las componentes de AWT y SWING.

* Defina sus propias componentes.

En este práctico se desarrolla el siguiente laboratorio:

Laboratorio VI: Entorno de desarrollo en Java (AWT-SWING). Implementación de programas con manejo de GUIs manejada por eventos.

Unidad VII: Programación Dirigida por Eventos

Objetivo: En este práctico se pretende que el estudiante:

* Aprenda a utilizar los eventos provistos por AWT y SWING.

* Defina sus rutinas de manejo de eventos.

Metodología:

* Los ejercicios están organizados en distintos niveles de complejidad, comenzando con simples usos de los eventos provistos por las componentes de AWT y SWING y a medida que se avanza se va elevando el nivel de los ejercicios hasta crear rutinas de manejo de eventos complejas.

* En el práctico se plantean ejercicios donde el estudiante debe seleccionar la componente gráfica más apropiada para facilitar el uso por parte del usuario e incorporar los eventos necesarios para controlar entradas erróneas, brindar ayudas al usuario es decir contribuir a facilitar la usabilidad de una GUI.

* En clase se discuten los criterios que utilizó el estudiante para seleccionar los eventos y construir sus rutinas de manejo.

* Las soluciones de los ejercicios más complejos como así también los que causaron inconvenientes a los alumnos son resueltos en clases por los estudiantes con la supervisión del docente.

El práctico incluye ejercicios donde se pretende que el estudiante:

* Utilice el mecanismo utilice los eventos provistos por AWT y SWING.

* Analice el funcionamiento de los eventos y sus formas de propagación.

En este práctico se desarrolla el siguiente laboratorio:

Laboratorio VII: Desarrollo de programas cortos utilizando la programación dirigida a eventos con rutinas de manejo de eventos de complejidad media.

Unidad VIII: Programación de Scripts

Objetivo: En este práctico se pretende que el estudiante:

* Aplique los conceptos de programación de scripts.

* Aprenda el lenguaje de programación Python – Paradigma Imperativo.

Metodología:

* Todos los prácticos constan de su correspondiente teoría con ejemplos. Dicho documento es elaborado por la cátedra. También se proveen fuentes bibliográficas para apoyar a la resolución de ejercicios prácticos.

* Los ejercicios están organizados en distintos niveles de complejidad, comenzando con construcción de programas simples en donde se hagan uso de las construcciones básicas de programación en Python a otros más complejos que impliquen construcciones más completas del lenguaje de programación.

* En el práctico se plantean ejercicios donde el estudiante debe utilizar las construcciones de programación más apropiadas (secuencia, selección e iteración) para resolver los ejercicios. Además deben ser correctamente empleadas evitando errores típicos de programación.

* Las soluciones de los ejercicios más complejos como así también los que causaron inconvenientes a los alumnos son resueltos en clases por los estudiantes con la supervisión del docente.

El práctico contiene ejercicios donde se pretende que el estudiante:

* Utilice las sentencias y construcciones del lenguaje de programación

* Elabore soluciones utilizando estrategias de desarrollo de sistemas.

* Utilice diferentes módulos provistos por el lenguaje.

* Defina sus propios módulos.

En este práctico se desarrolla el siguiente laboratorio:

Laboratorio VIII: Desarrollo de scripts utilizando el lenguaje Python.


A continuación se explica como los ejes transversales empleados en la materia:

* Concepción, diseño y desarrollo de proyectos de de ingeniería en sistemas de información/informática: En los laboratorios se tienen que desarrollar proyectos de ingeniería en lo cuales se exigirá que los métodos, técnicas y herramientas vistos en la materia se apliquen correctamente.

* Utilización de técnicas y herramientas de aplicación en de ingeniería en sistemas de información/informática: Durante todo el desarrollo de la materia se fomentará el buen uso de las técnicas de programación, la utilización de herramientas de utilizadas en mercado y las prácticas correctas para modularizar los sistemas de software.

* Generación de desarrollos tecnológicos y/o innovaciones tecnológicas: Se promoverá, sobre todo en los laboratorios, el desarrollo de soluciones innovadoras prestando especial atención aquellas en las que se requiere intervención del usuario.

* Fundamentos para el aprendizaje continuo: Las actividades tanto teóricas como prácticas se iniciarán con un repaso de contenidos previos pertinentes, con la participación de los estudiantes mediante consultas. En todo el desarrollo de la materia se hará énfasis en la evolución de la tecnología y la necesidad de aprehender estrategias de estudio e investigación que faciliten el aprendizaje de dichas tecnologías.

* Fundamentos para el desempeño en equipos de trabajo: En algunas todas las prácticas se organizarán grupos de estudiantes para fomentar el trabajo conjunto, tanto dentro como fuera del aula, verificando que cada integrante sea capaz de explicar parte de la tarea realizada.

* Fundamentos para una comunicación efectiva: En todas las actividades que implican la participación activa de los estudiantes, tanto escritas como orales, se prestará especial atención al empleo de terminología y notaciones propias de los desarrollos informáticos, así como a la claridad con que se expresen los conceptos de programación utilizados. Además, se verificará que las intervenciones de los estudiantes sean pertinentes. En todos los casos, el equipo docente realizará las correcciones y/o sugerencias necesarias para una correcta comunicación, según el contexto.

* Fundamentos para una actuación profesional ética y responsable: Se compartirá un cronograma de evaluaciones y otras actividades. Para todas ellas, se establecerán plazos y formas de entrega. Se exigirán requisitos de asistencia a clases para regularizar y/o promocionar la materia. Se requerirá la presentación de los certificados correspondientes a quienes soliciten algún tipo de flexibilidad excepcional con causa que lo justifique. Se fomentará el reconocimiento de autoría cuando se usen algoritmos realizados por programadores que no forman parte del equipo de trabajo.
VIII - Regimen de Aprobación
La materia se desarrolla con la modalidad de promoción sin examen final. Existen dos niveles:
a) Regularización solamente: Para regularizar la materia se deberá:
1.- Tener como mínimo un 80% de asistencia a clases prácticas.
2.- Tener los prácticos, solicitados por la cátedra, aprobados.
3.- Aprobar el parcial o sus respectivas recuperaciones con un mínimo del 60%.
b) Promoción sin examen final: Para regularizar y aprobar la materia se deberá:
1.- Cumplir con los requisitos a.1 y a.2.
2.- Aprobar el parcial o sus respectivas recuperaciones con un mínimo del 70%.
3.- Aprobar una evaluación integradora global con un mínimo del 70%.
Se otorga dos recuperaciones para el parcial y el práctico de máquina según reglamentación vigente.
Aquellos alumnos que sólo regularicen la materia deberán rendir un examen final, en los turnos establecidos.
En Programación II no se admite rendir libre.
IX - Bibliografía Básica
[1] Cachero, Cristina, Ponce de León, Pedro J., Saquete, Estela. "Introducción a la Programación Orientada a Objetos”.
[2] Universidad de Alicante - Publicación Alicante - 2006.
[3] Y. Daniel Liang, “Introduction to Java Programming, comprehensive”, Prentice Hall; 8 ed, 2010.
[4] Grant Palmer. “Java Event Handling”. Prentice Hall. ISBN 0-13-041802-1. 2001.
[5] David Luckham. “The Power of Events - An Introduction to Complex Event Processing in Distributed Enterprise Systems”. Addison-Wesley. ISBN 0-201-72789-7. 2002.
[6] George S. Fishman. “Discrete-Event Simulation - Modeling, programming, and Analysis”. Springer. ISBN: 0-387-95160-1.
[7] Bertrand Meyer. “Touch of Class: Learning to Program Well with Objects and Contracts”, Springer, 2009.
[8] Bertrand Meyer. “The power of abstraction, reuse and simplicity: an object-oriented library for event-driven design, in Festschrift in Honor of Ole-Johan Dahl eds”. Olaf Owe et al. Springer-Verlag. Lecture Notes in Computer Science 2635.2004.
[9] "The Java Tutorial". http://java.sun.com/docs/books/tutorial/index.html
[10] Herbert Schildt. “Java: A Beginner’s Guide”. Third Edition. McGraw-Hill/Osborne.
[11] "Python Programming Language" - Official Website http://www.python.org/doc/.
[12] Mark Lutz. "Programming Python", O'Reilly Media, Inc.; 3 edition, 2006.
[13] Peter Norton, Alex Samuel, David Aitel, et.al. "Beginning Python", Wiley Publishing, Inc.2005.
[14] Material provisto por la cátedra.
X - Bibliografia Complementaria
[1] Quentin Charatan, Aaron Kans. Java in two Semesters. Fourth Edition. Srpinger. 2019.
[2] Davidson, Mary Ann. Java Coding Guidelines. Pearson. 2014
XI - Resumen de Objetivos
Al finalizar el curso se espera que el alumno sea capaz de:
- Conocer y aplicar los conceptos fundamentales del paradigma de programación orientada a objetos (POO).
- Comprender y aplicar los conceptos fundamentales de la programación dirigida por eventos (PDE).
- Comprender y aplicar los conceptos fundamentales de la programación de script.
XII - Resumen del Programa
-Programación Orientada a Objeto. Ocultamiento de la información y encapsulamiento. Definición de clases. Control de Acceso. Herencia. Subclases. Ejemplos en un lenguaje de POO particular. Herencia simple y múltiple. Tipos de datos elementales y estructurados en POO: Java. Estructuras de control. Polimorfismo y ligadura dinámica. Clases y Métodos abstractos. Ejemplos de un lenguaje POO particular. Paquetes. Interfaces. Excepciones. Entrada-salida. Ambientes de programación. Desarrollo de aplicaciones usando librerías.
- Programación dirigida por eventos (PDE). Desde la programación (secuencial) estructurada a la programación dirigida por eventos. Eventos. Creando y ligando manejadores de eventos. PDE en POO. PDE e interfaces de usuario gráficas.
- Programación basada en scripts. Conceptos básicos de scripts. Desarrollos modernos de lenguajes tipo script. Tipos de lenguajes de scripting. Características generales. Introducción al lenguaje Python Script.
XIII - Imprevistos
Los imprevistos serán resueltos por la cátedra en la medida que aparezcan.
Correo de Contacto: Mario Berón -- mberon@email.unsl.edu.ar
XIV - Otros
Las vías de comunicación con los estudiantes son las siguientes:
*Correo electrónico del responsable de la materia: mberon@email.unsl.edu.ar
*Correo electrónico de los auxiliares:
Edgardo Bernardis - edgardob@gmail.com
Enrique Sanches - quique1876@gmail.com
*Oficina: 3 Bloque II - Primer Piso
*Teléfono: +54 (266) 4520300 - Interno: 2103