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

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