Professional Documents
Culture Documents
DISEÑO-1
Introducción al diseño de software
Contenido
Conceptos básicos de Ingeniería de Software
Proceso de desarrollo. Actividades
Conceptos básicos de orientación a objetos
Abstracciones. Orientación a objetos
Metodologías de diseño
Diseño basado en abstracciones. Diseño orientado a
objetos
Metodología: Booch (Booch), Rumbaugh (OMT),
Jacobson (OOSE), Coad-Yourdon (OOA/OOD)
Casos de estudio
DISEÑO-2
Introducción al diseño de software
Proceso de desarrollo de software
Actividades (ciclo) de desarrollo
Codificación
Integración
Mantenimiento
DISEÑO-3
Introducción al diseño de software
Desarrollo evolutivo de software
Inconvenientes del modelo en cascada
Rígido, es muy costoso rectificar
La documentación inicial suele quedar obsoleta
Modelos de desarrollo evolutivo
Ciclo de vida espiral
Uso de prototipos
Programación extrema (Extreme Programming)
Desarrollo ágil
Cambia el proceso, pero no las actividades
DISEÑO-4
Introducción al diseño de software
Análisis
Entrada
Conocimiento del dominio de la aplicación,
actividades de los usuarios, mercado, etc.
Actividades
Identificar las necesidades del usuario
Análisis de viabilidad
Determinar los requisitos de la aplicación
Salida
Documento de requisitos del software
DISEÑO-5
Introducción al diseño de software
Diseño
Entrada
Documento de requisitos del software
Actividades
Establecer una(s) estrategia(s) de solución
Análisis de alternativas. Formalizar la solución
Descomponer y organizar la aplicación
Fijar descripciones de cada módulo
Salida
Documento de diseño del software
DISEÑO-6
Introducción al diseño de software
Codificación
Entrada
Documento de diseño del software
Actividades
Creación del código fuente
Pruebas de unidades
Salida
Código de módulos, probado
DISEÑO-7
Introducción al diseño de software
Integración. Validación
Entrada
Código de módulos, probado
Documento de requisitos del software (validación)
Actividades
Pruebas de integración
Pruebas de validación
Salida
Aplicación completa, lista para usar
DISEÑO-8
Introducción al diseño de software
Proyecto de la asignatura
Actividades a desarrollar
Diseño
Análisis modular
Codificación y
Diseño pruebas de unidades
Pruebas de
Codificación
integración
Integración
Mantenimiento
DISEÑO-9
Introducción al diseño de software
Abstracciones
Abstracciones
Implementan determinados servicios, ocultando los
detalles. Se usan conociendo su interfaz
Abstracciones funcionales
Funciones y acciones
Realizan una operación
Tipos abstractos de datos
Agrupan un tipo de datos con sus operaciones
Ocultan la representación de los datos
DISEÑO-10
Introducción al diseño de software
Clases y objetos
Clases
Definen un tipo de objetos y sus operaciones
Coinciden en esencia con tipos abstractos de datos
La clase oculta los detalles de implementación
Atributos: contenido de información de los objetos
Métodos: operaciones sobre los objetos
Mensajes: invocación de las operaciones
Objetos
Datos de una determinada clase
DISEÑO-11
Introducción al diseño de software
Herencia
Concepto: especialización
Define una clase particular (subclase o clase hija) a
partir de otra clase general (superclase o clase padre)
La subclase hereda los atributos y métodos de la
superclase, y puede tener otros nuevos
También se pueden redefinir métodos
Ejemplo: fecha => fecha_y_hora
Subclases como subtipos: sustitución
Imprimir_Calendario( fecha )
Imprimir_Calendario( fecha_y_hora )
DISEÑO-12
Introducción al diseño de software
Diseño orientado a objetos
Descomposición y organización en partes
Partes = clases o abstracciones
Organización: estructura del conjunto
Relaciones entre clases
Agregación: objetos que contienen otros objetos
Uso: clases que utilizan otras clases
Herencia: clases especializadas
Otras relaciones: modelo de datos.
Ejemplo: paciente padece enfermedad
DISEÑO-13
Introducción al diseño de software
Diagramas de clases
Clase
Atributos
Métodos
Herencia
Agregación
Uso
DISEÑO-14
Introducción al diseño de software
Descomposición modular
Módulo: agrupación de elementos
Clases, tipos, constantes, objetos, etc.
Acoplamiento
Ligaduras o interferencias entre módulos
Deseable bajo acoplamiento (independencia)
Ejemplo: No usar variables globales por su nombre
Cohesión
Relación entre los elementos de un módulo
Deseable alta cohesión
Ejemplo: Módulos que sean clases o TADs
DISEÑO-15
Introducción al diseño de software
Diagramas modulares
Dibujar
Uso
Curva_C
Pluma
Papel
DISEÑO-16
Introducción al diseño de software
Diagramas modulares
Dibujar
Curva_C
Pluma
- Crear
- Poner
- Avanzar
- GirarDerecha
- GirarIzquierda
Papel
- Crear
- PonerEnBlanco
- MarcarHorizontal
- MarcarVertical
- Imprimir
DISEÑO-17
Introducción al diseño de software
Metodología de diseño
DISEÑO-18
Introducción al diseño de software
Metodología de diseño
Formalizar la estrategia
Identificación de entidades (clases, métodos, ...)
Agrupar métodos en clases
Identificar y asignar responsabilidades
Identificar relaciones entre clases
Refinar las clases
Diseño detallado
Definir atributos, argumentos de las operaciones, ...
Codificar interfaces (código Ada, C++, Java, ...)
DISEÑO-19
Introducción al diseño de software
Reutilización
Componentes
Librerías, genéricos, etc.
Esquemas de arquitectura (Frameworks)
Módulos fijos, ya definidos
Módulos específicos, a crear en cada caso
Patrones de diseño
Esquemas conocidos (no reinventar la rueda)
E.Gamma, R.Helm, R.Johnson, J.Vlissides: Design
Patterns: ... - (“la banda de los cuatro”)
Ejemplo: Modelo-Vista-Controlador (MVC)
DISEÑO-20