modulo: análisis y diseño de sistemas - cs.buap.mxjuan.gonzalez/temp/clase 6.pdf · modulo:...

120
Modulo: Análisis y Diseño de Sistemas Dr. Juan Manuel González Calleros Benemérita Universidad Autónoma de Puebla Email: [email protected] [email protected] Twitter: @Juan__Gonzalez Facebook: Juan Glez Calleros Reuniones pedir cita

Upload: truongngoc

Post on 22-Sep-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Modulo: Análisis y Diseño de Sistemas

Dr. Juan Manuel González CallerosBenemérita Universidad Autónoma de Puebla

Email: [email protected]

[email protected]

Twitter: @Juan__Gonzalez

Facebook: Juan Glez Calleros

Reuniones pedir cita

1-2

DIAGRAMAS DE CLASE

1-3

@Juan__Gonzalez

�Cuando se han identificado muchos objetos en un dominio, decimos que una clase es una abstracción que describe un grupo de objetos que tienen:� propiedades en común (atributos)� comportamiento en común (operaciones)� relaciones comunes con otros objetos (asociaciones) � semántica en común (descripción breve)

�Una clase es una abstracción porque:� enfatiza características relevantes al sistema� suprime otras características

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

3

¿Qué son las clases?

1-4

@Juan__Gonzalez

�En los lenguajes Orientados a Objetos, las clases están compuestas por dos características básicas: � Atributos� Comportamientos.

�Los atributos son las características individuales que diferencian un objeto de otro y determinan su apariencia (ej. color, estilo, marca,etc.), su estado (ej. encendido o pagado) y otras cualidades.

�El comportamiento de una clase determina la manera en que un objeto de esa clase opera o reacciona, esto es, su funcionabilidad (por ejemplo: vuela, rueda, navega, ladra, maulla, suma, resta, calcula, etc.).

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

4

Clases

1-5

Ejemplo: la clase Auto

�La clase AUTO es el modelo abstracto del concepto de un Auto.

�La descripción de la clase Auto podría ser:� Tiene Puertas� Tiene Llantas� Tiene Motor� Tiene Ventanas� Tiene modelo� Arranca� Frena� Se desplaza� Usa gasolina� Etc.

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

5

Una clase es como

un molde o plantilla

1-6

La clase AUTO

�A partir de la clase AUTO se pueden crear muchos objetos, o sea muchos autos, con características diferentes (color, tamaño, diseño, material, etc.), pero que pueden ser reconocidos como autos.

�Por ejemplo: un Bochito, un Audi, un BMW, un Chevy, el auto del vecino, tu auto, mi auto, etc.

�Todos estos pueden ser representadas como objetos diferentes y únicosde la clase AUTO.

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

6

Clase Auto

Objeto

Objeto

1-7

@Juan__Gonzalez

�Un conjunto de objetos que comparten una estructura común y un comportamiento común

�Un objeto no es más que una instancia de la clase –> un objeto no es una clase

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

7

Qué es una clase y qué no es una clase

1-8

@Juan__Gonzalez

�Una clase en una definición abstracta de un objeto� Define la estructura y comportamiento de cada objeto

en la clase� Sirve como una plantilla para crear objetos

�Un objeto es una instancia concreta de una clase (un ejemplar)� Los objetos pueden agruparse en clases

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

8

Clases v.s. Objetos

Estudiante

Clase

A. PinedaG. Rodríguez

E. Gomez

1-9

@Juan__Gonzalez

• ¿Cuántas clases ves?

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

9

Clases v.s. Objetos

1-10

@Juan__Gonzalez

• Modelar la clase lavadora

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

10

Ejemplo de una clase

LAVADORA

marca

modelo

capacidad

Programar

Poner ropa

Cerrar puerta

lavar

Atributos

Comportamiento

1-11

@Juan__Gonzalez

� Pensemos en las clases de su proyecto, extiendan lo que vimos al inicio del tema

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

11

Actividad

Nombre de la clase

Atributos

comportamientos

1-12

Herencia

�La herencia representa una jerarquía de abstracciones (clases).

�Básicamente, la herencia define una relación entre clases, el la que una clase comparte la estructura de comportamiento definida en una o más clases

�De forma simple, la herencia es el proceso mediante el cual un objeto adquiere las propiedades de otro.

M.C. Yalu Galicia (FCC/BUAP) 12

1-13

@Juan__GonzalezM.C. Yalu Galicia (FCC/BUAP) 13

Herencia

1-14

@Juan__Gonzalez

�Cada vez que se especializa una clase, esta clase hereda atributos y comportamientos de su superclase; pero además se añaden nuevos comportamientos o se modifican alguno de losya heredados

�Veamos que hereda la clase leo de sus clases padre.

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

14

Herencia

CLASE QUE HEREDA

Vertebrados Espina dorsal

Mamíferos Se alimenta con leche materna

Carnívoros Al ser adulto se alimenta de carne

Leo Agrega: tipo y color de piel

1-15

@Juan__Gonzalez

• Semánticamente, la herencia denota una

relación “es un”.

• Por ejemplo, un oso es un tipo de

mamífero, una casa es un tipo de bien

inmueble.

• Así la herencia implica una jerarquía de

generalización/especialización, en la que

una subclase especializa el

comportamiento o estructura más general

de sus superclases.Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

15

Herencia

1-16

@Juan__Gonzalez

� Identifiquen una clase que agrupe todos estos objetos

� Agrupen diversos objetos en distintas clases

� Pensando en el concepto de herencia, construyan una jerarquía de clases

16

Actividad

1-17

@Juan__Gonzalez

• Polimorfismo es la habilidad que adquieren

los objetos de responder en forma

diferente al mismo mensaje.

• Es decir, el mismo mensaje que se envía a

muchos tipos de objetos, toma “muchas

formas” y de ahí viene el término

polimorfismo

Alg y EDM.C. Yalu Galicia (FCC/BUAP) 17

Polimorfismo

1-18

@Juan__Gonzalez

�Polimorfismo es la habilidad de esconderdiferentes implementaciones tras una sola interface

M.C. Yalu Galicia (FCC/BUAP) 18

Polimorfismo

Marca CMarca A

Marca B

1-19

@Juan__Gonzalez

�Pensemos en las FigurasGeometricas. Todas las FigurasGeometricas tienen como característica el poder calcular su área. Sin embargo, cada figura puede realizar esta operación de forma distinta.

Alg y EDM.C. Yalu Galicia (FCC/BUAP) 19

Ejemplo de Polimorfismo

Area = l*l Area= pi*r2Area=b*a2

Calcula Area

1-20

@Juan__Gonzalez

• Tomemos Medios de Transportes:

barco, avión y auto. Si les enviamos el

mensaje Desplázate, cada uno de

estos objetos los hará a su manera.

Alg y EDM.C. Yalu Galicia (FCC/BUAP) 20

Otro ejemplo,

1-21

@Juan__Gonzalez

• ¿Reflexiona sobre tus clases,

tendrán polimorfismo?

• Define la Herencia e identifica los

atributos y funciones comunes

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

21

Actividad

1-22

@Juan__Gonzalez

Bloques de Construcción UML

Elementos Relaciones Diagramas

Dependencia

• Relación entre dos elementos uno independiente a otrodependiente y puede afectar la semántica

Asociación

• Son conexiones entre objetos (rol, multiplicidad, calificador)

Generalización

• Especificación en donde el hijo comparte la estructura y elcomportamiento del padre

Realización

• Es una relación semántica entre clasificadores

0...1 *

Patrón empleado

1-23

@Juan__Gonzalez

�Los problemas del “mundo real”, son más complejos que modelar una simple clase, más bien, se tiene muchos objetos de distintas clases comunicándose unos con otros. Esto significa, que dichos objetos establecen relaciones.

�Básicamente las relaciones que se establecen son:�Asociación

�Dependencia

�Agregación

�Composición

�Herencia

�Realización

Relaciones entre clases

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

23

1-24

@Juan__Gonzalez

� La relación más simple entre clases es la asociación.

� Indica que dos clases tienen una relación que las asocia según el

papel que cada una juega con respecto a otra.

�Se usa la asociación para relacionar dos objetos que necesitan

colaborar enviándose mensajes

�En un diagrama de clases, la asociación se indica mediante una línea

continua que se dirige de un objeto a otro.

Relación de asociación

24

EmpresaPersona

Asociación

1-25

@Juan__Gonzalez

Relación de asociación

• Asociaciones

Cuando las clases se conectan entre sí de

forma conceptual, esta conexión se

conoce como asociación.

1-26

@Juan__Gonzalez

• Cuando una clase se asocia con otra, cada una

de ellas juega un papel dentro de tal asociación.

En la asociación entre un jugador y un equipo, si

el equipo es profesional, éste es un empleador y

el jugador es un empleado.

• La asociación puede funcionar en dirección

inversa: un equipo emplea a jugadores.

1-27

@Juan__Gonzalez

• Las asociaciones podrían ser más

complejas que tan sólo una clase

conectada a otra.

1-28

@Juan__Gonzalez

Restricciones en las asociaciones.

• Algunas veces una asociación entre dos

clases debe seguir una regla, ésta se

indica al establecer una restricción junto a

la línea de asociación. Por ejemplo: un

cajero atiende a un cliente, pero cada

cliente es atendido en el orden en que se

encuentre en la formación.

1-29

@Juan__Gonzalez

• Otro tipo de restricción es la relación O

(distinguida como {Or}) en una línea

discontinua que conecte a dos líneas de

asociación.

1-30

@Juan__Gonzalez

�Para aclarar su significado, En la línea se puede anotar el nombre de

la relación (normalmente un verbo) y con un triángulo se indica la

dirección en la que hay que leer dicho nombre.

� Por default la asociación es bi-direccional.

�Opcionalmente se pueden colocar un nombre de rol para cada clase,

dicho rol es un nombre alternativo que representa el papel que toma

cada clase en la relación

Relación de asociación en UML

30

EmpresaPersona Trabaja en �

Trabajador Empleador

1-31

@Juan__Gonzalez

� La Multiplicidad es el número de instancias de una clase

relacionadas a UNA instancia de otra clase

�Para cada asociación existen dos decisiones que tomar en cuanto a

multiplicidad; una para cada extremo de la asociación

�Por ejemplo, en la conexión entre Profesor y Curso

� Cada instancia de Profesor, puede impartir muchos (cero o más)

cursos

� Para cada instancia de Curso, hay exactamente un Profesor

Relación de asociación

31

CursoProfesor

0.. *1

1-32

@Juan__Gonzalez

�Cada extremo de la asociación contiene un indicador de

multiplicidad

� Indica el número de objetos que participan en la relación

Indicadores de Multiplicidad

32

Sin especificar

Exactamente uno 1

Muchos (Cero o más, *

sin limite) 0..*

Uno o más 1..*

Cero o uno 0..1

Rango Específico 2..4

Varios Rangos 2,4..6,8

1-33

@Juan__Gonzalez

� La multiplicidad responde dos preguntas

� ¿La asociación es obligatoria o es opcional?

� ¿Cuál es el mínimo y máximo número de objetos de una clase que

se pueden enlazar a un objeto de la otra clase?

� Las decisiones de multiplicidad exponen muchas suposiciones

escondidas acerca del problema que se está modelando

� ¿Se puede ir el maestro de licencia o tomar vacaciones?

� ¿Puede un curso tener dos maestros?

¿Qué significa la Multiplicidad?

33

CursoProfesor

1.. *1

1-34

@Juan__Gonzalez

�Esta relación implica dependencia entre clases. Se

denota mediante una línea punteada con flecha.

� Siempre es dirigida (La clase A depende de la clase B)

�La dependencia es causada porque un método en la clase A temporalmente “usa un” objeto de la clase B.

Relación de Dependencia

34

BA

“usa una”

1-35

@Juan__Gonzalez

• Por ejemplo, un Pedido usa una Cuenta,

porque un pedido necesita acceder a los

objetos de tipo cuenta para comprobar el

estado de un crédito

– La flecha es dirigida hacia la clase “usada”

Relación de Dependencia

35

CuentaPedido

“usa una”

1-36

@Juan__Gonzalez

�Es común que un objeto contenga objetos de otras clases, tal capacidad se llama agregación.

�Por ejemplo: Un objeto Auto tiene o esta formado por objetos de otras clases (Llantas, Motor, etc.)

�La relación que se establece entre estos objetos se llama “tiene un”, “es parte de” o “consta de”� Ejemplo: Un auto tiene un motor

� Un escuela tiene alumnos

�La relación de agregación, es una relación “débil” entre los objetos, ya que estos pueden existir independientemente del “todo”. Es decir, una llanta “puede existir”, sin ser parte de un auto.

Relación de agregación

36

1-37

@Juan__Gonzalez

Relación de Agregación: representación en UML

37

Auto

Motor

Agregación: diamante vacío

Llanta

Tiene un

1..4

1

multiplicidad

1-38

@Juan__Gonzalez

Relación de Agregación: otro ejemplo

38

País Estado1..*

Playa

0..*

1-39

@Juan__Gonzalez

Otro ejemplo

39

1-40

@Juan__Gonzalez

�Es una relación de composición es muy parecida a la

anterior (del tipo tiene un), sólo que en este caso la

relación es mas fuerte.

� La vida de los objetos incluidos como atributos es

totalmente dependiente de la vida del objeto contenedor

� Por ejemplo, una cara puede ser descrita, por los

elementos que la forman; es decir; una cara está

compuesta por un par de ojos, una boca y una nariz

� Tanto los ojos, la boca y la nariz, son objetos de otras

clases: la clase Ojo, la clase Boca y la clase Nariz; sin

embargo no existen independientemente a una cara.

Relación de Composición

40

1-41

@Juan__Gonzalez

Relación de composición:UML

41

Cara Ojo2

Boca

1

Nariz

1

Composición: diamante lleno

Tiene un

1-42

@Juan__Gonzalez

• Identifica las relaciones entre tus clases

Actividad

42

1-43

@Juan__Gonzalez

�Como ya comentamos, la herencia permite especificar jerarquías de clases en las que unas clases toman propiedades de otras (atributos, operaciones y relaciones).

�A la clase superior se la llama superclase mientras que a la clase que hereda las propiedades de la anterior se la llama subclase.

� La relación que se establece entre clases que heredan, se llama “es un”

� Por ejemplo: � Una persona es un ser humano

� Un perro es un canino� Un auto es un medio de transporte

Relación de Herencia o generalización

Yalú Galicia /Miguel Rodríguez

(FCC/BUAP)

43

1-44

@Juan__Gonzalez

Relación de Herencia en UML

44

Vehículo

BicicletaCoche

es un

+ mover ()+ detener ()

+llenarGasolina()

Estas métodos

se heredan

Un coche es un vehículo, pero NO todos los vehículos

son coches!!

1-45

@Juan__Gonzalez

Herencia Simple

45

+Abstracta

+Concreta

A este nivel, la

clase es

abstracta

1-46

@Juan__Gonzalez

� La mayoría de las veces una clase hereda de solo otra clase

(herencia simple), sin embargo una misma clase puede heredar de

varias clases distintas (herencia multiple).

�Esto puede ayudar a simplificar el Modelo de Analisis, pero debe

usarse juiciosamente, ya que puede ser dificil de implementar en el

Modelo de Diseño.

Aeroplano Helicóptero Lobo Caballo

ObjetoVolador Animal

Pájaro

Herencia

múltiple

Herencia múltiple

46

1-47

@Juan__Gonzalez

�Continuar las relaciones de tus clases

Actividad colaborativa

47

1-48

@Juan__Gonzalez

• Recordamos que polimorfismo se define

como la capacidad de objetos de clases

diferentes, relacionados mediante

herencia, a responder de forma distinta al

mismo mensaje (llamada a un método)

• Es decir, el mismo mensaje que se envía a

muchos tipos de objetos, toma “muchas

formas” y de ahí viene el término

polimorfismo.

Polimorfismo

48

1-49

@Juan__Gonzalez

• La definición del método reside en la superclase

• La implementación del método reside en la subclase

• La invocación es resuelta al momento de ejecución (ligadura dinámica)

Polimorfismo - Ejemplo

49

Transporte

Avanzar

Frena

r

Transporte

Avanzar

Frena

r

Transporte

Avanzar

Frena

r

Transporte

avanzar()

frenar()

1-50

@Juan__Gonzalez

Representación polimorfismo UML

50

Transporte

CoheteCaballo

+ avanzar ()+ frenar ()

En itálicas

denota clase

abstractas

+ avanzar ()+ frenar ()

+ avanzar ()+ frenar ()

Carro

+ avanzar ()+ frenar ()

La definición de estos

métodos se heredan,

pero hay redefinirlos o

sobreescribirlos

1-51

@Juan__Gonzalez

Resumen de relaciones

• Asociación. Indica que dos clases tienen una relación que las asocia según el papel que cada una juega con

respecto a otra.

• Dependencia. La dependencia es causada porque un método en la clase A temporalmente “usa un” objeto de

la clase B.

1-52

@Juan__Gonzalez

Resumen de relaciones

• Agregación. La relación que se establece entre estos objetos se llama “tiene un”, “es parte de” o “consta de”

Auto

Motor

Agregación: diamante vacío

Llanta

Tiene un

1..4

1

multiplicidad

1-53

@Juan__Gonzalez

Resumen de relaciones

• Composición. La relación que se establece entre estos objetos se llama “tiene un”, sólo que en este caso la

relación es mas fuerte.

1-54

@Juan__Gonzalez

Herencia Simple

54

+Abstracta

+Concreta

A este nivel, la

clase es

abstracta

1-55

@Juan__Gonzalez

Representación polimorfismo UML

55

Transporte

CoheteCaballo

+ avanzar ()+ frenar ()

En itálicas

denota clase

abstractas

+ avanzar ()+ frenar ()

+ avanzar ()+ frenar ()

Carro

+ avanzar ()+ frenar ()

La definición de estos

métodos se heredan,

pero hay redefinirlos o

sobreescribirlos

1-56

@Juan__Gonzalez

Más sobre Clases

• Las clases son el centro operativo de un

sistema orientado a objetos.

• El sistema se compone de pequeñas

colecciones llamadas objetos.

• Las clases describen los diferentes tipos

de objetos que puede tener un sistema. Y

los diagramas de clase nos muestran qué

clases tenemos y sus relaciones.

1-57

@Juan__Gonzalez

4.1 Clases

• Analogía: Una guitarra es un objeto, una entidad propia. Este objeto es creada por cierta compañía, la cual crea cientos de ejemplares de un mismo tipo de guitarra (una misma clase de guitarra).

• A cada guitarra de este tipo se le llama ‘instancia’ de la clase.

• Cada instancia puede contener información sobre el objeto y el comportamiento de la misma. – Información: contiene 5 cuerdas

– Comportamiento: tocar música

1-58

@Juan__Gonzalez

4.1 ClasesAbstracción

• Para definir una clase se necesita saber si

es importante su existencia para el sistema que estamos modelando.

• Se debe obtener una abstracción justa

para el modelo, concentrándose en la información que el sistema necesita

saber, e ignorar lo irrelevante o lo que no

representa nada significativo para el

sistema.

1-59

@Juan__Gonzalez

4.1 ClasesEncapsulación

• Encapsular consiste en analizar cuáles son los datos internos (o ocultos) de un objeto y cuales son los que pueden interactuar con el exterior.

• Ejemplo de la guitarra: el cuerpo y las partes eléctricas

de la guitarra se pueden considerar como características

internas, y las cuerdas al contrario si pueden interactuar

con el exterior.

– De esta forma operaciones como serviciosElectricos pueden ser

encapsuladas y ofrecidas por la misma clase. Y otros objetos

ajenos mientras pueden interactuar con la guitarra usando la

operación tocar.

1-60

@Juan__Gonzalez

4.1 ClasesEncapsulación

• La encapsulación permite ocultar detalles propios, y da visibilidad solo a los datos que se escojan como accesibles.

• Los cambios hechos por métodos internos

de la clase no deben afectar el cómo la

ven otras partes del sistema, la interacción

externa debe ser la misma.

1-61

@Juan__Gonzalez

4.2 Clases en UML

• Se dibujan como un rectángulo dividido en

tres partes.

• Pueden no incluir las secciones de

atributos o operación.

1-62

@Juan__Gonzalez

4.3 Visibilidad

• Una clase puede permitir el acceso a otras

clases ver ciertos atributos y operaciones.

• En UML existen 4 tipos de acceso y son:

1-63

@Juan__Gonzalez

4.3 VisibilidadPublic (+)

• Es accesible por :

– Métodos de la

misma clase.

– Clases dentro del

mismo paquete.

– Clases dentro de

otro paquete.

1-64

@Juan__Gonzalez

4.3 VisibilidadProtected (#)

• Es accesible por :

– Métodos de la clase

– Otras clases, del

mismo u otro

paquete, que heredade la clase.

• No accesible por:

– Clases que no

hereden de ésta.

1-65

@Juan__Gonzalez

4.3 VisibilidadPackage visibility (~)

• Es accesible por:

– Métodos de la

misma clase

– Todos las clases

dentro del mismo

paquete.

• No accesible por:

– Clases de otros

paquetes.

1-66

@Juan__Gonzalez

4.3 VisibilidadPrivate (-)

• Es accesible por:

– Solo la clase en

donde fue

declarado el

atributo o método

• No accesible por:

– Ninguna clase

ajena a ésta.

1-67

@Juan__Gonzalez

4.4 Atributos de la clase

• Son los pedazos de información que representan a un

objeto.

• Se pueden declarar dentro del diagrama de clase en la

sección de atributos, o asociando atributos con la clase

como se muestra en la imagen:

1-68

@Juan__Gonzalez

4.4 Atributos de la claseNombre y tipo

• El nombre puede ser cualquiera que

represente la información que almacena.

No puede haber dos atributos con el

mismo nombre dentro de una clase.

• El tipo depende de la implementación de

la clase, pero puede ser una clase (como

String) o un tipo primitivo (como un int o

char).

1-69

@Juan__Gonzalez

4.4 Atributos de la claseMultiplicidad

• La multiplicidad permite especificar que un atributo es una colección de objetos.

• Los atributos trackbacks, comments y authors son colecciones de objetos. El asterisco [*] representa que pueden contener n elementos la colección.

• El 1 sobre BlogAccount representa que existe solo 1 clase de ese tipo y el * indica que puede haber n cantidad de clases de BlogEntry

1-70

@Juan__Gonzalez

4.4 Atributos de la claseMultiplicidad

• Entries, trackbacks y comments tienen una

propiedad que detalla la multiplicidad.

– {unique}: no existe ningún elemento repetido

en la colección

– {ordered}: indica que la colección esta

organizada por algún criterio de orden.

1-71

@Juan__Gonzalez

4.4 Atributos de la clasePropiedades

• Existen muchas diferentes propiedades para las clases. La mas usada es readOnly, pero existen otras como union, subsets, redefines, composite.

• readOnly: si un atributo la posee, significa que su valor no puede ser modificado despues de ser asignado. En Java se implementa:

private final String cantidad = 2

1-72

@Juan__Gonzalez

4.5 Operaciones

• Describen lo que una clase puede hacer.

• No especifican cómo lo van a hacer.

• En UML se componen de un nombre, seguidos de dos ( ) donde pueden nombrarse los parámetros necesarios

para realizar su trabajo, y por último se escribe el tipo de

dato que regresa (return).

1-73

@Juan__Gonzalez

4.5 OperacionesParámetros

• Son los datos que requiere una operación

para realizar su trabajo. Puede requerir

más de un parámetro por operación.

• Ejemplo: la operación addEntry requiere

un parámetro llamado newEntry, y este

dato es de tipo BlogEntry (una clase).

1-74

@Juan__Gonzalez

4.5 OperacionesTipos de retorno (return)

• Se refieren al tipo de objeto que va a devolver la

operación.

• Se especifica después de los ( ) seguidos por

dos puntos :

• No es necesario que siempre devuelvan un dato.

En ese caso se le llama retorno del tipo void.

1-75

@Juan__Gonzalez

4.6 Secciones estáticas

• Algunos atributos, operaciones o toda la clase

pueden considerarse estáticas.

• Los atributos declarados en ejemplos anteriores

son no estáticos, lo que significa que cada objeto

creado de una clase tiene sus propios atributos y operaciones.

• Cuando se requiere que todos los objetos, de

una clase particular, tenga la misma copia de los

atributos y operaciones, entonces se hace uso

del modificador static.

1-76

@Juan__Gonzalez

4.6 Secciones estáticas

• Cuando un atributo u operación se declara como

estática, se le asocia directamente a la clase que

pertenece y no a los objetos instanciados.

• Ejemplo: un contador que almacene el número

de todas los objetos instanciados de cierta clase.

El atributo contador debe ser estático debido a

que su valor debe ser el mismo en todas las

instancias, es decir, pertenece a la clase y no a

las instancias.

1-77

@Juan__Gonzalez

4.6 Secciones estáticas

• En UML el atributo u operación estática se

señala subrayando la declaración

completa:

1-78

@Juan__Gonzalez

• Visibilidad

La visibilidad se aplica a atributos y operaciones, y establece la proporción en que otras clases podrán utilizar los atributos y operaciones de una clase dada.

Existen 3 niveles de visibilidad:

1. Nivel público, en el cual la funcionalidad se extiende a otras clases.

2. Nivel protegido, en el que la funcionalidad se otorga sólo a las clases que se heredan de la clase original.

3. Nivel privado, en el sólo la clase original puede utilizar el atributo u operación.

1-79

@Juan__Gonzalez

• En una televisión, modificarVolumen() y

cambiarCanal() son operaciones públicas

en tanto que dibujarImagenEnPantalla()

es privada.

• En un automóvil, acelerar() y frenar() son

operaciones públicas, pero

actualizarKilometraje() es protegida.

+ Nivel público

- Nivel privado

# Nivel protegido

1-80

@Juan__Gonzalez

Relaciones

• UML no se trata solo de declarar atributos y

operaciones. Existen muchas operaciones

especiales que hacen de UML un lenguaje de

modelado extenso.

– Existen varios tipos de relaciones entre clases.

– Declaración de clases abstractas.

– Interfaces que nos permiten nombrar las operaciones

sin hacer alguna implementación.

– Creación de clases genéricas, que puedan usarse

para cualquier tipo de dato.

– Entre otras.

1-81

@Juan__Gonzalez

5.1 Relaciones entre clases

• Las clases generalmente trabajan en conjunto con otras,

usando diferentes tipos de relaciones.

• Existen 5 tipos de relaciones en UML

– Dependencia

– Asociación

– Agregado

– Composición

– Herencia

1-82

@Juan__Gonzalez

5.1 Relaciones entre clasesDependencia• Esta relación declara que una clase requiere conocer acerca de otra para usar los objetos de esa clase.

• Ejemplo: una interfaz requiere usar la información de un objeto del tipo BlogEntry para

mostrarla en pantalla, usamos la flecha de

dependencia.

1-83

@Juan__Gonzalez

5.1 Relaciones entre clasesDependencia

• La dependencia solo implica que los

objetos de la clase pueden trabajar juntos. Se dice que los objetos de ambas

clases son dependientes uno del otro,

trabajan juntos en tiempo de ejecución.

• Es la mas débil de todas las relaciones.

1-84

@Juan__Gonzalez

5.1 Relaciones entre clasesAsociación

• Se refiere a que la clase tendrá una referencia a

uno o varios objetos de la otra clase, en forma

de atributo.

• Se utiliza cuando una clase necesita trabajar con

un objeto de otra clase.

• Ejemplo: se asocian 0 o varios objetos BlogEntry a una sola clase BlogAccount

1-85

@Juan__Gonzalez

5.1 Relaciones entre clasesAgregado

• Es parecida a la asociación. Indica que una

clase tiene objetos que puede compartir con otra

clase. La relación significa “tiene un”.

• Se demuestra con un diamante vacío.• Ejemplo: un autor tiene una cuenta de blogs. Puede incluso compartir una

cuenta con otros autores, también tiene control total sobre sus objetos.

1-86

@Juan__Gonzalez

5.1 Relaciones entre clasesComposición

• Tiene un comportamiento similar al agregado. En UML

se denota con un diamante relleno.

• Ejemplo: la introducción y el cuerpo de un blog son

partes individuales del mismo, no se comparte con las

demás partes de BlogEntry. Si se elimina un objeto

BlogEntry, todas sus partes se van con el.

1-87

@Juan__Gonzalez

5.1 Relaciones entre clasesHerencia

• Se usa para describir que una clase es un tipo

de otra clase. Responde a “es un”.

• Las clases de abajo heredan todos los atributos

y métodos que son declarados en las clases

generalizadas. Y también pueden agregar sus

propios especializados métodos y atributos.

1-88

@Juan__Gonzalez

5.1 Relaciones entre clasesHerencia – Múltiple

• UML soporta la herencia múltiple, aunque no es

soportado por lenguajes modernos como Java, C#.

• Cuando se hereda de dos clases, existe la posibilidad de

que se encuentren atributos o métodos repetidos.

Ejemplo:

1-89

@Juan__Gonzalez

5.2 Restricciones

• Se usan cuando queremos restringir las

formas en que una clase trabaja.

• Se utiliza una condición que impide a la

clase dejarla en el estado que esta, e

invoca una acción.

• UML llama a un lenguaje llamado OCLpara hacer uso de las restricciones.

1-90

@Juan__Gonzalez

5.3 Clases abstractas

• Cuando creamos una clase generalizada,

vemos que algunos métodos de las clases

especializadas van a ser implementados

de diferente manera. Dichos métodos se

declaran abstractos y su implementación

se deja a las clases especializadas.

• En UML se declara que un método es

abstracto escribiendo su nombre en

cursiva. Si una parte es cursiva, el nombre

de la clase también debe serlo.

1-91

@Juan__Gonzalez

5.3 Clases abstractas - Java

• En Java esta es la forma de implementar

una clase y metodos abstractos.

public abstract class Store{

public abstract void store(Article[] a);

public abstract Article [] retrieve( );

}

• No existe una implementación del método,

solo declaración de los parámetros y el

tipo de retorno.

1-92

@Juan__Gonzalez

5.3 Clases abstractas - Java

• No puedes crear un

objeto de una clase

abstracta (Store), pero

si de la que incluye la

implementación del

método abstracto

(Blogstore).

• Para implementar

métodos de clases

abstractas

necesitamos hacer

1-93

@Juan__Gonzalez

5.4 Interfaces

• Si queremos declarar los métodos que una

clase en concreto debe implementar, y no

queremos usar clases abstractas (por el

uso de la herencia), podemos utilizar

interfaces.

• Son una colección de operaciones que no

tienen una implementación.

1-94

@Juan__Gonzalez

5.4 Interfaces

• En UML se escriben de dos diferentes maneras:

• Y su implementación en Java es:public interface EmailSystem {

public void send(Message m);

1-95

@Juan__Gonzalez

5.4 Interfaces

• Para denotar la implementación de los

métodos de una interfaz, se le asocia a

esta con una clase.

1-96

@Juan__Gonzalez

5.5 Clases genéricas

• Cuando se declara un parámetro genérico, se

refiere a que dicha clase a la que se asigne

trabajara con otra clase, no importando cual

será.

• Se denota usando un rectángulo punteado que

lleva dentro el tipo parametrizado, que

representa a otra clase.

1-97

@Juan__Gonzalez

5.5 Clases genéricas

• En el diagrama anterior, E no es una clase

dentro del modelo; E es un sustituto para un

objeto de otro tipo que no sea de la misma clase ListOfThings

• El ejemplo mostrado trata de una lista, los genéricos generalmente son utilizados para

expresar listas, que pueden almacenar cualquier

tipo de dato, sin tener que hacer diferentes

implementaciones de listas.

1-98

@Juan__Gonzalez

Funciones básicas de una clase

• Toda clase debe tener el patrón CRUD

– Create (Constructores) – Caso Especial

– Read (Getters)

– Update (Setters)

– Delete (Destructores)

1-99

@Juan__Gonzalez

Clase Abstracta

• Las jerarquías de clases es común para el

diseño de algunas clases que nunca tendrán instancias, y están destinadas a ser utilizadas sólo por las subclases

• No toda raíz es abstracta, aunque es deseable

Fuente: The essence of OOP

with Java and UML

1-100

@Juan__Gonzalez

Clase Abstracta

• En muchos casos las clases abstractas

definen las funciones comunes pero en

términos de código estarán vacías.

• La programación se hace en las subclases

– Los animales comen, corren, etc.

– La especificación de lo que hacen se da en

las subclases

• En Java las Interfaces son abstractas

Fuente: The essence of OOP

with Java and UML

1-101

@Juan__Gonzalez

Clase Concreta

• Es aquellas de que se pueden derivar

instancias u objetos

– Perro

– Gato

1-102

@Juan__Gonzalez

Interfaces

• Diseñadas para indicar el comportamiento

a seguir por un conjunto de subclases.

– Solamente tiene una lista de funciones

– No tiene atributos

• Toda subclase esta obligada a sobre-

escribir sus métodos

1-103

@Juan__Gonzalez

Interfaces

• Apoya la herencia múltiple

– Es común que una clase sea del interés de

muchas clases

1-104

@Juan__Gonzalez

Interface

• En Java, por ejemplo, es la única forma de

dar soporte a la herencia múltiple ya que:

– podemos implementar todas las interfaces

que se desee

• Listeners

– Podemos extender sólo una clase

1-105

EJEMPLO

1-106

@Juan__Gonzalez

Clases

Fuente: The essence of OOP

with Java and UML

1-107

@Juan__Gonzalez

Composición

Fuente: The essence of OOP

with Java and UML

1-108

@Juan__Gonzalez

Herencia

Fuente: The essence of OOP

with Java and UML

1-109

@Juan__Gonzalez

Polimorfismo

Fuente: The essence of OOP

with Java and UML

1-110

@Juan__Gonzalez

Poniendo todo Junto

Fuente: The essence of OOP

with Java and UML

1-111

EJEMPLO DE CODIFICACIÓN

1-112

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-113

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-114

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-115

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-116

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-117

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-118

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-119

@Juan__Gonzalez

Ejemplo de Codificación

Fuente: The essence of OOP

with Java and UML

1-120

@Juan__Gonzalez

Tarea

• Hacer el diagrama de clases de tu sistema