| |
Programa
Objetivos
El curso trata una gran variedad
de habilidades para el desarrollo del software, abarcando
desde el análisis de un problema hasta la implementación
de su solución. Al final del curso, se espera
que los estudiantes sean capaces de:
- Analizar un problema de desarrollo
de software y deducir su naturaleza de manera
concreta y con precisión.
- Diseñar una estructura
de módulos para solucionar un problema y evaluar
otras alternativas.
- Implementar un módulo
que se ejecute correctamente y de manera eficiente.
- Trabajar en un pequeño
equipo, colaborando en estos aspectos del desarrollo
de software intercambiando ideas de manera constructiva
y organizada.
- Valorar temas de ingeniería
en el desarrollo del software, tales como la importancia
de centrarse en los intereses
del usuario, trabajar con recursos limitados,
ocuparse del mantenimiento,
demostrar seguridad y la división
de tareas.
Requisitos
esenciales
Se asume que al inicio del curso
los estudiantes son capaces de:
- Crear un pequeño programa
(de 100 líneas de código, por ejemplo)
que satisfaga una especificación;
- Entender las nociones básicas
de la programación imperativa (tales como bucles,
procedimientos, excepciones, y aliasing)
y de la programación orientada a objetos (objetos,
referencias, self, interfaces
y subclases);
- Utilizar y comprender los programas
que usan estructuras de datos básicas, tales
como arrays, tablas
hash, árboles, y listas.
Resultados
Al finalizar el curso, los estudiantes
deberían ser capaces de
- Identificar las entidades
e interrelaciones
claves del dominio del
problema; redactar descripciones textuales concretas
de los problemas, adoptando el estilo de un manual
para el usuario.
- Diseñar programas: elaborar
un diseño compuesto por un conjunto de módulos,
utilizando diagramas de dependencia modular para expresar
y evaluar los acoplamientos entre módulos,
y modelos de objeto para relacionar estados
concretos con estados abstractos;
explotar patrones de
diseño que
sean bastante conocidos (tales como
Iterator, Observer,
Factory y Visitor); idear las
especificaciones modulares
adecuadas y expresarlas de manera informal
como pre - y post-condiciones; comprender los roles
adecuados de los conceptos subtipo
y herencia, y utilizarlos de manera eficaz.
- Implementar programas: escribir
código orientado a objetos para satisfacer
la especificación de un módulo; expresar
invariantes de representación,
entender cómo afectan a la eficiencia del programa
y a su facilidad de implementación e implementarlas
como sentencias en tiempo de ejecución; comprender
las nociones fundamentales de abstracción de
datos, y leer y escribir funciones
de abstracción para tipos de datos simples;
evaluar si un módulo es correcto mediante una
cuidadosa revisión manual, usando la especificación,
el invariante
de representación y la función
abstracta; desarrollar suites de pruebas a
nivel de unidad y sistema, y evaluar su correcto funcionamiento
utilizando nociones simples de cobertura
de código y especificación.
- Realizar una pequeña
creación en equipo, incluyendo el análisis
de un problema, el diseño, la implementación
y el testeo.
Cada resultado constituye la base
del objetivo del número siguiente. El objetivo
(5) se basa en el resultado del (4).
|