Nombre del curso

Programación Orientada a Objetos

Información Básica

  • Créditos: 3
  • Horas de trabajo acompañado: 4 horas por semana
  • Horas de taller : 2 horas cada dos semanas
  • Horas de trabajo independiente: 3 horas por semana
  • Pre-requisitos:
  • Tipo de curso: Núcleo de Formación Fundamental.

Descripción del Curso

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

Objetivos

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.

Se desarrollan competencias en

* Habilidades específicas: Lenguaje de Programación: C++. Ambiente de Desarrollo: Eclipse. Sistema Operativo: Linux.

  • Conceptos Fundamentales de Computación: Mecanismos de Abstracción, Programación Orientada a Objetos, Diseño de Software, Uso de APIs, Herramientas y Ambientes para Desarrollo de Software, Procesos de Software, Programación Orientada por Eventos.
  • Competencias Generales:
    • Análisis de problemas (desde diferentes perspectivas)
    • Diseño de Soluciones (análisis de alternativas de solución)
    • Análisis-Diseño-Creación-Verificación/pruebas
    • Depuración
    • Aproximación a un modelo a través del ensayo y el error.
    • Introducir la cultura de la normalización
    • Habilidades de comunicación: oral, escrita, escucha.
    • Experiencia significativa en el desarrollo de proyectos
    • Habilidades para trabajar en grupo, habilidades de colaboración
    • Motivación, iniciativa, flexibilidad, adaptabilidad, auto-confianza
    • Mantenerse actualizado, aprendizaje continúo, auto-aprendizaje.

Contenido

Capítulo 1: El modelo orientado a objetos

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.

Capítulo 2: Programación segura

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

Capítulo 3: Análisis y diseño

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

Capítulo 4: Programación reactiva y dirigida por eventos

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

Integración Curricular

Resultados de Programa (ABET)

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

Relevancia del curso con los resultados de programa

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.

Integración de objetivos, contenido y metodología del curso

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

Contribución al Desarrollo de Competencias (CNA)

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

Contribución a los objetivos educacionales

La Carrera de Ingeniería de Sistemas y Computación plantea los siguientes objetivos educacionales, El estudiante graduado de la carrera será capaz de:

  1. Ejercitar la práctica de la Ingeniería de Sistemas y Computación profesionalmente.
  2. Diseñar y operar sistemas de computación que contribuyen a la solución de problemas relacionados a la disciplina, otra área de la ciencia y la ingeniería u otras disciplinas.
  3. Contribuir al bienestar de las comunidades desde posiciones prominentes en la industria, academia, sector público o como un emprendedor.
  4. Ser distinguido por su bases sólidas en computación, su sentido de ciudadanía responsable, su profesionalismo y liderazgo.
  5. Continuar su desarrollo profesional o involucrarse en estudios de posgrado.
Resultados de Programa
A B C D E F G H I J K
Objetivo 1
Objetivo 2
Objetivo 3
Objetivo 4
Objetivo 5

Reglas del curso

Calificación y Balance de Evaluación del Curso

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 %

Uso de material en exámenes

Asistencia

Bibliografía

  1. Grady Booch y otros, Object-Oriented Analysis and Design with Applications (3rd Edition). Pearson Education, 2007.
  2. Rebecca Wirfs-Brock, Brian Wilkerson, Lauren Wiener, Designing Object Oriented Software. Prentice Hall 1990, ISBN 0136298257
    Signatura Biblioteca Javeriana: 005.1 W798d
  3. Timothy A Budd. An Introduction to Object-Oriented Programming. Addison Wesley Longman. 2002.
  4. Rumbaugh, Jacobson y Booch. El Lenguaje Unificado de Modelado. Manual de Referencia.Addison Wesley. 1999.
    Signatura Biblioteca Javeriana: 005.1R936u e1
  5. David J. Barnes y Michael Kölling. Programación Orientada a Objetos con Java. Una Introducción Práctica usando BlueJ. 3ra Edición. Pearson-Prentice Hall. 2007.
    En la Biblioteca Javeriana lo pueden encontrar como Objects first with Java : a practical introduction using BlueJ. - 3ed.. Signatura: 005.117B261o e1
  6. Bjarnes Stroustrup, The C++ Programming language, fourth Edition, Addison-wesley.2013
  7. Alan Ezust and Paul Ezust, An Introduction to Design Patterns in C++ with Qt. 2nd Edition. Pearson-Prentice Hall. 2012
  8. Service-Oriented Architecture : Concepts, Technology, and Design. Thomas Erl. Pearson.
  9. Software Architecture in Practice. Len Bass, Paul Clements,Rick Kazman.2012.
  10. Matt Bishop, introduction to Computer Security. Prentice All.

Instalaciones

Salón de clase con computador y proyector. Laboratorio de Ingeniería de Sistemas y Computación.

Material de este semestre

 
materias/programacionorientadaobjetos.txt · Última modificación: 2016/09/04 12:26 por anavarro
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki