Skip to content

IIC2233-2016-1/syllabus

Repository files navigation

IIC2233 - Programación Avanzada

Tabla de contenidos

Calendario

Todas las actividades (AC) son evaluadas. La ausencia a clases implica un 1.0 en las evaluaciones de ese día.

Marzo

Día Evento Contenido Información adicional
Jueves 03 AC01 Primer día de clases. Modelación OOP
Lunes 07 Ayudantía 01 Ayudantía de GIT, o cómo entregar los trabajos en este curso
Jueves 10 AC02 Herencia y polimorfismo. Clases abstractas Primer día de uso de GIT obligatorio
Lunes 14 Ayudantía 02 Tips para el curso. Módulos.
Jueves 17 AC03 Estructuras de datos. Properties No entra la parte de árboles
Lunes 21 Ayudantía 03 Estructuras de Datos y sala de ayuda Tarea 1
Lunes 28 T01 OOP Hora: 23:59
Jueves 31 AC04 Árboles y listas ligadas

Abril

Día Evento Contenido Información adicional
Lunes 4 Ayudantía 04 Funcional y otros temas importantes
Jueves 7 AC05 Functional entero sin decoradores
Lunes 11 Ayudantía 05 Decoradores Solo en la sala B17
Miércoles 13 T02 EDD Hora: 23:59
Jueves 14 AC06 Decoradores
Lunes 18 Ayudantía 06 Metaclases No presencial
Jueves 21 AC07 Metaclases
Lunes 25 Ayudantía 07 Manejo de Excepciones y Testing con Unittest
Jueves 28 AC08 Manejo de Excepciones y Testing con Unittest

Mayo

Día Evento Contenido Información adicional
Lunes 2 Ayudantía 08 Simulación
Miércoles 4 T03 Funcional Hora: 23:59
Jueves 5 AC09 Simulación DES
Lunes 9 Ayudantía 09 Threading
Jueves 12 AC10 Threading
Lunes 16 Ayudantía 10 Repaso para el Midterm  
Martes 17 Midterm Test Todo hasta Threading (incluyendo lecturas)
Jueves 19 AC11 Interfaces gráficas (PyQt4) Probar que esté bien instalado con import PyQt4 antes de la actividad 
Viernes 20 T04 Simulación, Testing y Manejo de Excepciones Hora: 23:59
Lunes 23 Ayudantía 11 PyQt4 y QtDesigner
Jueves 26 AC12 Interfaces gráficas (QtDesigner)
Lunes 30 Ayudantía 12 I/O: Manejo de strings y Bytes

Junio

Día Evento Contenido Información adicional
Jueves 2 AC13 Input-Output {String + Bytes}
Lunes 6 Ayudantía 13 Serialización
Jueves 9 AC14 Input-Output {Serialización + Json}
Lunes 13 Ayudantía 14 Networking

Julio

Día Evento Contenido Información adicional
Martes 5 Final Exam Por anunciar Hora: 9:15, Salas por anunciar

Notas

Todas las notas serán publicadas en un documento de Google Sheets.

Para acceder deben haber iniciado sesión con su email UC.

Extracto del programa del curso

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
Jaime Castro Coordinación @jecastro1 jecastro1@uc.cl
Belén Saldías Coordinación @bcsaldias bcsaldias@uc.cl
Ivania Donoso Docencia @indonoso indonoso@uc.cl
Antonio Ossa Docencia @aaossa aaossa@uc.cl
Matías Jünemann Tareas @mjjunemann mjjunemann@uc.cl
Bastián Mavrakis Tareas @bamavrakis bamavrakis@uc.cl

Ayudantes Mentores

Nombre Área Github Email
Ariel Seisdedos Docencia @robocop6 aeseisdedos@uc.cl
Guillermo Figueroa Tareas @gafigueroa gafigueroa@uc.cl
Fernando Florenzano Tareas @fdoflorenzano faflorenzano@uc.cl
Rodolfo Palma Tareas @rpalmaotero rdpalma@uc.cl

Ayudantes TPD

Nombre Área Github Email
René Acuña Actividades @rtacuna rtacuna@uc.cl
María José Hidalgo Actividades @cotehidalgov mjhidalgo@uc.cl
Osvaldo Torres Actividades @oatorresuc oatorres@uc.cl
Florencia Valladares Actividades @fvr1 fvalladares1@uc.cl
Andrés Fernández Docencia @andresfdezc alfernandez@uc.cl
Benjamín Kramm Docencia @btkramm btkramm@uc.cl
Freddie Venegas Docencia @fgvenegas fgvenegas@uc.cl
Florencia Barrios Tareas @flobarrios fbarrios1@uc.cl
Germán Contreras Tareas @Geeermy glcontreras@uc.cl
Tamara Covacevich Tareas @tamycova tcovacevich@uc.cl
Nicolás Gebauer Tareas @negebauer negebauer@uc.cl
Felipe Matus Tareas @matusfelipe fgmatus@uc.cl
Felipe Pezoa Tareas @mainscientist fipezoa@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
    • Herencia múltiple
    • Polimorfismo
    • Clases Abstractas
    • Properties.
  • 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
  • Manejo de Excepciones:
    • Tipos de excepciones
    • Control de excepciones
  • Testing:
    • Tests unitarios en Unittest
  • Simulación:
    • Introducción a la simulación con eventos discretos
  • Threading:
    • Creación y sincronización de threads
    • Concurrencia
  • Interfaces Gráficas:
    • Introducción a las interfaces gráficas usando PyQt4
  • I/O:
    • Manejo de Strings
    • Bytes
    • Serialización binaria
    • Serialización en formato JSON
  • Networking:
    • ​Sockets, cliente, servidor

Evaluacion

Las evaluaciones serán efectuadas por medio de actividades prácticas en clases, controles (de materia y/o lecturas adicionales), tareas, un midterm test y un examen final. Se calculará la nota del curso NC como

NC = 0.15 * MT + 0.2 * FE + 0.3 * T + 0.25 * AC + 0.1 * C

Donde MT es la nota obtenida en el midterm test, FE es la nota del examen final, T es el promedio de las tareas, AC es el promedio de las actividades en clases sin incluir la peor de ellas, y C es el promedio de los controles.

Adicionalmente, para aprobar el curso el alumno debe cumplir con:

  • El promedio ponderado entre MT y FE debe ser mayor o igual a 3.500
  • AC debe ser mayor o igual a 3.700
  • T debe ser mayor o igual a 3.950

Si el alumno cumple con todas las condiciones mencionadas, la nota final del curso (NF) corresponde a NC. En caso contrario, NF es la nota mínimo entre los items no cumplidos.

Durante el semestre NO se borrará ninguna evaluación. Tampoco existe la posibilidad de ser eximido del Examen final.

  • Sin embargo, se tomará el promedio AC sin la peor actividad.
  • Además existe la posibilidad de que se anuncie una tarea recuperativa opcional1. Si ésta es realizada por el alumno, tiene la posibilidad de eliminar la peor de las tareas bajo ciertas condiciones que serán comunicadas oportunamente.

Solo se aproximará la nota final NF. Todo el resto de las notas serán usadas con dos decimales.

No se podrá faltar al midterm o el examen final. La inasistencia a cualquiera de ellos es reprobatoria.

Wiki

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

Foro

La página de Issues se utilizará como foro para preguntas. Visita la guía del foro para saber como utilizar esta herramienta.

Semestres Anteriores

Puedes ver los syllabus de los semestres anteriores en:

1: Se anunciará su realización o no realización antes del 1 de junio de 2016.