Especialización Docente de Nivel Superior en

Enseñanza de la Programación en Informática

Este módulo tiene por objetivo brindar una práctica de la programación más profunda que la adquirida en módulos anteriores, utilizando un lenguaje de programación más avanzado, e introduciendo conceptos sofisticados de definición de abstracciones de datos, de reuso, de modularización y descomposición de programas, específicamente vinculados a la Orientación a Objetos. Por otra parte, en este módulo se introducirán cuestiones más avanzadas, vinculadas a la Ingeniería de Software, y particularmente sobre aspectos fundamentales en la calidad de sistemas de software actuales, como la confidencialidad de la información y la seguridad, entre otros. Estos contenidos serán brindados a través del desarrollo de un sistema de votación simple y de baja escala, que permitirá destacar además la importancia de propiedades no funcionales de sistemas de software, como la confidencialidad y seguridad, fomentando una mirada crítica de la tecnología.

En relación con la enseñanza, se revisa la unidad didáctica diseñada en el cursado del “Seminario de Trabajo Final I”, buscando incorporar nuevos conceptos de las ciencias de la computación.

Objetivos

  • Afianzar conceptos básicos de programación.
  • Introducir conceptos de modularidad, reuso y descomposición de programas a través de la programación orientada a objetos.
  • Introducir el concepto de abstracción de datos, nuevas estructuras de datos, y afianzar el uso de las ya conocidas.
  • Implementar programas de complejidad acotada, en un lenguaje estándar de programación.
  • Introducir conceptos más avanzados de sistemas de software actuales, como la importancia de aspectos no funcionales de sistemas de software, en particular la seguridad informática y la confidencialidad de la información.
  • Discutir sobre propiedad intelectual y licencias. Analizar las implicancias de éstas en la apropiación del conocimiento y en el modo de construcción de software que habilitan.
  • Analizar el uso de licencias libres aplicadas a la producción artística.
  • Construir una mirada de la computación en tanto ciencia de la abstracción, y entender cómo se construye un programa para poder elaborar otros sobre desarrollos existentes.

Contenidos mínimos

  • Conceptos de programación imperativa. Variables. Asignación. Constructor secuencial. Constructor de alternativa. Constructor de repetición. Formas de abstracción procedimental, procedimientos y funciones.
  • Diferencia entre editor, intérprete, compilador.
  • Tipos de datos básicos y estructurados.
  • Conceptos básicos de programación orientada a objetos. Clases, objetos. Ocultamiento de la información. Concepto de abstracción de datos.
  • Representación de la información. Tipos abstractos de datos. Estructuras de datos.
  • Estructuras de datos básicas.
  • El Proceso de Desarrollo de Software. Etapas fundamentales. Análisis, diseño, implementación, validación y verificación. Procesos ágiles de desarrollo. Diseño orientado a objetos. Pruebas de software.
  • Software libre y privativo.
  • Propiedades no funcionales de sistemas de software. Principios de encriptación. Principios de seguridad y confidencialidad de la información.
  • Conceptos de filosofía de la técnica..

Bibliografía

  • A. Downey, Think Python, 1st Edition, O’Reilly, 2012.
  • R. González Duque, Python para Todos, dist. bajo Creative Commons, 2010.
  • D. Gries y P. Gries, Multimedia Introduction to Programming using Java, Springer, 2005.
  • Kenkeiras, De 0 a Python, dist. bajo Creative Commons, 2011.
  • B. Liskov, Program Development in Java: Abstraction, Specification and Object-Oriented Design, Addison-Wesley, 2000.
  • B. Meyer, Construcción de Software Orientado a Objetos, Prentice-Hall, 1998.
  • B. Meyer, Touch of Class: Learning to Program Well with Objects and Contracts, Springer, 2009.
  • G. Polya, How to Solve it, 2nd Edition, Princeton University Press, 1957.
  • D. Parnas, A Technique for Software Specification with Examples, Communications of the ACM 15(12), ACM, 1972.
  • M. Pilgrim, Dive into Python, Springer, 2004.
  • Z. Shaw, Learn Python the Hard Way, A Very Simple Introduction to the Terrifyingly Beautiful World of Computers and Code (3rd Edition), Addison-Wesley, 2013.