Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia...

16
CAPÍTULO 20 CONCEPTOS Y PRINCIPIOS ORIENTADOS A OBJETOS 20.1 El paradigma orientado a objetos Durante muchos años el término orientado a objetos (00) se usó para referirse a un enfoque de desarrollo de software que usaba uno de los lenguajes orientados a objetos (Ada 95, C++, Eiffel, Smalltalk, etc.). Hoy en día el paradigma O0 encierra una completa visión de la ingeniería del software. Edward Berard hace notar esto cuando declara: Los beneficios de la tecnología orientada a objetos se fortalecen si se usa antes y durante el proceso de ingeniería del software. Esta tecnología orientada a objetos considerada debe hacer sentir su impacto en todo el proceso de ingeniería del software. Un simple uso de programación orientada a objetos (POO) no brindará los mejores resultados. Los ingenieros del software y sus directores deben considerar tales elementos el análisis de requisitos orientado a objetos (AROO), el diseño orientado a objetos (DOO), el análisis del dominio orientado a objetos (ADOO), sistemas de gestión de bases de dalos orientadas a objetos (SGBDOO) y la ingeniería del software orientada a objetos asistida por computadora (ISOOAC).

Transcript of Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia...

Page 1: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

CAPÍTULO  

20      CONCEPTOS  Y  PRINCIPIOS  ORIENTADOS  A  

OBJETOS  

20.1  El  paradigma  orientado  a  objetos  

Durante  muchos  años  el  término  orientado  a  objetos  (00)  se  usó  para  referirse  a  un  enfoque  de  desarrollo  de  software  que  usaba  uno  de  los  lenguajes  orientados  a  objetos  (Ada  95,  C++,  Eiffel,  Smalltalk,  etc.).  Hoy  en  día  el  paradigma  O0  encierra  una  completa  visión  de  la  ingeniería  del  software.  Edward  Berard  hace  notar  esto  cuando  declara:  Los  beneficios  de  la  tecnología  orientada  a  objetos  se  fortalecen  si  se  usa  antes  y  durante  el  proceso  de  ingeniería  del  software.  Esta  tecnología  orientada  a  objetos  considerada  debe  hacer  sentir  su  impacto  en  todo  el  proceso  de  ingeniería  del  software.  Un  simple  uso  de  programación  orientada  a  objetos  (POO)  no  brindará  los  mejores  resultados.  Los  ingenieros  del  software  y  sus  directores  deben  considerar  tales  elementos  el  análisis  de  requisitos  orientado  a  objetos  (AROO),  el  diseño  orientado  a  objetos  (DOO),  el  análisis  del  dominio  orientado  a  objetos  (ADOO),  sistemas  de  gestión  de  bases  de  dalos  orientadas  a  objetos  (SGBDOO)  y  la  ingeniería  del  software  orientada  a  objetos  asistida  por  computadora  (ISOOAC).    

Page 2: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

Con  los  objetos  es  realmente  más  fácil  construir  modelo  para  sistemas  complejos  que  dedicarse  o  la  programación  secuencial.    20.2  Conceptos  de  orientación  a  objetos  

La  programación  orientada  a  objetos  no  es  tanto  una  técnica  de  codificación  de  paquetes  como  una  manera  de  que  los  constructores  de  software  encapsulen  funcionalidades  para  proporcionárselas  a  sus  clientes.  

El  encapsulamiento  significa  que  toda  esta  información  se  encuentra  empaquetada  bajo  un  nombre  y  puede  reutilizarse  como  una  especificación  o  componente  de  programa.    20.2.1.  Clases  y  objetos    Los  conceptos  fundamentales  que  llevan  a  un  diseño  de  alta  calidad  son  igualmente  aplicables  a  sistemas  desarrollados  usando  métodos  convencionales  y  orientados  a  objetos.  Por  esta  razón,  un  modelo  O0  de  software  de  computadora  debe  exhibir  abstracciones  de  datos  y  procedimientos  que  conducen  a  una  modularidad  eficaz.  Una  clase  es  un  concepto  O0  que  encapsula  las  abstracciones  de  datos  y  procedimientos  que  se  requieren  para  describir  el  contenido  y  comportamiento  de  alguna  entidad  del  mundo  real.    20.3  Identificación  de  los  Elementos  de  un  Modelo  de  Objetos    Los  objetos  se  manifiestan  de  alguna  de  las  formas:    

1. Entidades  externas  (por  ejemplo:  otros  sistemas,  dispositivos,  personas)  que  producen  o  consumen  información  a  usar  por  un  sistemas  computacional.  

2. Cosas  (por  ejemplo:  informes,  presentaciones,  cartas,  señales)  que  son  parte  del  dominio  de  información  del  problema.  

3. Ocurrencias  o  sucesos5  (por  ejemplo:  una  transferencia  de  propiedad  o  la  terminación  de  una  serie  de  movimientos  en  un  robot)  que  ocurren  dentro  del  contexto  de  una  operación  del  sistema.  

4. Papeles  o  roles  (por  ejemplo:  director,  ingeniero,  vendedor)  desempeñados  por  personas  que  interactúan  con  el  sistema.  

5. Unidades  organizacionales  (por  ejemplo:  división,  grupo,  equipo)  que  son  relevantes  en  una  aplicación.  

6. Lugares  (por  ejemplo:  planta  de  producción  o  muelle  de  carga)  que  establecen  el  contexto  del  problema  y  la  función  general  del  sistema.  

7. Estructuras  (por  ejemplo:  sensores,  vehículos  de  cuatro  ruedas  o  computadoras)  que  definen  una  clase  de  objetos  o,  en  casos  extremos,  clases  relacionadas  de  objetos.  

 

Page 3: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

Coad  y  Yourdon  sugieren  seis  características  de  selección  a  usar  cada  vez  que  un  analista  considera  si  incluye  o  no  un  objeto  potencial  en  el  modelo  de  análisis:    

1. Información  retenida:  el  objeto  potencial  será  de  utilidad  durante  el  análisis  solamente  si  la  información  acerca  de  él  debe  recordarse  para  que  el  sistema  funcione.  

2. Servicios  necesarios:  el  objeto  potencial  debe  poseer  un  conjunto  de  operaciones  identificables  que  pueden  cambiar  de  alguna  manera  el  valor  de  sus  atributos.  

3. Atributos  múltiples:  durante  el  análisis  de  requisitos,  se  debe  centrar  la  atención  en  la  información  principal  (un  objeto  con  un  solo  atributo  puede,  en  efecto,  ser  Útil  durante  el  diseño,  pero  seguramente  será  mejor  presentado  como  un  atributo  de  otro  objeto  durante  la  actividad  de  análisis);  

4. Atributos  comunes:  puede  definirse  un  conjunto  de  atributos  para  el  objeto  potencial,  los  cuales  son  aplicables  a  todas  las  ocurrencias  del  objeto.  

5. Operaciones  comunes:  puede  definirse  un  conjunto  de  operaciones  para  el  objeto  potencial,  las  cuales  son  aplicables  a  todas  las  ocurrencias  del  objeto;  

6. Requisitos  esenciales:  entidades  externas  que  aparecen  en  el  espacio  del  problema  y  producen  o  consumen  información  esencial  para  la  producción  de  cualquier  solución  para  el  sistema,  serán  casi  siempre  definidas  como  objetos  en  el  modelo  de  requisitos.  

 20.4  Gestión  de  proyectos  de  software  orientado  a  objetos    Ed  Berard  y  Grady  Booch,  entre  otros,  sugieren  el  uso  de  un  «modelo  recursivo/paralelo>>  p  ara  el  desarrollo  de  software  orientado  a  objetos.  En  esencia,  el  modelo  recursivo/paralelo  funciona  de  la  siguiente  manera:    

• Realizar  los  análisis  suficientes  para  aislar  las  clases  del  problema  y  las  conexiones  más  importantes.  

• Realizar  un  pequeño  diseño  para  determinar  si  las  clases  y  conexiones  pueden  ser  implementadas  de  manera  práctica.  

• Extraer  objetos  reutilizables  de  una  biblioteca  para  construir  un  prototipo  previo.  

• Conducir  algunas  pruebas  para  descubrir  errores  en  el  prototipo.  • Obtener  realimentación  del  cliente  sobre  el  prototipo.  • Modificar  el  modelo  de  análisis  basándose  en  lo  que  se  ha  aprendido  del  

prototipo,  de  la  realización  del  diseño  y  de  la  realimentación  obtenida  del  cliente.  

• Refinar  el  diseño  para  acomodar  sus  cambios.  • Construir  objetos  especiales  (no  disponibles  en  la  biblioteca).  

       

Page 4: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

CAPÍTULO  

21                    ANÁLISIS  ORIENTADO  A  OBJETOS    

El  propósito  del  A00  es  definir  todas  las  clases  que  son  relevantes  al  problema  que  se  va  a  resolver,  las  operaciones  y  atributos  asociados,  las  relaciones  y  comportamientos  asociadas  con  ellas.  Para  cumplirlo  se  deben  ejecutar  las  siguientes  tareas:    

1. Los  requisitos  básicos  del  usuario  deben  comunicarse  entre  el  cliente  y  el  ingeniero  del  

2. Identificar  las  clases  (es  decir,  definir  atributos  y  métodos).  3. Se  debe  especificar  una  jerarquía  de  clases.  4. Representan  las  relaciones  objeto  a  objeto  (conexiones  de  objetos).  5. Modelar  el  comportamiento  del  objeto.  6. Repetir  iterativamente  las  tareas  de  la  1  a  la  5  hasta  completar  el  modelo.  

 21.1.2.  El  panorama  del  A00    El  método  de  Booch.  El  método  de  Booch  abarca  un  «microproceso  de  desarrollo»  y  un  «macroproceso  de  desarrollo».  El  nivel  micro  define  un  conjunto  de  tareas  de  análisis  que  se  reaplican  en  cada  etapa  en  el  macro  proceso.  Por  esto  se  mantienen  un  enfoque  evolutivo.  El  micro  proceso  de  desarrollo  identifica  clases  y  objetos  y  la  semántica  de  dichas  clases  y  objetos,  define  las  relaciones  entre  clases  y  objetos  y  realiza  una  serie  de  refinamientos  para  elaborar  el  modelo  del  análisis.    El  método  de  Rumbaugh.  Rumbaugh  y  sus  colegas  desarrollaron  la  Técnica  de  Modelado  de  Objetos  (OMT)  para  el  análisis,  diseño  del  sistema  y  diseño  a  nivel  de  objetos.  La  actividad  de  análisis  crea  tres  modelos:  el  modelo  de  objetos  (una  representación  de  objetos,  clases,  jerarquías  y  relaciones),  el  modelo  dinámico  (una  representación  del  comportamiento  del  sistema  y  los  objetos)  y  el  modelo  funcional  (una  representación  a  alto  nivel  del  flujo  de  información  a  través  del  sistema  similar  al  DFD).    El  método  de  Jacobson.  También  llamado  OOSE  (en  español  Ingeniería  del  Software  Orientada  a  Objetos),  el  método  de  Jacobson  es  una  versión  simplificada  de  Objectory,  un  método  patentado,  también  desarrollado  por  Jacobson.  Este  método  se  diferencia  de  los  otros  por  la  importancia  que  da  al  caso  de  uso  –  una  descripción  o  escenario  que  describe  cómo  el  usuario  interactúa  con  el  producto  o  sistema.    El  método  de  Coad  y  Yourdon.  El  método  de  Coad  y  Yourdon  [COA911  se  considera,  con  frecuencia,  como  uno  de  los  métodos  del  A00  más  sencillos  de  aprender.  

Page 5: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

La  notación  del  modelado  es  relativamente  simple  y  las  reglas  para  desarrollar  el  modelo  de  análisis  son  evidentes.  A  continuación  sigue  una  descripción  resumida  del  proceso  de  A00  de  Coad  y  Yourdon:    

• Identificar  objetos,  usando  el  criterio  de  «qué  buscar».  • Definir  una  estructura  de  generalización-­‐especificación.  • Definir  una  estructura  de  todo-­‐parte.  • Identificar  temas  (representaciones  de  componentes  de  subsistemas).  • Definir  atributos.  • Definir  servicios.  

 El  método  de  Wirfs-­‐Brock.  El  método  de  Wirfs-­‐  Brock  no  hace  una  distinción  clara  entre  las  tareas  de  análisis  y  diseño.  En  su  lugar,  propone  un  proceso  continuo  que  comienza  con  la  valoración  de  una  especificación  del  cliente  y  termina  con  el  diseño.  A  continuación  se  esbozan  brevemente  las  tareas  relacionadas  con  el  análisis  de  Wirfs-­‐Brock:    

• Evaluar  la  especificación  del  cliente.  • Usar  un  análisis  gramatical  para  extraer  clases  candidatas  de  la  especificación.  • Agrupar  las  clases  en  un  intento  de  determinar  superclases.  • Definir  responsabilidades  para  cada  clase.  • Asignar  responsabilidades  a  cada  clase.  • Identificar  relaciones  entre  clases.  • Definir  colaboraciones  entre  clases  basándose  en  sus  responsabilidades.  • Construir  representaciones  jerárquicas  de  clases  para  mostrar  relaciones  de  

herencia.  • Construir  un  gafo  de  colaboraciones  para  el  sistema.  

 21.2  Análisis  del  dominio    El  objetivo  del  análisis  del  dominio  es  definir  el  conjunto  de  clases  (objetos)  que  se  encuentran  en  el  dominio  de  lo  aplicación.  Dichas  clases  podrán  reutilizarse  muchas  veces.    21.2.2.  El  proceso  de  análisis  del  dominio    El  análisis  del  dominio  del  software  es  la  identificación,  análisis  y  especificación  de  requisitos  comunes  de  un  dominio  de  aplicación  específico,  normalmente  para  su  reutilización  en  múltiples  proyectos  dentro  del  mismo  dominio  de  aplicación  (el  análisis  orientado  a  objetos  del  dominio  es  la  identificación,  análisis  y  especificación  de  capacidades  comunes  y  reutilizables  dentro  de  un  dominio  de  aplicación  específico,  en  términos  de  objetos,  clases,  submontajes  y  marcos  de  trabajo  comunes.    

Page 6: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

   FIGURA  21.1.  Entrada  y  salida  para  análisis  del  dominio.      21.4.2.  Modelado  de  clases-­‐responsabilidades-­‐colaboraciones    Una  vez  que  se  han  desarrollado  los  escenarios  de  uso  básicos  para  el  sistema,  es  el  momento  de  identificar  las  clases  candidatas  e  indicar  sus  responsabilidades  y  colaboraciones.  El  modelado  de  clases-­‐responsabilidades-­‐colaboraciones  (CRC)  aporta  un  medio  sencillo  de  identificar  y  organizar  las  clases  que  resulten  relevantes  al  sistema  o  requisitos  del  producto.  Ambler  [AMB95]  describe  el  modelado  CRC  de  la  siguiente  manera:    Un  modelo  CRC  es  realmente  una  colección  de  tarjetas  índice  estándar  que  representan  clases.  Las  tarjetas  están  divididas  en  tres  secciones.  A  lo  largo  de  la  cabecera  de  la  tarjeta  usted  escribe  el  nombre  de  la  clase.  En  el  cuerpo  se  listan  las  responsabilidades  de  la  clase  a  la  izquierda  y  a  la  derecha  los  colaboradores.    Adicionalmente,  los  objetos  y  clases  pueden  clarificarse  por  un  conjunto  de  características:    Tangibilidad.  ¿Representa  la  clase  algo  tangible  o  palpable  (por  ejemplo,  un  teclado  o  sensor),  o  representa  información  más  abstracta  (por  ejemplo:  una  salida  prevista)?  Exclusividad.  ¿Es  la  clase  atómica  (es  decir,  no  incluye  otras  clases)  o  es  agregada  (incluye  al  menos  un  objeto  anidado)?    Secuencia.  ¿Es  la  clase  concurrente  (es  decir  posee  su  propio  hilo  de  control)  o  secuencial  (es  controlada  por  recursos  externos)?  Persistencia.  La  clase  es  temporal  (se  crea  durante  !a  ejecución  del  programa  y  es  eliminada  una  vez  que  éste  termina),  o  permanente  (es  almacenada  en  una  base  de  datos)?  Integridad.  ¿Es  la  clase  corrompible  (es  decir,  no  protege  sus  recursos  de  influencias  externas)  o  es  segura  (la  clase  refuerza  los  controles  de  accesos  a-­‐  sus  recursos)?        

Page 7: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

CAPÍTULO  

22                          DISEÑO  ORIENTADO  A  OBJETOS    22.1  Diseño  para  sistemas  orientados  a  objetos    Las  cuatro  capas  de  la  pirámide  de  diseño  O0  son:    

1. La  capa  subsistema.  Contiene  una  representación  de  cada  uno  de  los  subsistemas,  para  permitir  al  software  conseguir  sus  requisitos  definidos  por  el  cliente  e  implementar  la  infraestructura  que  soporte  los  requerimientos  del  cliente.  

2. La  capa  de  clases  y  objetos.  Contiene  la  jerarquía  de  clases,  que  permiten  al  sistema  ser  creado  usando  generalizaciones  y  cada  vez  especializaciones  más  acertadas.  Esta  capa  también  contiene  representaciones.  

3. La  capa  de  mensajes.  Contiene  detalles  de  diseño,  que  permite  a  cada  objeto  comunicarse  con  sus  colaboradores.  Esta  capa  establece  interfaces  externas  e  internas  para  el  sistema.  

4. La  capa  de  responsabilidades.  Contiene  estructuras  de  datos  y  diseños  algorítmicos,  para  todos  los  atributos  y  operaciones  de  cada  objeto.  

 

 FIGURA  22.1.  La  pirámide  del  Diseño  OO.  

     

Page 8: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

22.1.1.  Enfoque  convencional  vs.  OO    

 FIGURA  22.2.  Transformación  de  un  modelo  de  análisis  O0  a  un  modelo  de  diseño  OO.    Fichman  y  Kemerer  [FIC92]  sugieren  diez  componentes  de  diseño  modelado,  que  pueden  usarse  para  comparar  varios  métodos  convencionales  y  orientados  a  objetos:    

1. representación  de  la  jerarquía  de  módulos.  2. especificación  de  las  definiciones  de  datos.  3. especificación  de  la  lógica  procedimental.  4. indicación  de  secuencias  de  proceso  final-­‐a-­‐final  (end-­‐to-­‐end)  5. representación  de  estados  y  transiciones  de  los  objetos.  6. definición  de  clases  y  jerarquías.  7. asignación  de  operaciones  a  las  clases.  8. definición  detallada  de  operaciones.  9. especificación  de  conexiones  de  mensajes.  10. identificación  de  servicios  exclusivos.  

 22.1.2.  Aspectos  del  diseño    Bertrand  Meyer  sugiere  cinco  criterios  para  juzgar  la  capacidad  de  métodos  de  diseño  para  conseguir  modularidad,  y  los  relaciona  al  diseño  orientado  a  objetos:  Descomponibilidad:  la  facilidad  con  que  un  método  de  diseño  ayuda  al  diseñador  a  descomponer  un  problema  grande  en  problemas  más  pequeños,  haciéndolos  más  fácil  de  resolver.  

Page 9: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

Componibilidad  el  grado  con  el  que  un  método  de  diseño  asegura  que  los  componentes  del  programa  (módulos),  una  vez  diseñados  y  construidos,  pueden  ser  reutilizados  para  crear  otros  sistemas.  Comprensibilidad  la  facilidad  con  la  que  el  componente  de  un  programa  puede  ser  entendido,  sin  hacer  referencia  a  otra  información  o  módulos.  Continuidad:  la  habilidad  para  hacer  pequeños  cambios  en  un  programa  y  que  se  revelen  haciendo  los  cambios  pertinentes  en  uno  o  muy  pocos  módulos.  Protección:  una  característica  arquitectónica,  que  reduce  la  propagación  de  efectos  colaterales,  si  ocurre  un  error  en  un  módulo  dado.    De  estos  criterios,  Meyer,  sugiere  cinco  principios  básicos  de  diseño,  que  pueden  ser  deducidos  para  arquitecturas  modulares:  (1)  unidades  lingüísticas  modulares,  (2)  pocas  interfaces,  (3)  pequeñas  interfaces  (acoplamiento  débil),  (4)  interfaces  explícitas  y  (5)  ocultación  de  información.    22.1.3.  El  Panorama  de  DO0    Haremos  una  breve  revisión  global  de  los  primeros  métodos  de  DOO:    El  método  de  Booch.  Como  se  vio  en  el  Capítulo  21,  el  método  Booch  abarca  un  «proceso  de  micro  desarrollo»  y  un  <<proceso  de  macro  desarrollo».  En  el  contexto  del  diseño,  el  macro  desarrollo  engloba  una  actividad  de  planificación  arquitectónica,  que  agrupa  objetos  similares  en  particiones  arquitectónicas  separadas,  capas  de  objetos  por  nivel  de  abstracción,  identifica  situaciones  relevantes,  crea  un  prototipo  de  diseño  y  valida  el  prototipo  aplicándolo  a  situaciones  de  uso.    El  método  de  Rumbaugh.  La  técnica  de  modelado  de  objetos  (TMO)  [RUM91]  engloba  una  actividad  de  diseño  que  alienta  al  diseño  a  ser  conducido  a  dos  diferentes  niveles  de  abstracción.  El  diseño  de  sistema  se  centra  en  el  esquema  de  los  componentes  que  se  necesitan  para  construir  un  sistema  o  producto  completo.  El  modelo  de  análisis  se  divide  en  subsistemas,  los  cuales  se  asignan  a  procesadores  y  tareas.    El  método  de  Jacobson.  El  diseño  para  ISOO  (Ingeniería  del  software  orientada  a  objetos)  es  una  versión  simplificada  del  método  propietario  Objectory,  también  desarrollado  por  Jacobson.  El  modelo  de  diseño  enfatiza  la  planificación  para  el  modelo  de  análisis  ISOO.  En  principio,  el  modelo  idealizado  de  análisis  se  adapta  para  acoplarse  al  ambiente  del  mundo  real.    El  método  de  Coad  y  Yourdon.  Éste  método  para  DO0,  se  desarrolló  estudiando  «cómo  es  que  los  diseñadores  orientados  a  objetos  efectivos»  hacen  su  trabajo.  La  aproximación  de  diseño  dirige  no  sólo  la  aplicación,  sino  también  la  infraestructura  de  la  aplicación,  y  se  enfoca  en  la  representación  de  cuatro  componentes  mayores  de  sistemas:  la  componente  de  dominio  del  problema,  la  componente  de  interacción  humana,  la  componente  de  administración  de  tareas  y  la  de  administración  de  datos.    

Page 10: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

El  método  de  Wirfs-­‐Brock.  Wirfs-­‐Brock,  Wilkerson  y  Weiner  definen  un  conjunto  de  tareas  técnicas,  en  la  cual  el  análisis  conduce  sin  duda  al  diseño.  Los  protocolos3  para  cada  clase  se  construyen  refinando  contratos  entre  objetos.  Cada  operación  (responsabilidad)  y  protocolo  (diseño  de  interfaz)  se  diseña  hasta  un  nivel  de  detalle  que  guiará  la  implementación.  Se  desarrollan  las  especificaciones  para  cada  clase  (definir  responsabilidades  privadas  y  detalles  de  operaciones)  y  cada  subsistema  (identificar  las  clases  encapsuladas  y  la  interacción  entre  subsistemas).    Para  llevar  a  cabo  un  diseño  orientado  a  objetos,  un  ingeniero  de  software  debe  ejecutar  las  siguientes  etapas  generales:    

1. Describir  cada  subsistema  y  asignar  a  procesadores  y  tareas.  2. Elegir  una  estrategia  para  implementar  la  administración  de  datos,  soporte  de  

interfaz  y  administración  de  tareas.  3. Diseñar  un  mecanismo  de  control,  para  el  sistema  apropiado.  4. Diseñar  objetos  creando  una  representación  procedural  para  cada  operación,  y  

estructuras  de  datos  para  los  atributos  de  clase.  5. Diseñar  mensajes,  usando  la  colaboración  entre  objetos  y  relaciones.  6. Crear  el  modelo  de  mensajería.    7. Revisar  el  modelo  de  diseño  y  renovarlo  cada  vez  que  se  requiera.  

   

     

FIGURA  22.3.  Flujo  de  Proceso  para  DOO.    

 

Page 11: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

22.2  El  proceso  de  diseño  de  sistema    El  diseño  de  sistema  desarrolla  el  detalle  arquitectónico  requerido  para  construir  un  sistema  o  producto.  El  proceso  de  diseño  del  sistema  abarca  las  siguientes  actividades:    

• Partición  del  modelo  de  análisis  en  subsistemas.  • Identificar  la  concurrencia  dictada  por  el  problema.  • Asignar  subsistemas  a  procesadores  y  tareas.  • Desarrollar  un  diseño  para  la  interfaz  de  usuario.  • Elegir  una  estrategia  básica  para  implementar  la  administración  (gestión)  de  

datos.  • Identificar  recursos  globales  y  los  mecanismos  de  control  requeridos  para  su  

acceso.  • Diseñar  un  mecanismo  de  control  apropiado  para  el  sistema,  incluyendo  

administración  de  tareas.  • Considerar  cómo  deben  manejarse  las  condiciones  de  frontera.  • Revisar  y  considerar  trade-­‐offs.  

 Cuando  se  definen  (y  diseñan)  los  subsistemas,  se  deben  seguir  los  siguientes  criterios  de  diseño:    

• El  subsistema  debe  tener  una  interfaz  bien  definida,  a  través  de  la  cual  se  reduzcan  todas  las  comunicaciones  con  el  resto  del  sistema.  

• Con  la  excepción  de  un  pequeño  número  de  «clases  de  comunicación»,  las  clases  incluidas  dentro  del  subsistema  deben  colaborar  sólo  con  otras  clases  dentro  del  subsistema.  

• El  número  de  subsistemas  debe  ser  bajo.  • Un  subsistema  puede  ser  particionado  internamente,  para  ayudar  a  reducir  la  

complejidad.    Buschmann  y  sus  colegas  sugieren  el  siguiente  enfoque  de  diseño  para  estratificación  por  capas:    

1. Establecer  los  criterios  de  estratificación  por  capas.  Esto  significa  decidir  cómo  se  agruparán  los  subsistemas  en  una  arquitectura  de  capas.  

2. Determinar  el  número  de  capas.  Muchas  de  ellas  complican  innecesariamente;  muy  pocas  debilitan  la  independencia  funcional.  

3. Nombrar  las  capas  y  asignar  subsistemas  (con  sus  clases  encapsuladas)  a  una  capa.  Asegurarse  de  que  la  comunicación  entre  subsistemas  (clases)  en  una  capa,  y  otros  subsistemas  (clases)  en  otra  capa,  siguen  la  filosofía  de  diseño  de  la  arquitectura.  

4. Diseñar  interfaces  para  cada  capa.  5. Refinar  los  subsistemas,  para  establecer  la  estructura  de  clases  para  cada  capa.  6. Definir  el  modelo  de  mensajería  para  la  comunicación  entre  capas.  

Page 12: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

7. Revisar  el  diseño  de  capas,  para  asegurar  que  el  acoplamiento  entre  capas  se  minimiza  (un  protocolo  cliente/servidor  puede  ayudar  a  realizar  esta  tarea)  

8. Iterar  para  refinar  el  diseño  de  capas.    22.2.3.  Componente  de  administración  de  tareas    Coad  y  Yourdon  sugieren  la  estrategia  siguiente,  para  el  diseño  de  objetos  que  manipulan  tareas  concurrentes:  

• se  determinan  las  características  de  la  tarea.  • se  define  un  coordinador  de  tarea  y  objetos  asociados.  • se  integra  el  coordinador  y  otras  tareas.  

 Las  siguientes  etapas  de  diseño  pueden  aplicarse  para  especificar  un  contrato  para  un  subsistema:  

1. Listar  cada  petición  que  puede  ser  realizada  por  los  colaboradores  del  subsistema.  Organizar  las  peticiones  por  subsistema  y  definirlas  dentro  de  uno  o  más  contratos  apropiados.  Asegurarse  de  anotar  contratos  que  se  hereden  de  superclases.  

2. Para  cada  contrato,  anotar  las  operaciones  (las  heredadas  y  las  privadas,)  que  se  requieren  para  implementar  las  responsabilidades  que  implica  el  contrato.  Asegurarse  de  asociar  las  operaciones  con  las  clases  específicas,  que  residen  en  el  subsistema.  

3. Considerar  un  contrato  a  la  vez,  crear  una  tabla  con  la  forma  de  la  figura  22.5  Para  cada  contrato,  la  tabla  debe  incluir  las  siguientes  columnas:    

• Tipo:  el  tipo  de  contrato  (por  ejemplo,  cliente/servidor  o  punto-­‐a-­‐punto).  • Colaboradores:  los  nombres  de  los  subsistemas  que  son  parte  del  contrato.  • Clase:  los  nombres  de  las  clases  (contenidas  en  el  subsistema),  que  

proporcionan  servicios  denotados  por  el  contrato.  • Operaciones:  nombres  de  las  operaciones  (dentro  de  la  clase),  que  

implementan  los  servicios.  • Formato  del  mensaje:  el  formato  del  mensaje  requerido  para  implementar  la  

interacción  entre  colaboradores.    

 4. Si  los  modos  de  interacción  entre  los  subsistemas  son  complejos,  debe  crear  un  

diagrama  subsistema-­‐colaboración  como  el  de  la  Figura  22.6.  El  grafo  de  colaboración  es  similar,  en  forma,  al  diagrama  de  flujo  de  sucesos  examinado  en  el  Capítulo  2  1.  Cada  subsistema  se  representa,  junto  con  sus  interacciones  con  otros  subsistemas.  Los  contratos  que  se  invocan  durante  interacción,  se  

Page 13: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

detallan  como  se  muestra  en  la  Figura.  Los  detalles  de  la  interacción  se  determinan  observando  el  contrato  en  la  tabla  de  colaboración  del  subsistema.  

     Incluir  en  el  Resumen  paginas  387-­‐403  Estudiar        

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INGENIERfA DEL SOFTWARE. U N ENFOQUE PRACTICO

El objetivo de esta sección es mostrar el uso de diagra- mas UML, descrito en la Sección 22.25, aplicado a un sistema real. Este sistema es un sistema de comercio electrónico (e-commerce).

22.6.1. Libros-en-línea Libros-en-línea es una compañía creada reciente- mente, que es subsidiaria de otra gran compañía mul- tinacional de comercio, conocida como Pollday Publishing. Los directores de Pollday Publishing se decidieron a llevar a cabo un gran crecimiento en ven- tas por internet entre sus clientes, y decidieron pre- parar a Libros-en-Línea para ello. El concepto que Pollday tiene es el de un sitio Web de comercio elec- trónico, que tenga catálogos detallados de cada libro que manejan, junto con recursos con los que el usua- rio del sitio Web puede ordenar libros, utilizando una forma incluida en una página Web. A continuación, se muestran algunos extractos, tomados del conjun- to de requisitos iniciales, detallados por el equipo téc- nico de Libros-en-línea: 1.

2.

3.

4.

5.

Libros-en-línea desea desarrollar la capacidad de ventas en línea por medio de la Web. EL sitio web que implementa esta capacidad debe permitir al cliente examinar los detalles del libro, ordenarlo y registrar su dirección de correo electrónico para reci- bir ofertas especiales con detalles, publicaciones nue- vas y revisiones. Cuando un cliente accede al sitio Web, cada uno de los recursos antes descritos se despliegan. Si el cliente registra su dirección de correo electró- nico, se le preguntarán su información personal. Esto incluye su nombre, una dirección de correo electró- nico, una dirección postal. Un miembro del equipo conocido como el administrador de contratos será el responsable de enviar información de oferta, etc., a los clientes. El cliente podrá comprar libros del catálogo en línea, examinando las páginas con detalles de los libros y seleccionando el libro, que comprará mediante algún mecanismo como el de presionar un botón. El sistema deberá mantener un carrito de compras virtual, en el que los detalles de cada libro se almacenan. Conforme el carrito se va llenando de libros, se muestra al cliente el precio acumulado de todas sus compras. Cuando el cliente ha terminado de comprar en el sitio Web, se le pedirá información acerca de qué forma de envío se utilizará. Por omisión se mostrará la opción de envío por correo estándar, y un servicio de envío expreso garantizado para entregar dentro de 24 horas.

6. El sitio web deberá interactuar con un sistema de control de inventario, que también requiere desarro- llo. Este sistema de control de inventarios debe mane- jar el proceso de recepción de libros de los inventarios de las editoriales, retiro de libros cuando se ordenan por parte de un cliente, y reordenación de existencia de un libro, cuando se encuentra por vaciarse, para encarar un problema de suministros, en un tiempo de siete días.

7. El control de inventarios por parte del administrador será fijado en un tiempo de siete semanas. Él o ella tendrán la responsabilidad de mantener las ventas, y la disponibilidad de existencias y, cuando las exis- tencias de un libro se encuentren bajas, hacer un nuevo pedido. Para realizar esto, este sistema de con- trol de inventarios debe proporcionar informes de ventas y existencias de inventario con regularidad.

8. Un Administrador de Marketting intervendrá cada ocho semanas. El Jefe de Marketting tendrá la fun- ción de determinar los precios a los que los libros serán vendidos. Se dará la situación de que un libro puede tener un número diferente de precios durante su tiempo de vida; por ejemplo, se debe decidir si se ofrece con un mayor descuento durante las primeras semanas, y luego ajustar el precio a los precios reco- mendados por las editoriales. La compañía que desarrolló el software para Libros-

en-línea, primero identificó un número de clases candi- datas, que a continuación se detallan:

RegistroCliente. Detalles de alguien que compra libros, o que se registró para recibir correos electró- nicos con información. Libro. El artículo principal, qué Libros-en-línea vende. Orden. Una orden que un cliente realiza, para uno o más libros. Esta orden debe ser para una simple copia de un libro, o para copias de un número de libros o incluso múltiples copias de muchos libros. Una orden contendrá un número de líneas de orden (véase a continuación), y una especificación de envío. LíneaDeOrden. Esta es una simple línea de orden. Por ejemplo la orden de la copia de un libro. Una orden consistirá en una o más líneas de orden. Una línea de orden contendrá información acerca de qué libro se ordena y la cantidad ordenada (usual- mente 1) . Carrito. Es un contenedor que existe durante la exploración del sitio Web, por parte de un cliente que realiza una orden. Los contenidos del carrito serán líneas de orden. Cuando un cliente complete una orden, las líneas de orden del carrito y la informa- ción de envío proporcionada por el usuario serán ane- xadas a una orden.

398

Page 14: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

 

 

CAPfTULO 22 DISENO ORIENTADO A OBJETOS

OrdenEspera. Esta es una parte de la orden, la cual no puede cumplirse por las existencias del almacén. Si el cliente está conforme, esperando por un libro que no está en existencia, entonces se realiza una orden de espera. Esta orden de espera se satisface, cuando las existencias del libro se restauran por Libros-en-línea. Almacén. Esta es una colección de libros que se encuentran en existencia. Una orden de libro o de colección de libros se manda al almacén y de ahí se retiran los libros de sus cajas del almacén, se empaquetan y se despachan al cliente. En ese momento, se ajustan los detalles de las existen- cias. RegistroExistencias. Estos son los datos que des- criben los detalles de las existencias de un libro; por ejemplo, cuántos hay en existencia, el nivel actual cuando se ha hecho una requisición a las edi- toriales, y la localización de los libros dentro del almacén. NotaEmpaque. Esta es una nota enviada con una colección de libros al cliente. La nota de empaque contiene información acerca de cuántos libros se enviaron y la tarifa de envío aplicada. También puede contener detalles de algunos libros, que no pudieron ser enviados porque no se encontraban en las exis- tencias. Tarjetacrédito. Un cliente pagará por sus libros mediante una tarjeta de crédito. El sistema permite al cliente pre-registrar su o sus tarjetas, para que no tenga que reescribirlas cada vez que haga una orden.

Registro

/ / ’/ Q------- Comprobar pedido A \

Borrar tarjeta de crédito

Registrar tarjeta de crédito

FIGURA 22.25. Algunos casos de uso para el actor Cliente.

Estas fueron, entonces, las clases identificadas princi- palmente. También se identificaron un número de actores:

Cliente. Este es el actor principal: la persona que lleva a cabo las acciones, que resultan en los mayo- res cambios de estado del sistema. Administrador de marketting. Es un actor importante que ajusta muchos de los parámetros del sistema, tales como el precio de los libros. Administrador del control de inventarios. Alguien que controla los inventarios en un almacén y toma decisiones acerca de las órdenes. Existen un gran número de casos de uso asociados

con estas acciones, muchas de ellas asociados con el actor cliente, se muestran en la Figura 22.25.

La selección de casos de uso asociados con el Cliente, y las mostradas en la Figura 22.25 incluyen casos de uso para:

Registro. Aquí el cliente proporciona su nombre y su clave. Una vez registrada, pueden examinar el catálogo de libros. Ordenar. Aquí el cliente ordena una o más copias de un libro. Realizar. El cliente completa la orden y ordena al sis- tema iniciar el proceso en que la orden se despacha. Buscar un libro. El cliente busca, en el catálogo en línea, un libro específico. Eliminar tarjeta de crédito. Aquí el cliente puede eli- minar una o más de las tarjetas de crédito registra- das y asociadas con él. Registrar tarjeta de crédito. Aquí el cliente registra una o más de sus tarjetas de crédito al sistema. Una porción de uno de estos diagramas de clase para

el sistema, se muestra en la Figura 22.26. Un número de roles asociados con el diagrama se ha omitido; regu- larmente se incluyen. Algunas de las relaciones entre clase, también se omitieron.

El diagrama muestra muchas de estas clases antes descritas. Las únicas clases que se omitieron son: Ordensatisfecha y OrdenEspera. Estas dos clases son especializaciones de la clase Orden, que representa una orden de libros para un cliente.

DeQrden

FIGURA 22.26. Una sección de un diagrama de clases para el caso de estudio.

399

Page 15: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del

 

 

 

 

 

 

 

 

 

 

 

 

 

INGENIERfA DEL SOFTWARE. UN ENFOQUE PRACTICO

Cuando se hace un pedido, algunos de los artículos pedidos pudieron no haberse servido, porque los libros no estaban en existencia. Cuando esto ocurre, la orden se divide en dos: todos los libros que pueden propor- cionarse en un objeto Ordensatisfecha, y aquellos que no pudieron encontrarse, se registran en un objeto Orden- Espera. Las relaciones en el diagrama de clases se deta- llan a continuación.

Un almacén se asocia con un número de registros de existencias, los cuales detallan los libros almacena- dos en el almacén. Un simple almacén se asocia con uno o más registros de existencia. Un registro de existencia se asocia con un solo libro, y un libro se asocia con un solo registro de existencia. Una orden puede consistir en un número de líneas de orden, y una línea de orden será asociada con una sola orden. Un cliente registrará su número de tarjeta de crédito al sistema, un número de tarjeta de crédito se asocia con un solo cliente. Un cliente se asocia con un número de órdenes satis- fechas, las cuales se realizan sobre un período de tiempo. Cada orden satisfecha se asocia con un solo cliente. Un cliente se asocia con un número de órdenes en espera, que actualmente no pueden ser satisfechas. Cada orden en espera se asocia con un solo cliente. La Figura 22.26 muestra solo algunas de las rela- - -

cienes involucradas, por ejemplo, existe una relación

entre tarjetas de crédito y órdenes, en virtud de que una tarjeta de crédito particular se utiliza para pagar una orden. De cualquier manera, se muestra suficiente deta- lle para proporcionar una indicación de qué tan com- plicado se ve un diagrama de clases UML.

Un ejemplo de diagrama de secuencias asociado con el caso en estudio se muestra en la Figura 22.27.

Aquí el cliente ordena un libro. Esto resulta en el registro de existencias para el libro consultado, y se ajus- ta si el libro está en existencia. Si el libro está en exis- tencia, un objeto de tipo línea de orden se crea, el cual se anexa a una orden, la cual se construye conforme el cliente navega por el sitio web de Libros-en-línea. El diagrama final (Fig. 22.28) muestra un diagrama de esta- do para el objeto Orden.

Un cliente primero realiza la orden, y el estado del objeto Orden se vuelve orden parcial; entonces se da al cliente la opción de añadir más libros o de eliminar libros de su orden. En cualquier momento de la construcción de la orden, el cliente puede cancelar la orden, esto con- duce a la terminación. Cuando el cliente indica que se ha llegado al fin de la orden, entonces la orden se vuel- ve una orden de libros completa. En este punto, el clien- te tiene dos opciones: cancelar al orden o especificar el tipo de envío que se usará para la orden. Si se seleccio- na el tipo de envío, entonces la orden se convierte en una orden completa. En esta etapa, el cliente tiene otras dos opciones: confirmar la orden, en este caso la orden se envía para ser procesada, o cancelar la orden. Ambas opciones conducen al punto de salida del diagrama de estados.

TOS

La etapa final de desarrollo, dentro del ciclo de vida orientada a objetos, es la programación. No es la intención de este libro llegar a más detalle acerca de este proceso; la programación es analizada como importante pero como actividad subsidiaria al análi- sis y diseño; pero se proporciona una pequeña intro- ducción en el lenguaje de programación Java. La sección otras lecturas y fuentes de información al final del capítulo detalla un gran número de buenos libros sobre el tema.

El proceso de programación involucra la conversión de un diseño orientado a objetos en un código de pro- grama. Efectivamente, esto significa que las clases defi- nidas en el diseño deben ser convertidas en clases expresadas en un lenguaje de programación orientado a objetos como Java, C++ o SmallTalk. Esta sección se concentra en Java, que se está volviendo rápidamente el lenguaje de programación de facto, para desarrollar los modernos sistemas distribuidos.

Una clase en Java se introduce por medio de la pala- bra clave class, dentro del código para la clase; el pro- gramador define los atributos y operaciones para la clase.

Un ejemplo del código esqueleto de una clase se mues- tra a continuación.

clacc Cliente { priva te String NombreCl i en t e; priva te String DireccionCl i en t e; // se definen más atributos aquí public String obtenerNombreCliente/ ) i //código para obtenerNombreCliente 1 public void modificarDireccionCliente ( String di recci on j i //código para modificarDireccionCliente 1

//código para las operaciones restantes 1

La primera línea de código define que el nombre de la clase será Cliente. Inmediatamente a continuación, las descripciones de atributos de clase. En el código anterior, solo se muestran dos atributos: el nombre del

400

Page 16: Guia de Estudio de Ingenieria del Software IIfiles.rfernandez.webnode.es/200000012-5265353606/Guia de Estudio de... · terminación(de(una(serie(de(movimientos(en(un(robot)(que(ocurren(dentro(del