Download DESARROLLO DE SOFTWARE Grado en Ingeniero en
Document related concepts
Transcript
DESARROLLO DE SOFTWARE Grado en Ingeniero en Computadores Universidad de Alcalá Curso Académico 2010/11 Curso 1º – Cuatrimestre 2º GUÍA DOCENTE Nombre de la asignatura: Código: Titulación en la que se imparte: Departamento y Área de Conocimiento: DESARROLLO DE SOFTWARE 590000 IC CIENCIAS DE LA COMPUTACION Carácter: Créditos ECTS: FORMACION BASICA 6 Curso: 1º Profesorado: Horario de Tutoría: Idioma en el que se imparte: Español 1. PRESENTACIÓN La asignatura Desarrollo de Software pretende introducir a los alumnos en el paradigma de programación orientada a objetos. Prerrequisitos y Recomendaciones Es obligatorio haber cursado la asignatura de Fundamentos de Programación. 2. COMPETENCIAS Esta asignatura, y de forma más amplia la materia de la que forma parte, desarrolla en el alumno las siguientes competencias: Competencias de la materia 1. Conocer el concepto de dato como representación y medida de elementos del mundo real. 2. Conocer y exponer la estructura física y lógica de datos que representan números, caracteres, registros, ficheros. 3. Conocer los conceptos de clase, tipo abstracto de datos y objeto. 4. Conocer los fundamentos de la orientación a objetos y ser capaz identificar las diferencias entre la representación basada en objetos y los modelos de flujo de datos. 2 5. Desarrollar la habilidad de crear soluciones algorítmicas a problemas y ser capaz de representarla como programa u objetos. 6. Conocer la estrategia de implementación descendente (topdown). 7. Ser capaz de realizar una implementación mediante objetos 8. Conocer el diseño modular y los conceptos cohesión y acoplamiento. 9. Alcanzar una visión de sistema de la verificación y validación. 10. Conocer entornos de programación, herramientas de desarrollo y entornos gráficos de desarrollo, variados 11. Conocer los conceptos y técnicas de la manipulación de ficheros mediante ejemplos simples. 12. Conocer los conceptos de las estructuras abstractas de datos y su uso en programas y aplicaciones. 13. Conocer la resolución de problemas que impliquen uso de ficheros y bases de datos. 14. Conocer técnicas de desarrollo, diseño, prueba y depuración aplicadas a problemas. 15. Conocer las capacidades y limitaciones de los lenguajes de programación más comunes. 16. Describir la evolución de los lenguajes de programación los diferentes paradigmas disponibles hoy día y sus principales características 17. Comparar y contrastar entornos de ejecución interpretados y compilados, con sus ventajas y desventajas, así como la importancia de la abstracción en el contexto de las máquinas virtuales y comprender distintas realizaciones prácticas de dicho concepto. 18. Reconocer los modelos formales que sostienen la teoría del procesamiento de lenguajes, i.e., expresiones regulares, teoría de autómatas, y gramáticas. 19. Describir las distintas fases y algoritmos utilizados en la traducción y generación de código desde el programa fuente al ejecutable, incluidas las consideración en la traducción de código dependiente e independiente de la máquina 20. Introducir los conceptos de optimización de código, incluyendo las distintas posibilidades en la elección de código intermedio y fases de optimización. 21. Introducir los conceptos de tipos, ámbito y su comprobación (compatibilidad), en el procesamiento de lenguajes de programación 22. Comprender el concepto de tipo de dato y ser capaz de identificar las características principales de un sistema de tipos. 23. Conocer los fundamentos de la programación funcional y lógica identificando las ventajas e inconvenientes de cada paradigma. 24. Conocer los fundamentos de la programación distribuida, concurrente y paralela, sus algoritmos fundamentales y las ventajas e inconvenientes de cada paradigma. Competencias genéricas: Desarrollar aptitudes para la comunicación oral y escrita Desarrollar capacidad de análisis y síntesis 3 Desarrollar capacidad para la toma de decisiones Desarrollar métodos para la autoorganización y planificación del trabajo individual. Desarrollar métodos para el trabajo en equipo. Motivación por la calidad Competencias específicas: Desarrollar la habilidad de crear soluciones algorítmicas a problemas y ser capaz de representarla como programa orientado a objetos. Describir la evolución de los lenguajes de programación los diferentes paradigmas disponibles hoy día y sus principales características. Conocer las capacidades y limitaciones de los lenguajes de programación más comunes. Introducir los conceptos de tipos, ámbito y su comprobación (compatibilidad), en el procesamiento de lenguajes de programación. Describir las distintas fases y algoritmos utilizados en la traducción y generación de código desde el programa fuente al ejecutable, comprendiendo el concepto de máquina virtual. Conocer el diseño modular y los conceptos cohesión y acoplamiento. Comprender el concepto de tipo de dato y tipo abstracto de dato y ser capaz de identificar las características principales de un sistema de tipos. Ser capaz de realizar su implementación mediante objetos. Conocer los fundamentos de la orientación a objetos y ser capaz de identificar las diferencias entre la representación basada en objetos y los modelos de flujo de datos. Conocer los principios en los que se basa la orientación a objetos como abstracción, encapsulación, ocultamiento de la información, extensibilidad y reutilización. Conocer los conceptos básicos de la programación orientada a objetos como clase, objeto, herencia, interface, clase abstracta y polimorfismo Ser capaz de trabajar y programar con distintos entornos y herramientas de desarrollo. Conocer técnicas y metodologías de desarrollo: especificación de requisitos, análisis, diseño, prueba y depuración de aplicaciones orientadas a objetos. Conocer diferentes tipos de contenedores de objetos y ser capaz de aplicar algoritmos de ordenación y búsqueda sobre los mismos. Conocer la resolución de problemas que impliquen el uso de las capacidades de persistencia. 3. CONTENIDOS 1. Introducción a los lenguajes de programación: Historia de los lenguajes de programación, breve presentación de los distintos paradigmas. Comparación entre interpretes y compiladores; fases de la traducción de lenguajes; aspectos independientes y dependientes de la máquina. El concepto de máquina virtual, jerarquía de máquinas virtuales, lenguajes intermediarios. 2. Sintaxis del lenguaje de programación orientado a objetos: Revisión de tipos de datos, operadores, estructuras de control, control de acceso, métodos. 4 3. Fundamentos de la programación orientada a objetos: Diseño orientado a objetos, encapsulación y ocultación de información, separación entre comportamiento e implementación, clases, subclases y herencia, jerarquía de clases, clases abstractas, polimorfismo. 4. Tratamiento de errores. Mecanismos de tratamiento y recuperación de errores en tiempo de ejecución, excepciones, robustez de programas. 5. Estructuras de datos: Implementación de estructuras de datos en el paradigma orientado a objetos. Algoritmos básicos (ordenación, búsqueda, operaciones en pilas colas, etc.) sobre estas estructuras. 6. Persistencia: Técnicas de persistencia de objetos. 7. Análisis y diseño Orientado a Objetos: Identificación y modelado de clases y relaciones, lenguajes y notaciones de modelado. Introducción a los patrones de diseño. 8. Desarrollo de interfaces gráficas de usuario: Manejo de API, uso de API gráficas sencillas; diseño de GUI, programación dirigida por eventos, arquitectura MVC. 9. Pruebas y calidad del software: Pruebas y mantenimiento del Software, características del mantenimiento del Software; reingeniería; reutilización del Software. Programación de los contenidos Unidades temáticas Total horas, clases, créditos o tiempo de dedicación (*) Temas Introducción a los lenguajes de programación Introducción a los lenguajes de programación 2 horas Sintaxis del lenguaje de programación orientado a objetos Sintaxis del lenguaje de programación orientado a objetos 6 horas Fundamentos de la programación orientada a objetos Fundamentos de la programación orientada a objetos 12 horas 5 Tratamiento de errores Tratamiento de errores 4 horas Estructuras de datos Estructuras de datos 6 horas Persistencia Persistencia 4 horas Análisis y diseño Orientado a Objetos Análisis y diseño Orientado a Objetos 8 horas Desarrollo de interfaces gráficas de usuario Desarrollo de interfaces gráficas de usuario 8 horas Pruebas y calidad del software Pruebas y calidad del software 6 horas (*) Incluyen PECs 4. METODOLOGÍAS DE ENSEÑANZA-APRENDIZAJE. ACTIVIDADES FORMATIVAS La asignatura Fundamentos de la programación se organiza como una asignatura cuatrimestral de 9 ECTS (225 horas). En el proceso de enseñanza-aprendizaje de los contenidos anteriormente reseñados se emplearán las siguientes actividades formativas: Clases Teóricas presenciales. Clases Prácticas: resolución de problemas presenciales. Prácticas en Laboratorio presenciales. Tutorías: individuales y/o grupales. Además, en función de la naturaleza de las distintas partes de la materia objeto de estudio, se podrán utilizar, entre otras, las siguientes actividades formativas: Elaboración de trabajos con responsabilidad individual pero con gestión de la información como equipo. Puesta en común de la información, problemas y dudas que aparezcan en la realización de los trabajos. Organización y realización de jornadas públicas con presentaciones orales y discusión de resultados. Utilización de Plataforma de Aula Virtual. Actividades presenciales: 6 1. En el aula: exposición y discusión de los conocimientos básicos de la asignatura. Planteamiento y resolución teórica de ejercicios y supuestos relacionados. Orientadas a la enseñanza de las competencias específicas de la asignatura, especialmente las relacionadas con los conocimientos básicos y las técnicas de programación imperativa. 2. En el laboratorio: planteamiento y desarrollo de ejercicios prácticos que permitan solventar problemas y analizar hipótesis y contribuyan al desarrollo de la capacidad de análisis de resultados, razonamiento crítico y comprensión de los métodos de resolución planteados. Servirán como base para la adquisición de las competencias genéricas descritas en el apartado 2. Actividades no presenciales: 1. Análisis y asimilación de los contenidos de la materia, resolución de problemas, consulta bibliográfica, preparación de trabajos individuales y grupales, realización de exámenes presenciales y autoevaluaciones. Orientadas especialmente al desarrollo de métodos para la autoorganización y planificación del trabajo individual y en equipo. 2. Tutorías: asesoramiento individual y en grupos durante el proceso de enseñanzaaprendizaje, bien en forma presencial o a distancia. Número de horas totales: La asignación de horas a las distintas actividades formativas, incluyendo los exámenes es la siguiente: Número de horas presenciales:60 Clases presenciales de Teoría y problemas:28 Clases presenciales de Laboratorio: 28 Evaluación final:4 Número de horas del trabajo propio del estudiante: 90 Totales Tutorías y Trabajo del alumno 150 horas Materiales y recursos Bibliografía de referencia sobre la asignatura. Ordenadores personales. Entornos de desarrollo y manuales de uso de los mismos. Conexión a Internet. Plataforma de Aula Virtual y manuales de uso de las mismas. Proyectores. 7 5. EVALUACIÓN El sistema de calificación se ajustará al RD 1125/2003 por el cual se regula el sistema de créditos ECTS. Los estudiantes tendrán la opción de evaluación continua mediante las Pruebas de Evaluación Continua (PEC) distribuidas a lo largo del cuatrimestre. Además, los estudiantes que no se acojan o superen la evaluación continua, podrán optar a una Evaluación Final. La evaluación continua servirá en cualquier caso como evaluación formativa durante el proceso de enseñanza-aprendizaje. La evaluación de la adquisición de competencias tendrá en cuenta los siguientes criterios de evaluación: - Dominio de los contenidos básicos - Resolución de problemas - Aplicación y transferencia de los contenidos - Interés y motivación en la realización de las tareas y prácticas El sistema de evaluación continua que se propone se compone de: Pruebas escritas de carácter teórico/ practico, pudiendo ser de carácter eliminatorio, relativas a los conocimientos impartidos que se podrán realizar en el aula/laboratorio o a través de la Plataforma e-Learning puesta a disposición del alumno. El primer día de clase se expondrán los criterios de calificación particulares de la asignatura. 6. BIBLIOGRAFÍA Bibliografía Básica Conceptos y fundamentos de orientación a objetos Stevens, P., Pooley, R. Utilización de UML en ingeniería del software con objetos y componentes. Prentice Hall, 2002. Meyer, B. Construcción de Software Orientado a Objetos. 2ª Edición. Prentice Hall, 1998. Muñoz, C., Niño, A., Vizcaíno A. Introducción a la programación con orientación a objetos. Prentice Hall, 2003. Amescua, A. Análisis y diseño estructurado y orientado a objetos de sistemas informáticos. McGraw-Hill, 2003. Programación orientada a objetos en Java Arnow, D., Weiss, G. Introducción a la programación con Java. Un enfoque orientado a objetos. Addison Wesley, 2001. Eckel, B. Piensa en Java. Cuarta Edición. Prentice Hall, 2007. Otón, S., Martínez, J.J., Hilera, J.R. Programación orientada a objetos con Java. Servicio de Publicaciones Universidad de Alcalá, 2000. 8 Horstmann, C., Cornell, G. Core Java 2. Fundamentos. 7ª edición. Prentice Hall, 2006. Cohoon, J., Davidson, J. Programación en Java 5.0. McGraw-Hill, 2006. Bibliografía Complementaria Perez, J. M. Problemas resueltos de programación en lenguaje Java. Thomson, 2003. Camacho, D. Programación, algoritmos y ejercicios resueltos en Java. Prentice Hall, 2003. Joyanes, L. Programación orientada a objetos. Segunda Edición. McGraw-Hill, 1998. Martin, R. UML para programadores Java. Prentice Hall, 2004. 9