FACULTAD DE INGENIERÍA DEPARTAMENTO DE TECNOLOGÍAS DE INFORMACIÓN Y COMUNICACIONES Materia: 09681 Programación en Red Requisito: 09651 Diseñando con algoritmos Programa Semestre: Diseño de Medios Interactivos - 5 Período académico: 2016-2 Intensidad semanal: 5 horas Créditos: 3 Descripción En este curso se busca que cada estudiante aplique tanto los conocimientos adquiridos en los cursos anteriores de algoritmos como los conceptos de programación en red, para elaborar aplicaciones interactivas que trabajen con dispositivos conectados entre sí, empleando como herramienta de trabajo el lenguaje de programación java en diferentes entornos de desarrollo y despliegue. Objetivos: Generales Al concluir el curso el estudiante estará en capacidad de: Desarrollar aplicaciones que impliquen comunicación humana basada en múltiples dispositivos; empleando, para ello, los conceptos de programación en red: direcciones IP y URL, programas cliente/servidor y streaming. Realizar proyectos usando metáforas y conceptos de manera lógica y argumentada logrando una óptima comunicación con el usuario de manera creativa y brindando soluciones gráficas a partir de conceptos de programación en red. Terminales Al finalizar el curso el estudiante estará en capacidad de: - Identificar la aplicación que tiene la programación en red en proyectos de comunicación colectiva con propósitos artísticos o de diseño interactivo. - Diseñar aplicaciones interactivas que requieran el uso de programación en red. - Elaborar aplicaciones interactivas tipo cliente/servidor. - Identificar las necesidades primarias de un proyecto y asociar a ellas un concepto como base en diseño gráfico. - Realizar propuestas de diseño basadas en argumentos teóricos que apoyen y sustenten las ideas conceptuales. - Diseñar proyectos que generen reales experiencias interactivas en los usuarios a partir de las posibilidades que la programación en red permite basados en conceptos y ejercicios puntuales. Específicos De formación académica: Al finalizar cada unidad, el estudiante estará en capacidad de: Unidad 1: Fundamentos de Redes: Describir los conceptos básicos de las redes de comunicaciones. Identificar los elementos que conforman una red y la forma en la cual interactúan para compartir recursos e información. Programación en Red Página 1 de 5
Reconocer los elementos y el funcionamiento de la arquitectura cliente/servidor. Identificar las diversas formas de interactividad en red y como se pueden aplicar de manera eficiente a los proyectos de la unidad. Unidad 2: Cliente/Servidor protocolo UDP: Reconocer los elementos y el funcionamiento del protocolo UDP. Elaborar aplicaciones donde utilicen objetos de las clases DatagramSocket y DatagramPacket para transferir información entre procesos independientes utilizando UDP, utilizando tanto tipos de datos básicos como referenciados. Reconocer la diferencia entre los tipos de comunicación: unicast, multicast y broadcast. Escribir programas donde se utilice la clase MulticastSocket para realizar comunicaciones multicast. Utilizar serialización para simplificar el envío de objetos que tienen referencias a otros objetos Identificar los modelos básicos de comunicación humana. Estructurar desde los modelos de comunicación formas de representación gráfica digital. Establecer las diversas formas de interacción en red a través de las redes sociales y cómo ellas aportan a enriquecer los productos interactivos. Identificar las diversas interacciones humano-computador que se dan a partir de las aplicaciones en red. Unidad 3: Cliente/Servidor protocolo TCP: Entender las similitudes y diferencias entre las clases utilizadas en TCP. Elaborar programas donde utilicen objetos de las clases Socket y ServerSocket para transferir información entre dos procesos independientes, de manera confiable. Reconocer las diversas comunidades virtuales que se dan en los medios y como se puede representar gráficamente a través de las interfaces. Unidad 4: Cliente/Servidor con multihilos: Aplicar los conceptos de manejo de hilos, excepciones y eventos a un problema que requiera procesamiento en red. Elaborar programas donde un proceso servidor sea capaz de atender a varios clientes de forma simultánea, mediante el uso de hilos. Utilizar diversos flujos para utilizar fuentes o destinos externos de información. Diseñar aplicaciones que utilizan mensajes sensibles a la audiencia (notificaciones). Crear proyectos con una estructura de lenguaje visual dinámico a partir de la interactividad. Lograr conocer y aplicar las distintas técnicas de interacción persona-computador en las interfaces virtuales. De formación de valores y competencias El estudiante avanzará en el fortalecimiento de valores y habilidades tales como: La perseverancia y la autonomía, a través del desarrollo de los ejercicios que entregan los profesores, y que no representan una nota ni son revisados en clase. La tolerancia, mediante el respeto ante la participación de los compañeros y el profesor en clase (Que muchas veces no coinciden con la propia opinión). La capacidad de análisis y conceptualización, a través de la identificación y modelado de los elementos necesarios para resolver un problema planteado. La capacidad de síntesis cuando deben proponer una solución final utilizando elementos ya desarrollados. La capacidad de manejo de la información, mediante la búsqueda de elementos en el lenguaje de programación Java, que ayuden en la solución de un problema planteado. La capacidad de trabajo bajo presión, ya que se cuenta con tiempo limitado para algunas actividades. Programación en Red Página 2 de 5
Metodología Los estudiantes deberán preparar, antes de la clase, los temas asignados por el profesor, para lo cual: Estudiarán el material asignado en la programación del curso. Contestarán las preguntas que contiene el material, así como las preguntas adicionales que el profesor entregue. Resolverán los ejercicios propuestos en el material, así como los ejercicios adicionales que se le entreguen. Asistirán a las sesiones de monitoria o tutoría, si requiere algún apoyo adicional. De ninguna manera se considerará preparar la clase el leer a la carrera el material, justo antes de entrar al salón. Durante la clase, el estudiante deberá: Plantear las dudas que le quedaron durante el proceso de estudio del tema a tratar. Participar en las actividades de revisión y consolidación de conceptos que proponga el profesor. Trabajar en la solución de los problemas de aplicación que se propongan. Después de la clase: Establecer las relaciones entre los temas tratados en la clase y el conocimiento previamente adquirido. Resolver los ejercicios de aplicación del tema, que tienen un nivel de complejidad mayor al de los ejercicios que resolvió previamente. Adicionalmente, si ya se ha planteado el proyecto de la unidad debe trabajar individual o grupalmente en el mismo, según el caso: identificar las relaciones entre los conceptos recién aprendidos y los conceptos previamente trabajados. Este curso utilizará Eclipse y Android Studio como entornos de desarrollo, con java como lenguaje de programación. No obstante los objetivos de aprendizaje son independientes del lenguaje y el entorno de programación seleccionado. Este curso tiene dos componentes, con igual importancia: Componente Teórica: Consiste en la discusión de los diferentes temas y el hacer ejercicios que permitan ponerlos en práctica, esto en el salón de clase. Esta componente se desarrolla en tres (3) horas por semana. Componente Práctica: Consiste en la resolución de ejercicios y su implementación en Java, esto en la sala de cómputo. Para esta componente se han destinado dos (2) horas por semana. Metodología específica para Diseño: Se trabajarán 3 metodologías específicas durante el semestre que son base para el desarrollo de software e implementación de prototipos. Modelo en cascada, prototipado evolutivo y modelo invertido. En cada una de ellas habrá diferentes entregas dentro de las fases que cada metodología propone y los tiempos serán relativos a cada entrega en particular. Es muy importante apoyarse con asistencias a tutorías de diseño donde podrán recibir oportunas retroalimentaciones del proceso y un adecuado acompañamiento. El grupo cuenta con un monitor académico, quien les brindará apoyo principalmente en las dudas referentes al entorno de programación, para lo cual se programará una sesión de dos (2) horas por semana, de libre asistencia por parte de los estudiantes. Evaluación La nota del (los) proyecto(s) grupal(es) solo entrará(n) a contar en la nota definitiva del curso si el estudiante obtiene una nota igual o superior a 3.0 en el promedio ponderado de las notas individuales. Durante el semestre se calificará solo 3 talleres de ejercicios en clase que corresponderán al porcentaje de las Pruebas cortas y tareas junto con los quices. Los ejercicios a calificar se definirán de manera aleatoria en la semana 14. Se recomienda ser muy puntuales con las entregas de estos talleres y su correcto desarrollo. Programación en Red Página 3 de 5
La no entrega de ficha técnica acarrea una nota de cero (0.0) en el componente de diseño del taller completo. La no entrega de analisis de requerimientos y flujo de interacción acarrea una nota de cero (0.0) en el componente de programación del taller completo. La no entrega de diagrama de clases UML acarrea una nota de cero (0.0) en el componente de programación del taller completo. Tanto para ficha técnica como para diagrama de clases UML, solo habrá una única entrega calificable y no se calificará ni tendrá en cuenta para evaluación una segunda entrega. Sólo se tendrá en cuenta para evaluación lo que esté en Moodle. No existe la opción de entrega tarde, a cambio, los talleres y sus componentes (Ficha técnica, UML y Código) tendrá dos fechas de entrega: entrega esperada (que es cuando debería entregarse) y entrega máxima (que es la fecha máxima que se recibe el trabajo para ser calificado). Lo que no se entregue antes de la entrega máxima, no se califica. Recordar que lo que no está en Moodle no existe, por lo tanto, no se recibirán entregas por correo ni otros medios. Los cálculos para la nota definitiva se realizarán así: Nota individual: Evaluación Valor Unidades que cubre Semana de entrega/realización Parcial 1 20% 1, 2 y 3 Semana 8 Parcial 2 20% 1, 2, 3 y 4 Semana 16 Proyecto Individual 1 16% 1 Semana 2 5 Proyecto Individual 2 16% 1 y 2 Semana 5 9 Proyecto Grupal 3 12% 1 y 2 Semana 9 13 Pruebas cortas, tareas y Programados o no 16% 1, 2, 3 y 4 quices programados Nota individual 100.0% Nota proyecto final: Si (nota Análisis, diseño y programa (nota grupal) < 3.0) entonces: Nota proyecto final = Análisis, diseño y programa Si (Análisis, diseño y programa (nota grupal) >= 3.0) entonces: Nota proyecto final = (Sustentación (nota individual)* 0.4) + (Análisis, diseño y programa * 0.6) Acorde a la tabla anterior para cada entrega y sustentación. Nota definitiva: Si (nota individual < 3.0) entonces: Nota definitiva = nota individual Si (nota individual >= 3.0) entonces: Nota definitiva = (nota individual * 0.7) + (proyectos en grupo* 0.3) Nota grupal: Evaluación Valor Unidades Semana de entrega que cubre Proyecto final 100% 1, 2, 3 y 4 Semana 17 Nota grupal 100% Nota definitiva: Si (nota individual < 3.0) entonces: Nota definitiva = nota individual Si (nota individual >= 3.0) entonces: Nota definitiva = (nota individual * 0.7) + (nota grupal * 0.3) Programación en Red Página 4 de 5
Bibliografía Arboleda Cobo, Liliana María. Programación en red con Java. Universidad Icesi, 2004. Casey Reas and Ben Fry. Processing. A programming handbook for visual designers and artists. MIT Press. Caroll John M. Human-Computer Interaction in the New Millennium. ACM Press. 2001 Edward Tufte. Visualizing Information. Graphic Press 1990. Scolari, Carlos Alberto. Hacer clic: hacia una sociosemiótica de las interacciones digitales. Scolari, Carlos Alberto. Hipermediaciones: elementos para una teoría de la comunicación digital interactiva. http://processing.org Grupo de Programación en Red en Facebook. http://processingjs.org Programación en Red Página 5 de 5