Programación Orientada a Objetos
El curso de programación Orientada a Objetos y Programación presenta los conceptos de diseño y programación orientada a objetos (OO). El curso se caracteriza por usar la aproximación “Objetos Primero”, la cual es la base del paradigma OO. Adicionalmente se abordarán temas de programación segura y programación orientada a eventos. Se introducen también nociones de ingeniería de software tales como ciclos de vida, diagramas UML, patrones de diseño y PSP (Personal Software Process).
Al finalizar el curso los participantes podrán: Identificar las características del paradigma orientado a objetos. Modelar un problema en el paradigma orientado a objetos. Describir los conceptos básicos de ingeniería de software. Analizar, diseñar e implementar una solución a un problema de mediana escala utilizando el paradigma OO.
* Habilidades específicas: Lenguaje de Programación: C++. Ambiente de Desarrollo: Eclipse. Sistema Operativo: Linux.
Sesión | Horas teóricas | Práct. acomp. | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
1 | 2 | 2 | Presentación del curso | Familiaridad | [1,3] |
Introducción al modelo Orientado a objetos | |||||
2 | 2 | Clases y objetos: descomposición en objetos con estado y comportamiento | Evaluación | [3,5,6] | |
3 | 2 | Clases Abstractas | Evaluación | [3,5,6] | |
4-5 | 4 | Jerarquía de clases: subclases, herencia, agrupación de clases, relación entre subtipos y herencia | Evaluación | [3,5,6] | |
6 | 2 | 2 | Sobrecarga y anulación de operadores | Evaluación | [3,5,6] |
7-8 | 4 | Polimorfismo: Polimorfismo con subtipos, “cast” implícito en lenguajes tipados. Comparación entre el polimorfismo ad hoc (sobrecarga) y el polimorfismo por subtipos | Evaluación | [3,5,6] | |
Despacho dinámico: definición del método de llamado. | |||||
9-10 | 4 | Uso de clases contenedoras, iteradores y otros componentes. | Evaluación | [3,5,6] | |
11 | 2 | imposición de invariantes durante el desarrollo y el mantenimiento de código vs Posponer decisión de tipo en prototipos de manera que permita tanto patrones de codificación flexibles como creación de colecciones heterogéneas | Evaluación | [3,5,6] |
Total de Horas: Teóricas 22. Prácticas 4.
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
12 | 2 | 2 | Principios básicos. Mediación completa. Economía de mecanismo (Reduciendo la base de computación segura, minimizando la superficie de ataque). Practicas de codificación: Técnicas, dialectos/patrones, mecanismos para construir programas de calidad Codificación defensiva, Codificación segura, manejo de excepciones para hacer programas más robustos y más tolerante a fallas | Uso | [9, 10] |
13 | 2 | 2 | Problemas potenciales de seguridad en los programas: Desbordamientos de Buffer, enteros y en otros tipo. Condiciones de carrera. Inicialización impropia, incluyendo selección de privilegios. Revisión de entradas, Asumiendo éxitos y corrección, asumiendo validación. Mecanismos para detectar y mitigar errores y saneamiento en entradas y datos. | Uso | [9,10] |
14 | 2 | Validación con datos al azar (Fuzzing). Estándares de codificación | Familiaridad | [9, 10] | |
15 | 2 | Lenguajes con tipos seguros y selección del lenguaje de programación. Concepto de verificación y validación. Inspección, revisión y auditoría. Evitando mal uso del código vs permitir más reuso del código. Detectar programas incompletos vs Permitir que programas incompletos corran. Detección de errores tempranos vs detección de errores tardío o evadirlos | Familiaridad | [9,10] |
Total de Horas: Teóricas 8. Prácticas 4
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
16 | 2 | Introducción al proceso de modelado de objetos. Paradigmas de diseño: estructurado (descomposición funcional, análisis y diseño O.O, etc..). Programación individual vs programación en gran escala. Consideraciones de los distintos niveles de los sistemas. | Uso | [4, 8, 9 ] | |
17 | 2 | 2 | Principios de diseño de sistemas: niveles de abstracción (diseño de arquitectura y diseño detallado), separación de responsabilidades, ocultamiento de información, cohesión y acoplamiento, reuso de estructuras estándar) | Uso | [4, 8, 9 ] |
18 | 2 | Descripción funcional de requisitos (caso de usos, historias de usuarios, etc..). Propiedades de los requisitos: consistencia, validez, completitud y viabilidad. Herramientas para el modelado del análisis y el diseño. Describiendo la información del sistema usando por ejemplo diagramas de clases o el modelo entidad relación. | Familiaridad | [4, 8, 9 ] | |
19 | 2 | Diseño conducido por eventos, diseño a nivel de componentes, centrado en la estructura de datos, orientado a funciones, orientado a servicios. | Familiaridad | [4, 8, 9 ] | |
20 | 2 | Diseño de software de modelos estructurales y de comportamiento. | Familiaridad | [4, 8, 9 ] | |
21 | 2 | 2 | Patrones de diseño | Familiaridad | [4, 8, 9 ] |
22 | 2 | El uso de componentes en diseño: Selección de componentes, diseño, adaptación y ensamblaje de componente y patrones, componentes y objetos (construir una GUI usando un conjunto estándar de widget) | Familiaridad | [4, 8, 9 ] | |
23 | 2 | Estimación del esfuerzo a nivel personal(PSP) | Familiaridad | [4, 8, 9 ] |
Total de Horas: Teóricas 16. Prácticas 4
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
24-25 | 2 | Patrones de arquitectura de Software, I,e., Model-View controller; command objects, online, offline | Uso | [7, 10] | |
26-27 | 4 | 2 | Usos canónicos tales como GUIs dispositivos móviles, robots, servidores: - Definiendo el evento Manejador / Escuchas. - Ciclo principal del evento que no está bajo el control del programador del manejador de eventos. - Eventos externos y eventos generados por el programa. | Evaluación | [7, 10] |
28 | 2 | Widgets y bibliotecas de widgets | Uso | [7, 10] | |
29-30 | 4 | 1 | Uso de estándares APIs para la construcción de UIS y exhibición de estándares de formatos de medios | Familiaridad | [7, 10] |
Total de Horas: Teóricas 14. Prácticas 3
(A) La habilidad para aplicar conocimientos de matemáticas, ciencias e ingeniería.
(B) La habilidad para analizar un problema e identificar los requerimientos necesarios para su definición y solución.
(C) La habilidad para diseñar, implementar y evaluar procesos y sistemas computacionales.
(D) La habilidad para funcionar en equipos de trabajo.
(E) El entendimiento de la responsabilidad profesional y ética.
(F) La habilidad para comunicarse efectivamente.
(G) La habilidad para analizar los impactos de la computación y la ingeniería en las personas, organizaciones y la sociedad.
(H) El reconocimiento de la necesidad de, y la habilidad para, continuar con el desarrollo profesional.
(I) La habilidad para usar las técnicas, destrezas y herramientas modernas para la práctica de la computación.
(J) La habilidad para aplicar los fundamentos y principios de las matemáticas y de la computación en el modelamiento y diseño de sistemas computacionales de manera que se demuestre comprensión de las ventajas y desventajas en las decisiones de diseño.
(K) La habilidad para aplicar los principios de diseño y desarrollo de software en la construcción de sistemas de diferente complejidad.
Resultados de Programa | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | H | I | J | K | |
Relevancia | 1 | 2 | 3 | 1 | 1 | 2 | 5 |
Escala: (1) baja relevancia - (5) alta relevancia.
Resultados del Programa | Indicadores de Desempeño | Objetivos/Contenido del Curso | Actividades de aprendizaje | Instrumentos de medición |
---|---|---|---|---|
(A) Aplicación de Conocimientos | (A1) Identificar los fundamentos científicos y los principios de ingeniería que rigen un proceso o sistema. (Conocimiento) (A2) Resolver problemas relacionados con la disciplina y otras áreas por medio de la utilización de conocimientos, modelos y formalismos de las ciencias de la computación, las matemáticas y la ingeniería. (Aplicación) | Capítulos 2,3,4 | Exposiciones del profesor, solución de ejercicios y lecturas | Proyectos y tareas |
(B) Análisis de problemas y requerimientos | (B1) Describir procesos de manera declarativa ignorando los detalles de su implementación. (Comprensión). | Capítulo 3 | Exposiciones del profesor, solución de ejercicios y lecturas | Proyecto y examen |
(C) Diseño | (C1) Utilizar estándares de codificación en la implementación de componentes de software. (Aplicación). (C2) Identificar componentes, interacciones, relaciones e interfaces entre componentes. (Análisis). (C3) Diseñar procesos y componentes de software haciendo uso de la notación, técnicas y herramientas adecuadas. (Síntesis). (C4) Evaluar un componente de software de acuerdo a su complejidad temporal y espacial. (Evaluación). | Capítulos 3,4 | Solución de ejercicios y lecturas | Proyecto, tareas, exámenes |
(D) Trabajo en equipo | (D2) Participar en tareas y en la toma de decisiones. (Respuesta - Afectivo). (D4) Definir tareas, roles y responsabilidades. (Aplicación). | Capítulo 3,4 | Exposiciones del profesor, solución de ejercicios y lecturas | Proyectos, talleres |
(F) Comunicación efectiva | (F3) Utilizar recursos gráficos para comunicar y expresar una idea. (Aplicación). | Capítulo 3 | Proyectos y tareas | Presentaciones orales y reportes escritos |
(H) Desarrollo profesional. | (H2) Aplicar nuevo conocimiento para resolver un problema o desarrollar una solución. (Aplicación). | Capítulo 1,2,3,4 | Tareas | Tareas |
(I) Uso de herramientas y técnicas | (I1) Utilizar herramientas de desarrollo de software. (Aplicación). (I4) Demostrar flexibilidad para adaptarse a diferentes paradigmas y lenguajes de programación. (Valuación). | Capítulos 1,2,4 | Laboratorios y lecturas | Proyecto y tareas |
(J) Modelamiento y diseño de sistemas computacionales | (J1) Reconocer la importancia del modelamiento cuando se resuelve un problema. (Compresión). | Capítulo 3 | Lecturas | Proyectos y tareas |
(K) Desarrollo de software | (K2) Implementar e integrar componentes de software respetando los criterios de diseño. (Aplicación). (K3) Establecer invariantes y propiedades de componentes de software. (Análisis). | Capítulos 1,2,3,4 | Talleres en clase | Proyectos y tareas |
Resultados de Programa | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | H | I | J | K | |
Ciudadanía | |||||||||||
Comunicación escrita | |||||||||||
Lectura crítica | |||||||||||
Inglés | |||||||||||
Razonamiento cuantitativo | E | E | E | E | E | E |
La Carrera de Ingeniería de Sistemas y Computación plantea los siguientes objetivos educacionales, El estudiante graduado de la carrera será capaz de:
Resultados de Programa | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | H | I | J | K | |
Objetivo 1 | |||||||||||
Objetivo 2 | |||||||||||
Objetivo 3 | |||||||||||
Objetivo 4 | |||||||||||
Objetivo 5 |
Instrumento | Porcentaje | A | B | C | D | E | F | G | H | I | J | K |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Parciales | 60% | 5 % | 5 % | 10 % | 5 % | 5 % | 10 % | 20 % | ||||
Tarea y talleres | 10% | 5 % | 5 % | |||||||||
Proyecto(s) | 30% | 10 % | 10% | 10 % |
Salón de clase con computador y proyector. Laboratorio de Ingeniería de Sistemas y Computación.