Skip to content

IIC2233-2016-02/Syllabus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

Agosto

Día Evento Contenido Información adicional
Jueves 04 AC00 Primer día de clases
Lunes 08 Ayudantía 1 Cómo pasar el curso
Jueves 11 AC01 OOP + properties
Lunes 15 - Feriado 🎉
Jueves 18 AC02 Herencia - Polimorfismo - Abstract
Lunes 22 Ayudantía 2 Estructuras de Datos 101
Jueves 25 AC03 Estructuras de Datos: tuplas, listas, sets, diccionarios
Lunes 29 Ayudantía 3 Estructuras de Datos

Septiembre

Día Evento Contenido Información adicional
Jueves 1 AC04 Estructuras de Datos
Lunes 5 Ayudantía 4 Programación Funcional
Jueves 8 AC05 Programacion Funcional Decoradores NO
Lunes 12 Ayudantía 5 Decoradores
Jueves 15 AC06 Decoradores
Lunes 19 - Feriado 🎉
Jueves 22 AC07 Metaclases
Lunes 26 Ayudantia 6 Excepciones + Testing
Jueves 29 AC08 Excepciones + Testing

Octubre

Día Evento Contenido Información adicional
Lunes 3 Ayudantía 7 Simulación DES
Jueves 6 AC09 Simulación DES
Lunes 10 - Feriado 🎉
Jueves 13 AC10 Threading
Lunes 17 Ayudantía 8 Interfaces gráficas
Jueves 20 AC11 Interfaces gráficas
Lunes 24 Ayudantía 9 I/O Archivos
Jueves 27 AC12 I/O Archivos
Lunes 31 - Feriado 🎉

Noviembre

Día Evento Contenido Información adicional
Jueves 3 AC13 I/O Serialización
Lunes 7 Ayudantía 10 Networking
Jueves 10 AC14 Networking
Lunes 14 Ayudantía 11 Webservices + Regex
Jueves 17 AC15 Webservices + Regex

Diciembre

Día Evento Contenido Información adicional
Viernes 2 15:30 Final Exam Por anunciar Salas: Por anunciar

Notas

Todas las notas serán publicadas en este 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
Cristian Ruz 1 @cruz cruz@uc.cl
Christian Pieringer 2 @cpieringer cppierin@uc.cl
Ivania Donoso 3 @indonoso indonoso@uc.cl

Ayudantes Jefes

Nombre Área Github Email
Bastián Mavrakis Coordinación @bamavrakis bamavrakis@uc.cl
Antonio Ossa Docencia @aaossa aaossa@uc.cl
Matías Jünemann Tareas @mjjunemann mjjunemann@uc.cl
Florencia Barrios Tareas @flobarrios fbarrios1@uc.cl

Ayudantes Mentores

Nombre Área Github Email
Florencia Valladares Docencia @fvr1 fvalladares1@uc.cl
María José Hidalgo Docencia @cotehidalgov mjhidalgo@uc.cl
Benjamín Kramm Docencia @btkramm btkramm@uc.cl
Freddie Venegas Docencia @fgvenegas fgvenegas@uc.cl
Rodolfo Palma Tareas @rpalmaotero rdpalma@uc.cl
Felipe Pezoa Tareas @mainscientist fipezoa@uc.cl

Ayudantes TPD

Nombre Área Github Email
Anders Skog Docencia @andersskog aoskog@uc.cl
Joaquín Tagle Docencia @jtagle2 jtagle2@uc.cl
Juan Cortés Docencia @jicortes2 jicortes2@uc.cl
Nicolás Falconi Docencia @nigfasa nifalconi@uc.cl
Matías Andrade Docencia @mandrade2 mandrade2@uc.cl
Hernán Valdivieso Tareas @Hernan4444 hfvaldivieso@uc.cl
Isidora Palma Tareas @isipalma impalma@uc.cl
Matias Eynaudi Tareas @Mieynaudi mieynaudi@uc.cl
Manuel Silva Tareas @ManuelSIlvaCav mesilva2@uc.cl
Javier Montoya Tareas @jgmontoya jgmontoya@uc.cl
Cristian Cortés Tareas @criscv94 cacortes1@uc.cl
Fernando Pieressa Tareas @FernandoPieressa fapieressa@uc.cl
Andrés Mardones Tareas @agmardones agmardones@uc.cl
Stephanie Chau Tareas @stephichau schau@uc.cl

Descripción 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 complejos para diseñar y estructurar sus soluciones.
  2. Crear diseños orientados a objetos 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 aplicaciones en el lenguaje de programación Python, pudiendo extender este conocimiento a distintos lenguajes.
  4. Fomentar el uso de:
    • herramientas de programación estándares para el desarrollo de software como entornos de desarrollo, debuggers y sistemas de control de versiones;
    • técnicas de programación como bibliotecas de programación orientada a objetos y pruebas unitarias;
    • y entornos 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 el uso interfaces gráficas 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
  • Webservices:
    • REST API
    • Regex

Evaluación

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

    NC = 0.2 * FE + 0.4 * T + 0.25 * AC + 0.15 * C

    Donde 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.

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

    • 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
  3. 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.

  4. La inasistencia a alguna de las actividades en clases se evalúa con nota 1.0, pero para el cálculo final de este ítem se eliminará la nota más baja

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

  6. Durante el semestre NO se borrará ninguna otra evaluación, lo que incluye T, AC, FE, C.

  7. El Examen final es obligatorio, no hay eximición. La inasistencia al Examen 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.

Semestres Anteriores

Puedes ver los syllabus de los semestres anteriores en: