diseño’orientado’aobjetos’ -...

9
27/03/11 1 Diseño orientado a objetos Curso de Programación en Java Jesús Montes Sánchez jmontes@fi.upm.es Marzo 2011 Contenidos Fundamentos del diseño orientado a objetos Casos de uso Diseño orientado a objetos Fundamentos del diseño orientado a objetos Programación orientada a objetos Facilidad de diseño y relación con el mundo real Reusabilidad y facilidad de mantenimiento Sistemas más complejos Abstracción Trabajo en equipo Del lenguaje máquina hacia el mundo real Resuelve problemas complicados. No está pensado para tareas sencillas Ciclo de vida del soQware Especificación Análisis Diseño Programación Validación Implantación Ciclo de vida del soQware Especificación y análisis Se especifican las tareas que va a realizar el sistema ¿QUÉ hace nuestro programa? Diseño Se dis[nguen las diferentes partes del sistema y su interacción ¿CÓMO lo hace?

Upload: lyhuong

Post on 29-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

1  

Diseño  orientado  a  objetos  Curso  de  Programación  en  Java  

   

Jesús  Montes  Sánchez  [email protected]  

 Marzo  2011  

Contenidos  

!   Fundamentos  del  diseño  orientado  a  objetos  

!   Casos  de  uso  

!   Diseño  orientado  a  objetos  

Fundamentos  del  diseño  orientado  a  objetos  

Programación  orientada  a  objetos  

!   Facilidad  de  diseño  y  relación  con  el  mundo  real  

!   Reusabilidad  y  facilidad  de  mantenimiento  

!   Sistemas  más  complejos  !   Abstracción  !   Trabajo  en  equipo  

!   Del  lenguaje  máquina  hacia  el  mundo  real  

!   Resuelve  problemas  complicados.  No  está  pensado  para  tareas  sencillas  

Ciclo  de  vida  del  soQware  

Especificación  

Análisis  

Diseño  

Programación  

Validación  

Implantación  

Ciclo  de  vida  del  soQware  

!   Especificación  y  análisis  !   Se  especifican  las  tareas  que  va  a  realizar  el  sistema  !   ¿QUÉ  hace  nuestro  programa?  

!   Diseño  !   Se  dis[nguen  las  diferentes  partes  del  sistema  y  su  interacción  !   ¿CÓMO  lo  hace?  

Page 2: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

2  

UML  (Unified  Modeling  Language)  

!   Lenguaje  unificado  de  modelado  

!   “Planos”  de  la  aplicación.  No  sirve  para  desarrollar,  sino  para  describir  (análisis  y  diseño)  

!   Se  u[lizan  diferentes  diagramas.  (13  [pos  en  UML  2.0)  

Especificación  y  análisis  

!   Definimos  de  forma  no  ambigua  QUÉ  va  ha  hacer  nuestro  programa.  

!   Funcionalidades  del  programa.  

!   Mecanismos  de  interacción  con  el  usuario.  

!   Como  interactúa  con  el  exterior.  

!   Definición  de  CASOS  DE    USO  

Sistema  y  entorno  

!   Sistema  !   El  programa  que  estamos  desarrollando.  Es  el  objeto  de  nuestro  

trabajo  y  es  lo  que  especificamos,  analizamos,  diseñamos,  programamos…  

!   Entorno  !   Todo  aquello  que  aparece  en  nuestro  análisis  y  diseño  y  que  es  

externo  al  sistema.  !   Usuarios  !   Otros  sistemas  !   ...  

!   Los  elementos  del  entorno  deben  ver  al  sistema  como  una  caja  negra  

Modelo  de  caja  negra  

!   Una  caja  negra  es  un  sistema  cerrado,  del  que  no  conocemos  su  funcionamiento.  

!   Una  caja  negra  ofrece  una  interfaz  con  el  exterior,  que  permite  usarla.  A  través  de  dicha  interfaz  los  usuarios  pueden  operar  la  caja  y  recibir  los  resultados  de  dicha  operación.  

!   El  proceso  de  análisis  y  diseño  se  basa  en  este  principio  fundamental.  Se  analiza  y  diseña  cada  componente  del  sistema  como  una  caja  negra  y  luego  se  profundiza,  repi[endo  el  proceso  en  su  interior.  

Casos  de  uso  

Casos  de  uso  

!   Cada  caso  de  uso  es  una  historia  de  uso  del  sistema.  

!   Los  casos  de  uso  SON  requisitos.  

!   Recogen  fundamentalmente  requisitos  funcionales.  

!   Los  casos  de  uso  NO  SON  ORIENTADOS  A  OBJETOS.  

Page 3: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

3  

Casos  de  uso  

!   Los  casos  de  uso  permiten  considerar  y  organizar  los  requisitos  en  el  contexto  de  los  obje[vos  y  escenarios  de  uso  del  sistema.  

!   Los  casos  de  uso  mejoran  la  comprensión  y  cohesión  frente  a  una  lista  extensa  de  caracterís[cas  inconexas.  

!   Ejemplo:  procesar  una  venta  El  cliente  llega  a  la  caja  con  los  arjculos  que  desea  comprar.  El  cajero  pasa  cada  arjculo  por  el  lector  de  código  de  barras  y  el  sistema  presenta  el  coste  total  de  la  compra.  El  cliente  paga  y  el  sistema  registra  y  valida  el  pago.  El  sistema  actualiza  el  inventario  y  produce  un  recibo.  El  cliente  se  va  con  sus  arjculos  y  su  recibo.  

Elementos  de  un  caso  de  uso  

!   Precondiciones  !   Aquello  que  se  debe  cumplir  para  que  el  caso  se  de.  

!   Actor  !   “Individuo”  involucrado  en  el  caso  de  uso.  

!   Escenario  o  curso  de  eventos  !   Lo  que  ocurre  cuando  se  da  el  caso  de  uso.  

!   Garanja  de  éxito  (postcondiciones)  !   Resultado  final  del  caso  de  uso.  

Actor  

!   En[dad  externa  al  sistema  que  interactúa  con  él.  

!   Tiene  comportamiento  propio.  

!   Pueden  ser  humanos,  organizaciones,  disposi[vos  informá[cos…  

!   Se  nombran  por  el  rol  que  desempeñan:  Cliente,  cajero,  administrador…  

!   En  un  diseño  con  varios  sistemas,  un  programa  (sistema)  puede  ser  actor  de  otro.  

Escenario  o  curso  de  eventos  

!   Una  secuencia  específica  de  acciones  e  interacciones  entre  los  actores  y  el  sistema  objeto  de  estudio.  

!   Puede  haber  escenarios  de  éxito…  !   Ejemplo:  procesar  una  venta  sin  incidencias  

!   …  y  escenarios  de  fracaso  !   Ejemplo:  Procesar  una  venta  donde  el  cliente  no  lleva  suficiente  

dinero  para  pagarla  y  debe  cancelarse  la  venta.  

Definición  de  caso  de  uso  

!   Un  caso  de  uso  es  una  colección  de  escenarios  de  éxito  y  fracaso  relacionados,  que  describe  a  los  actores  u[lizando  el  sistema  para  sa[sfacer  un  obje[vo.  

Planteamiento  de  casos  de  uso  

!   Estrategia  basada  en  Actores  !   Iden[ficar  actores  principales.  !   Iden[ficar  los  obje[vos  de  usuario  de  dichos  actores.  !   Definir  un  caso  de  uso  por  cada  obje[vo  de  usuario.  

!   Estrategia  basada  en  Eventos  !   Iden[ficar  eventos  a  los  que  debe  responder  el  sistema.  !   Relacionar  los  eventos  con  actores  y  casos  de  uso.  

Page 4: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

4  

Casos  de  uso  (UML)  

Nombre

Nombre

Nombre

Actor

Caso de uso

Sistema

Especificación  de  casos  de  uso  

!   Nombre  

!   Actores    

!   Escenario  principal  de  éxito  

!   Escenarios  alterna[vos  

Ejemplo:  programa  miBuzón  

! miBuzón  es  un  programa  que  permite  a  dis[ntos  usuarios  enviarse  mensajes  electrónicos.  

!   Un  usuario  de  miBuzón  usa  el  programa  a  través  de  su  interfaz.  

!   Un  usuario  de  miBuzón  se  iden[fica  con  su  nombre  y  su  contraseña.  

!   Los  usuarios  de  miBuzón  puede  enviar  mensajes  a  otros  indicando  el  nombre  del  des[natario  y  el  texto  del  mensaje.  

!   Los  usuarios  de  miBuzón  pueden  acceder  al  sistema  para  ver  si  [ene  mensajes  nuevos  en  su  buzón  y  leerlos.  

miBuzón:  Actores  

!   Usuario  !   La  persona  que  hace  uso  de  la  aplicación        

!   No  hay  mas  actores  

miBuzón:  casos  de  uso  

!   Enviar  un  mensaje  !   El  usuario  envía  un  mensaje  a  otro  usuario  del  sistema.  

!   Consultar  no  léidos  !   El  usuario  consulta  los  mensajes  recibidos  en  su  buzón.  

!   Iniciar  sesión  ¿?  !   NO:  No  es  un  caso  de  uso  porque  no  representa  un  uso  completo  

del  sistema.  El  obje[vo  del  usuario  nunca  es  iniciar  sesión  sin  mas.  

miBuzón:  diagrama  de  casos  de  uso  

Usuario

miBuzón

Enviar mensaje

Consultar no leídos

Page 5: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

5  

miBuzón:  enviar  mensaje  

!   Actores  !   Usuario  

!   Escenario  principal  1.  El  usuario  se  auten[ca  con  su  nombre  y  contraseña.  2.  El  sistema  da  la  bienvenida  al  usuario.  3.  El  usuario  selecciona  la  opción  de  enviar  un  mensaje,  indicando  el  

des[natario  y  texto  del  mensaje.  4.  El  sistema  envía  el  mensaje  y  confirma  la  operación.  

!   Escenarios  alterna[vos  !   Contraseña  incorrecta:  El  sistema  da  error  y  la  operación  termina.  !   Des[natario  no  encontrado:  El  sistema  da  error  y  se  vuelve  a  2.  

miBuzón:  consultar  no  leídos  

!   Actores  !   Usuario  

!   Escenario  principal  1.  El  usuario  se  auten[ca  con  su  nombre  y  contraseña.  2.  El  sistema  da  la  bienvenida  al  usuario.  3.  El  usuario  selecciona  la  opción  de  leer  los  mensajes  no  leídos.  4.  El  sistema  muestra  los  mensajes  al  usuario.  

!   Escenarios  alterna[vos  !   Contraseña  incorrecta:  El  sistema  da  error  y  la  operación  termina.  !   No  hay  nuevos:  En  4,  el  sistema  no[fica  que  no  hay  mensajes.  

Diseño  orientado  a  objetos  

Diseño  

!   La  especificación  y  análisis  en  casos  de  uso  nos  dan  una  idea  clara  de  las  funcionalidades  que  va  a  tener  nuestro  programa  y  como  se  interactúa  con  él.  

!   Hasta  ahora  hemos  visto  el  programa  completo  (sistema)  como  una  caja  negra.  

!   El  siguiente  paso  es  “entrar  en  la  caja”  y  definir  los  elementos  que  la  forman:  Clases  y  objetos.  

Iden[ficación  de  conceptos  

!   Iden[ficar  sustan[vos  y  frases  nominales,  en  los  casos  de  uso  completos,  en  los  requisitos,  y  en  descripciones  del  dominio.  

!   Intui[vamente  (mucho  cuidado  con  esto)  !   Cada  nombre  un  objeto  !   Cada  verbo  un  método  

!   En  general,  los  principales  conceptos  de  nuestro  programa  estarán  representados  por  clases  que  se  instanciarán  en  objetos.  

Iden[ficación  de  clases  

!   Iden[ficar  conceptos  

!   Iden[ficar  elementos  que  dis[nguen  a  esos  conceptos:  atributos  

!   Iden[ficar  relaciones  entre  clases  

!   A  par[r  de  los  casos  de  uso,  iden[ficar  la  interacción  entre  objetos  que  da  lugar  a  la  funcionalidad  deseada.  

Page 6: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

6  

Clases  (UML)  

!   Nombre  de  la  clase  

!   Atributos  

!   Métodos  

 

+  público,  -­‐  privado  

+ método1(par1): int+ método2(par1, par2): double+ método3(): void...

+ atributo1: int- atributo2: double...

Nombre

miBuzón:  iden[ficando  conceptos  

! miBuzón  es  un  programa  que  permite  a  dis[ntos  usuarios  enviarse  mensajes  electrónicos.  

!   Un  usuario  de  miBuzón  usa  el  programa  a  través  de  su  interfaz.  

!   Un  usuario  de  miBuzón  se  iden[fica  con  su  nombre  y  su  contraseña.  

!   Los  usuarios  de  miBuzón  puede  enviar  mensajes  a  otros  indicando  el  nombre  del  des[natario  y  el  texto  del  mensaje.  

!   Los  usuarios  de  miBuzón  pueden  acceder  al  sistema  para  ver  si  [ene  mensajes  nuevos  en  su  buzón  y  leerlos.  

miBuzón:  clases  

!   Interfaz  !   Los  elementos  de  comunicación  con  el  exterior.  

!   Persona  !   Cada  uno  de  los  usuarios  que  hacen  uso  del  sistema.  

!   Mensaje  !   Los  mensajes  que  los  usuarios  se  intercambian.  

!   Buzón  !   El  buzón  personal  de  cada  persona.  Con[ene  los  mensajes  

dirigidos  a  ésta.  

miBuzón:  diagrama  de  clases  

Buzón

- texto: String

Mensaje

- nombre: String- contraseña: String

Persona

Interfaz

Relaciones  entre  clases  

!   Asociación  

!   Agregación  

!   Composición  

!   Dependencia  

!   Generalización  

Asociación  

!   Relación  entre  clases  que  se  man[ene  en  el  [empo  

!   Puede  tener  un  nombre,  una  dirección  y  una  cardinalidad.  

!   Se  refleja  cuando  se  introducen  referencias  a  objetos  como  atributos  

!   Dependiendo  de  la  cardinalidad,  habrá  que  usar  arrays  o  estructuras  de  datos  

+ Operación1+ Operación2

- Atributo

Clase2

+ Operación1

- Atributo1- Atributo2

Clase1

- Atributo3

Page 7: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

7  

Agregación  

!   Asociación  con  contenido  semán[co.  

!   Una  clase  representa  el  todo  y  la  otra  una  parte  

!   La  parte  no  está  necesariamente  ligadas  al  todo  (puede  exis[r  sin  él)  

...

...

Pantalla

...

- Marca- Modelo

PC

- Monitor

Composición  

!   Caso  par[cular  de  agregación  

!   La  parte  no  existe  sin  el  todo  

!   En  Java  la  dis[nción  entre  agregación  y  composición  es  puramente  conceptual  (recolector  de  basura)  

...

...

Hoja

...

...

Arbol- Hojas *

Dependencia  

!   Indica  que  una  clase  hace  uso  de  otra.  

!   Una  clase  instancia  otro  objeto.  

!   Se  recibe  un  objeto  como  parámetro.  

!   Se  devuelve  un  objeto  como  resultado.  

...

...

Clase2

...

...

Clase1

Generalización  

!   Representa  herencia  entre  clases.  

!   Un  caso  par[cular  de  generalización  es  la  Realización,  que  se  da  cuando  se  hereda  de  una  clase  de  interfaz  

...

...

Clase hija

...

...

Clase padre

...

...

Clase1

...

...

<<interfaz>>Clase interfaz

Relaciones  como  atributos  

!   Cuando  una  relación  entre  clases  se  refiere  a  un  atributo  de  la  clase,  éste  se  pone  sobre  la  línea  que  representa  la  asociación.  

!   También  se  puede  poner  como  un  atributo  más  y  dejar  la  línea  vacía  

...

...

Pantalla

...

- Marca: String- Modelo: String

PC

- Monitor

...

...

Pantalla

...

- Marca: String- Modelo: String- Monitor: Pantalla

PC

miBuzón:  diagrama  de  clases  

- usuarios: List<Persona>

Interfaz

- mensajes: List<Mensaje>

Buzón

- nombre: String- contraseña: String- buzónPersonal: Buzón

Persona

- remitente: Persona- texto: String- destinatario: Persona

Mensaje

Page 8: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

8  

Operaciones  

!   A  par[r  de  los  casos  de  uso  iden[ficados,  se  describen  las  operaciones  del  sistema.  

!   Esta  descripción  se  puede  hacer  de  manera  informal  (en  texto)  o  mediante  diagramas  de  interacción.  Por  sencillez,  en  este  curso  lo  haremos  de  manera  informal.  

!   UML  proporciona  dos  [pos  de  diagramas  de  interacción:  diagramas  de  secuencia  y  diagramas  de  colaboración.  

!   La  descripción  de  estas  operaciones  dará  lugar  a  los  métodos  de  las  clases  del  sistema.  

 

miBuzón:  enviar  mensaje  

!   Caso  de  uso:  !   Escenario  principal  

1.  El  usuario  se  auten[ca  con  su  nombre  y  contraseña.  2.  El  sistema  da  la  bienvenida  al  usuario.  3.  El  usuario  selecciona  la  opción  de  enviar  un  mensaje,  indicando  el  

des[natario  y  texto  del  mensaje.  4.  El  sistema  envía  el  mensaje  y  confirma  la  operación.  

!   Escenarios  alterna[vos  !   Contraseña  incorrecta:  El  sistema  da  error  y  la  operación  termina.  !   Des[natario  no  encontrado:  El  sistema  da  error  y  se  vuelve  a  2.  

miBuzón:  enviar  mensaje  

1.  El  usuario  se  auten[ca,  indicando  su  usuario  y  contraseña.  

2.  La  interfaz  localiza  al  usuario  (objeto  Persona).  Si  la  contraseña  es  correcta  con[núa.  Si  no,  se  da  un  mensaje  de  error.  

3.  La  interfaz  solicita  el  nombre  del  des[natario  y  lo  busca.  Si  lo  encuentra  con[núa.  Si  no,  da  un  mensaje  de  error.  

4.  La  interfaz  solicita  el  texto  del  mensaje.  

5.  La  interfaz  crea  el  mensaje  y  se  lo  entrega  a  la  persona  des[no.  

6.  La  persona  des[no  almacena  el  mensaje  en  su  buzón.  

miBuzón:  enviar  mensaje  

Interfaz  

Persona  1  (rem.)  

Persona  2  (dest.)  

Mensaje  

Buzón  

Auten[car  

Enviar  mensaje  

Comp.  contraseña  

Crear  

Entregar  mensaje  

Guardar  mensaje  

miBuzón:  enviar  mensaje  

!   Métodos  necesarios:  !   Interfaz  

!   auten[car  (usuario,  contraseña)  :  Persona  ! enviarMensaje  (remitente,  des[natario,  texto)  

!   Persona  ! obtenerNombre  ()  :  String  ! comprobarContraseña  (contraseña)  :  Boolean  ! entregarMensaje(mensaje)  

!   Mensaje  ! crearMensaje  (remitente,  des[natario,  texto)  

!   Buzón  ! almacenarMensaje  (mensaje)  

miBuzón:  consultar  no  leídos  

!   Caso  de  uso  !   Escenario  principal  

1.  El  usuario  se  auten[ca  con  su  nombre  y  contraseña.  2.  El  sistema  da  la  bienvenida  al  usuario.  3.  El  usuario  selecciona  la  opción  de  leer  los  mensajes  no  leídos.  4.  El  sistema  muestra  los  mensajes  al  usuario.  

!   Escenarios  alterna[vos  !   Contraseña  incorrecta:  El  sistema  da  error  y  la  operación  termina.  !   No  hay  nuevos:  En  4,  el  sistema  no[fica  que  no  hay  mensajes.  

Page 9: Diseño’orientado’aobjetos’ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/disoo.pdf · 27/03/11 1 Diseño’orientado’aobjetos’ Curso’de’Programación’en’Java

27/03/11  

9  

miBuzón:  consultar  no  leídos  

1.  El  usuario  se  auten[ca,  indicando  su  usuario  y  contraseña.  

2.  La  interfaz  localiza  al  usuario  (objeto  Persona).  Si  la  contraseña  es  correcta  con[núa.  Si  no,  se  da  un  mensaje  de  error.  

3.  La  interfaz  solicita  a  la  Persona  sus  mensajes  no  leídos.  

4.  La  persona  solicita  a  su  Buzón  sus  mensajes  no  leídos.  

5.  La  interfaz  muestra  por  pantalla  los  mensajes  no  leídos,  si  los  hay.  

6.  El  buzón  se  vacía  

miBuzón:  enviar  mensaje  

Interfaz   Persona  

Buzón  

Auten[car  

Ver  no  leídos  

Ver  no  leídos  

Obtener  no  leídos  

Comp.  contraseña  

miBuzón:  enviar  mensaje  

!   Métodos  necesarios  (no  vistos  antes):  !   Interfaz  

! verNoLeídos()  

!   Persona  ! verNoLeídos()  :  List<Mensaje>  

!   Buzón  ! obtenerNoLeídos()  :  List<Mensaje>  

miBuzón:  diagrama  de  clases  

+ autenticar (usuario: String, contraseña: String)+ enviarMensaje(destinatario: String, texto: String)+ verNoLeídos()

- usuarios: List<Persona>

Interfaz

+ almacenarMensaje(mensaje: Mensaje)+ obtenerNoLeídos(): List<Mensaje>

- mensajes: List<Mensaje>

Buzón

+ obtenerNombre(): String+ comprobarContraseña(contr: String): Boolean+ entregarMensaje(mensaje: Mensaje)+ verNoLeídos(): List<Mensaje>

- nombre: String- contraseña: String- buzónPersonal: Buzón

Persona

+ crear(remit: Persona, dest: Persona, texto: String)

- remitente: Persona- texto: String- destinatario: Persona

Mensaje