Diseño de software Introducción a la ingeniería del software y metodologías de diseño DISEÑO- Autor: Cesar Ramos Fecha: No...
Contenido <ul><li>Conceptos básicos de Ingeniería de Software </li></ul><ul><ul><li>Proceso de desarrollo. Actividades </l...
Proceso de desarrollo de software <ul><li>Actividades (ciclo) de desarrollo </li></ul>DISEÑO- Análisis Diseño Codificación...
Desarrollo evolutivo de software <ul><li>Inconvenientes del modelo en cascada </li></ul><ul><ul><li>Rígido, es muy costoso...
Análisis <ul><li>Entrada </li></ul><ul><ul><li>Conocimiento del dominio de la aplicación, actividades de los usuarios, mer...
Diseño <ul><li>Entrada </li></ul><ul><ul><li>Documento de requisitos del software </li></ul></ul><ul><li>Actividades </li>...
Codificación <ul><li>Entrada </li></ul><ul><ul><li>Documento de diseño del software </li></ul></ul><ul><li>Actividades </l...
Integración. Validación <ul><li>Entrada </li></ul><ul><ul><li>Código de módulos, probado </li></ul></ul><ul><ul><li>Docume...
Proyecto de la asignatura <ul><li>Actividades a desarrollar </li></ul>DISEÑO- Análisis Diseño Codificación Integración Man...
Abstracciones <ul><li>Abstracciones </li></ul><ul><ul><li>Implementan determinados servicios, ocultando los detalles. Se u...
Clases y objetos <ul><li>Clases </li></ul><ul><ul><li>Definen un tipo de objetos y sus operaciones </li></ul></ul><ul><ul>...
Herencia <ul><li>Concepto: especialización </li></ul><ul><ul><li>Define una clase particular (subclase o clase hija) a par...
Diseño orientado a objetos <ul><li>Descomposición y organización en partes </li></ul><ul><ul><li>Partes = clases o abstrac...
Diagramas de clases DISEÑO- Clase Atributos Métodos Herencia Uso Agregación
Descomposición modular <ul><li>Módulo: agrupación de elementos </li></ul><ul><ul><li>Clases, tipos, constantes, objetos, e...
Diagramas modulares DISEÑO- Dibujar Curva_C Pluma Papel Uso
Diagramas modulares DISEÑO- Curva_C Dibujar Papel - Crear - PonerEnBlanco - MarcarHorizontal - MarcarVertical - Imprimir P...
Metodología de diseño <ul><li>Evaluar y comprender la especificación </li></ul><ul><li>Idear una estrategia de solución, i...
Metodología de diseño <ul><li>Formalizar la estrategia </li></ul><ul><ul><li>Identificación de entidades (clases, métodos,...
Reutilización <ul><li>Componentes </li></ul><ul><ul><li>Librerías, genéricos, etc. </li></ul></ul><ul><li>Esquemas de arqu...
Upcoming SlideShare
Loading in …5
×

Diseño

1,957 views

Published on

Orientado a objeto

  • Be the first to comment

  • Be the first to like this

Diseño

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

×