Skip to content

IIC2233-2015-2/syllabus

Repository files navigation

IIC2233 - Programación Avanzada

Tabla de contenidos

Calendario

Todas las Actividades (AC) son evaluadas.

Agosto

Día Evento Contenido Información adicional
Martes 11 Primera cátedra Sin evaluación
Jueves 13 AC01 Objetos - Modelación Primera AC evaluada
Martes 18 AC02 Herencia - Multiherencia
Jueves 20 AC03 Polimorfismo
Martes 25 AC04 Estructuras de Datos Hasta antes de árboles
Jueves 27 AC05 Estructuras de Datos Árboles y nodos

Septiembre

Día Evento Contenido Información adicional
Martes 1 AC06 Functional Hasta generadores
Jueves 3 AC07 Functional Desde Lambda Functions
Viernes 4 T01 Programación Orientada a Objetos 10:30 - Deadline (recordar: Diagrama vía SIDING)
Martes 8 AC08 Decoradores Último de Functional
Jueves 10 AC09 Metaclases
Martes 15 AC10 Metaclases Si, otra vez.
Jueves 17 AC11 Abstract classes Suspendida por el terremoto
Viernes 18 T02 EDD y Programación Funcional 10:30 - Deadline
Lunes 21 I1 Hasta metaclases (incluido) 18:30 - Salas avisadas por SIDING.
Martes 22 AC11 Abstract classes No hay clases. Enunciado subido como propuesto.
Jueves 24 AC12 Manejo de excepciones
Martes 29 AC13 Testing con Unittest

Octubre

Día Evento Contenido Información adicional
Jueves 1 AC14 Testing con PyTest ¡Instalen Pytest!
Martes 6 AC15 Threading básico
Miércoles 7 T03 Testing y Exceptiones 23:59 - Deadline
Jueves 8 AC16 Threading avanzado
Martes 13 AC17 Simulación
Jueves 15 AC18 Simulación con SimPy Instalen SimPy
Martes 20 AC19 Interfaces Gráficas Instalen PyQt4
Jueves 22 AC20 Interfaces Gráficas con QtDesigner Asegúrense de tener instalado el programa
Lunes 26 T04 Simulación 23:59 - Deadline
Martes 27 AC21 I/O Material I/O incluyendo serialización, sin bytearrays
Jueves 29 AC22 I/O Principalmente bytearrays

Noviembre

Día Evento Contenido Información adicional
Martes 3 AC23 I/O Serialización
Jueves 5 AC24 Networking
Lunes 9 T05 Threading e Interfaces Gráficas 23:59 - Deadline
Martes 10 AC25 Networking Tratará los mismos contenidos de la actividad anterior
Jueves 12 AC26 Networking Tratará todo lo restante de esta materia
Viernes 13 I2 Próximamente más información 18:30 - Salas: Sec1: _ , Sec2: _
Martes 17 AC27 WebService Orientado solo al cliente, no al servidor
Sábado 28 T06 Networking y Serialización 23:59 - Deadline

Diciembre

Día Evento Contenido Información adicional
Jueves 3 Examen Toda la materia Salas: Sec1: _ , Sec2: _
Viernes 4 T07 Web services 23:59 - Deadline

Programa

Equipo

Profesores

Nombre Sección Github Email
Karim Pichara 1 @karimpb kpb@ing.puc.cl
Christian Pieringer 2 @cpieringer cppierin@uc.cl

Ayudantes Jefes

Nombre Área Github Email
Belén Saldías Coordinación @bcsaldias bcsaldias@uc.cl
Patricio López Docencia @mrpatiwi pelopez2@uc.cl
Jaime Castro Docencia @jecastro1 jecastro1@uc.cl
Bastián Mavrakis Tarea @bamavrakis bamavrakis@uc.cl
Marco Bucchi Tarea @mbucchi mabucchi@uc.cl

Ayudantes Mentores

Nombre Área Github Email
Antonio Ossa Docencia @aaossa aaossa@uc.cl
Ivania Donoso Docencia @indonoso indonoso@uc.cl
Felipe Garrido Docencia @figarrido figarrido@uc.cl
Matias Jünemann Tarea @mjjunemann mjjunemann@uc.cl
Carlos Santander Tarea @cjsantander cjsantander@uc.cl

Ayudantes TPD

Nombre Área Github Email
Ariel Seisdedos Docencia @robocop6 aeseisdedos@uc.cl
Francisco Valdés Docencia @fjvaldes1 fjvaldes1@uc.cl
Francisca Chadwick Docencia @fchadwick fchadwick@uc.cl
Iacopo Garizio Tarea @iacopogarizio igarizio@uc.cl
Enrique Urrutia Tarea @eiurrutia eiurrutia@uc.cl
Patricio Orrego Tarea @plorrego plorrego@uc.cl
Vicente Besa Tarea @vabesa vabesa@uc.cl
Rodolfo Palma Tarea @rpalmaotero rdpalma@uc.cl
Eduardo Vildosola Tarea @eavildosola eavildosola@uc.cl
Guillermo Figueroa Tarea @gafigueroa gafigueroa@uc.cl
Fernando Florenzano Tarea @fdoflorenzano faflorenzano@uc.cl
Juan Ignacio Marquez Tarea @imarquezc jgmarquez@uc.cl
Juan Pablo Schele Tarea @jpjschele jpschele@uc.cl
Antonio López Tarea @alopez7 alopez7@uc.cl

Descripcion del curso

Este curso enseña técnicas para diseñar, implementar, ejecutar y evaluar herramientas de software que resuelven problemas algorítmicos a partir de especificaciones detalladas. En particular, el curso enseña construcciones avanzadas de programación orientada a objetos, estructuras de datos fundamentales, diseño básico de algoritmos y técnicas de análisis.

Objetivos

  1. Descomponer problemas grandes para diseñar y estructurar sus soluciones.
  2. Crear diseños orientados a objetos para problemas simples y comunicar estos diseños a través de documentación externa y comentarios en el código.
  3. Aplicar conceptos de orientación a objetos (herencia, polimorfismo, interfaces) y estructuras de datos fundamentales (listas ligadas, stacks, colas, árboles binarios y tablas de hash), para diseñar y escribir programas complejos en el lenguaje de programación Python, pudiendo extender este conocimiento a distintos lenguajes.
  4. Usar herramientas de programación comunes (debuggers y sistemas de control de versiones); técnicas de programación (bibliotecas de programación orientada a objetos y pruebas unitarias); y un entorno de desarrollo de software para editar, compilar, y depurar programas.
  5. Generar software desde cero, con código de alto nivel, de fácil re­utilización, actualización y mantenimiento. Incluyendo interfaces gráficas significativas, totalmente funcionales.

Contenidos

  • Programación Orientada a Objetos:
    • Objetos
    • Herencia
    • Polimorfismo
    • Herencia múltiple
    • Propiedades.
  • Estructuras de Datos:
    • Árboles
    • Diccionarios
    • Colas
    • Stacks
    • Sets
  • Funciones de Python y Programación Funcional:
    • Algunas funciones especiales de Python
    • Comprensión de listas
    • Iterables e iteradores
    • Generadores
    • Funciones lambda
    • Map
    • Reduce
    • Filter
    • Decoradores
  • Meta Clases:
    • Comprender la lógica detrás de la construcción y creación de clases
  • Clases Abstractas:
    • Herencia a partir de clases no instanciables
  • Manejo de Excepciones:
    • ​Tipos de excepciones/errores y cómo controlarlos
  • Testing:
    • Tests unitarios en pytest
  • Threading:
    • Creación y sincronización de threads
    • Concurrencia.
  • Simulación:
    • Introducción a la simulación y SimPy
  • Interfaces Gráficas:
    • Introducción a las interfaces gráficas usando PyQt4
  • I/O:
    • Bytes
    • Serialización
    • Audio
    • Imagen
  • Networking:
    • ​Sockets, cliente, servidor
  • Webservices:
    • Expresiones regulares
    • Uso de servicios REST

Metodologia

  • Módulos semanales:
    • Cátedra: 2
    • Ayudantía/Laboratorio 1

El curso se realiza utilizando metodologías de enseñanza teóricas-prácticas centradas en el alumno que permitan a los estudiantes desarrollar las competencias definidas en los objetivos del curso, tanto en cátedras como en ayudantías.

Este curso está diseñado de forma tal que el alumno dedique al estudio personal un promedio de 6 hrs. a la semana.

Evaluacion

Las evaluaciones serán por medio de actividades prácticas en clases, controles, tareas, 2 Interrogaciones y un Examen. La nota final del curso (NF) se calculará como:

NF = 0.2 * I + 0.2 * E + 0.3 * T + 0.2 * AC + 0.1 * C

Donde I es el promedio de las interrogaciones, E es la nota del Examen, T es el promedio de las tareas, AC es el promedio de las actividades en clases y C es el promedio de los controles. Durante el semestre NO se borrará ninguna evaluación, tampoco existe la posibilidad de ser eximido del Examen final.

  • Durante el semestre NO se borrará ninguna evaluación. Tampoco existe la posibilidad de ser eximido del Examen final.
  • Las tareas son reprobatorias. Si la nota en las tareas, T < 3.95000, NF = NT.
  • Solo se aproximará la nota final NF. Todo el resto de las notas serán usadas con dos decimales.
  • La inasistencia a una de las interrogaciones (I) podrá ser reemplazada por la nota del examen. Solo se podrá faltar a una de las interrogaciones y esta deberá ser justificada con autorización de la Dirección de Pregrado. No se puede faltar al examen.

Fechas Interrogaciones

  • Interrogación 1: lunes 21 de Septiembre, 18:30 hrs .
  • Interrogación 2: viernes 13 de Noviembre, 18:30 hrs.
  • Examen: jueves 3 de Diciembre

Politica de integridad academica

Los alumnos de la Escuela de Ingeniería de la Pontificia Universidad Católica de Chile deben mantener un comportamiento acorde a la Declaración de Principios de la Universidad. En particular, se espera que mantengan altos estándares de honestidad académica. Cualquier acto deshonesto o fraude académico está prohibido; los alumnos que incurran en este tipo de acciones se exponen a un Procedimiento Sumario. Es responsabilidad de cada alumno conocer y respetar el documento sobre Integridad Académica publicado por la Dirección de Docencia de la Escuela de Ingeniería (disponible en SIDING). Específicamente, para los cursos del Departamento de Ciencia de la Computación, rige obligatoriamente la siguiente política de integridad académica. Todo trabajo presentado por un alumno para los efectos de la evaluación de un curso debe ser hecho individualmente por el alumno, sin apoyo en material de terceros. Por “trabajo” se entiende en general las interrogaciones escritas, las tareas de programación u otras, los trabajos de laboratorio, los proyectos, el examen, entre otros. En particular, si un alumno copia un trabajo, o si a un alumno se le prueba que compró o intentó comprar un trabajo, obtendrá nota final 1.1 en el curso y se solicitará a la Dirección de Docencia de la Escuela de Ingeniería que no le permita retirar el curso de la carga académica semestral. Por “copia” se entiende incluir en el trabajo presentado como propio, partes hechas por otra persona. En caso que corresponda a “copia” a otros alumnos, la sanción anterior se aplicará a todos los involucrados. En todos los casos, se informará a la Dirección de Docencia de la Escuela de Ingeniería para que tome sanciones adicionales si lo estima conveniente. Obviamente, está permitido usar material disponible públicamente, por ejemplo, libros o contenidos tomados de Internet, siempre y cuando se incluya la referencia correspondiente. Lo anterior se entiende como complemento al Reglamento del Alumno de la Pontificia Universidad Católica de Chile*. Por ello, es posible pedir a la Universidad la aplicación de sanciones adicionales especificadas en dicho reglamento.

Wiki

Toda la información que subiremos se encontrará en la Wiki del repositorio.

Guias

Para hacer el proceso del setup lo más estandarizado posible, hemos creado guías de instalación para las tres principales plaraformas. Están en la Wiki, puedes acceder inmediatamente por aquí:

Git

Cada guía tiene un fragmento de introducción a git para la respectiva plataforma.

Te recomendamos partir con este curso gratuito de CodeShool: Try Git

También puedes usar la aplicación oficial de Github:

O esta otra alternativa más compleja:

Si bien las aplicaciones con interfaces gráficas son fáciles de usar. Es recomendable acostumbrarse a usar la linea de comandos para uso diario, para git y para los administradores de paquetes.

Foro

La página de Issues se utilizará como foro para preguntas.

Procedimiento

Tanto al publicar entradas como al comentar, se debe atenerse a las normas del curso, además debes utilizar Markdown cuando sea necesario. Por ejemplo, cuando se necesita mostrar código o mensajes de error.

Antes de postear:

  • Haber buscado exhaustivamente una solución al problema y seguir sin encontrar una respuesta.
  • Entrar al foro del curso: Issues.
  • Buscar si alguien tiene la misma pregunta o problema.
    • Si encuentras un post marcado como resuelto, pero no te satisface la respuesta, puedes comentar la issue y volver a abrirla.
  • En caso de no encontrar un post que te sirva, lo creamos presionando New issue.
  • Escribir una entrada explicando bien el problema o pregunta.
  • Debes atenerte a las normas del curso. En caso contrario puedes ser acusado de facilitación de copia.
  • Publicar.

Una vez resuelto el problema, dar las gracias y cerrar la issue.

Dentro de Issues, las entradas se pueden etiquetar dentro de ciertas categorías predefinidas para mantener el orden y facilitar búsquedas. Una entrada puede tener múltiples etiquetas. Los ayudantes nos encargaremos de ir etiquetando las preguntas en el foro.

  • Material: para solicitar material que no haya sido subido al repositorio o comunicar algún error encontrado.
  • Actividades: Relacionado con las actividades en clase, ya sea sobre las notas, problemas de enunciado o dudas sobre estas.
  • Código: Para preguntar sobre fragmentos de código, guía de estilo PEP8 o sobre citación de código.
  • Tarea n: Preguntas sobre el enunciado de la tarea número n.
  • Interrogación: Preguntas sobre las fechas, contenido, periodos de recorrección de las interrogaciones y examen.
  • Materia: Preguntas sobre conceptos y/o temas vistos en clases o fuera de esta.
  • Duplicada: Pregunta repetida, se hará referencia a la pregunta original.
  • Git: Preguntas relacionadas con git o Github.
  • Inválida: La pregunta no cumple los estándares o viola el procedimiento descrito abajo.
  • Meta-pregunta: Preguntas sobre cómo y qué preguntar.
  • Tengo un error: Para preguntar sobre posibles soluciones a errores o bugs en códigos.