Download DESARROLLO DE SOFTWARE Grado en Ingeniero en

Document related concepts

Scala (lenguaje de programación) wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Polimorfismo (informática) wikipedia , lookup

Ocaml wikipedia , lookup

Programación funcional wikipedia , lookup

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