Este curso entrega los fundamentos necesarios para desarrollar software orientado a objetos fácil de entender, extender y mantener en el tiempo. En particular, enseña a diseñar y programar buenos objetos, a usar la herencia sólo cuando ésta provee ventajas reales, a integrar objetos para resolver un problema complejo, a diseñar y resolver problemas usando patrones de diseño, a evaluar diseños usando métricas y a enfrentar desarrollo de software de pequeña y mediana complejidad usando metodologías estándares. Al final de este curso el alumno debe ser capaz de: * Entender los conceptos más importantes de las etapas de análisis, diseño y programación orientada a objetos y aplicarlos correctamente en el desarrollo de software de pequeña y mediana complejidad. * Diseñar y programar objetos usando “buenos” objetos * Usar en concepto de herencia de manera apropiada * Usar y aplicar unit test * Reconocer y aplicar patrones de diseño * Programar en distintos lenguajes que soportan orientación a objetos tales como Java y C# * Conocer y aplicar métricas para identificar problemas de diseño en programas orientados a objetos. ------- Reglas Entrega Tareas: El ramo tiene 3 tareas, más ejercicios en clase. * Recuerde que su tarea es individual y las copias serán penalizadas con nota 1 * La entrega se debe hacer vía U-Cursos hasta las 23:59 del día de entrega de la tarea 1 y usando bitbucket.org para la tarea 2 y 3