Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma...

74
1 Interação dos Componentes

Transcript of Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma...

Page 1: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

1

Interação dos Componentes

Page 2: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

2

Interações dos Componentes

• A fase anterior forneceu o conjunto inicial

dos componentes e interfaces.

• Mostra como os componentes trabalham

juntos para oferecer as funcionalidades.

• A modelagem de interações é uma técnica

genérica para modelagem de

comportamento

Page 3: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

3

Interações dos Componentes (cont.)

• Tem o objetivo de:

– Definir as interações que ocorrem dentro do sistema.

– Refinar as definições de interfaces. • As assinaturas das operações das interfaces do

sistema não são conhecidas ainda.

– Identificar o uso das interfaces.

– Descobrir novas interfaces e operações. • As operações das interfaces de negócio não foram

identificadas ainda.

Page 4: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

4

Desenvolver o Modelo de

Tipos do Negócio

Identificar as Interfaces

de Negócio Identificar Interfaces do

Sistema e Operações

Modelo de Conceitos

de Negócio Diagrama de

Casos de Uso

Identificação de

Componentes

Criar a Especificação dos

Componentes & Arquitetura

Iniciais

Modelo de Tipos

do Negócio

Interfaces

Existentes

Interfaces de

Negócio

Conhecimento

no Domínio

Padrões

Arquiteturais

Interfaces de

Sistema

Especificação dos

Componentes &

Arquitetura

Page 5: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

5

Interações dos Componentes

• Modela os aspectos comportamentais

• Mostra como os componentes trabalham

juntos para prover as funcionalidades

• Tem o objetivo de:

– Definir as interações do sistema;

– Refinar as definições de interfaces;

– Identificar o uso das interfaces;

– Descobrir novas interfaces e operações.

Descobrir Operações

de Negócio

Refinar Interfaces

e Operações

Refinar a

Especificação de

Componentes & Arquitetura

Interfaces de

Negócio Interfaces de

Sistema

Especificação dos

Componentes & Arquitetura

Interação dos

Componentes

Interfaces Especificação dos

Componentes & Arquitetura

Page 6: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

6

<<interface type>>

IHotelMgt

<<core>>

Customer

name:String

postCode:String

email:String

<<interface type>>

ICustomerMgt

<<core>>

Hotel

name:String

<<type>>

Reservation

resRef:String

dates:DateRange

<<type>>

Room

number:String

<<type>>

RoomType

name:String

price(date):Currency

stayPrice(DateRange):Currency

available(DateRange):Boolean

*

*

*

1

*

*

1 1

*

1 0..1 allocation

1..*

1..*

Diagrama de Responsabilidade das Interfaces do Modelo de Tipos de Negócio

Page 7: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

7

<<comp spec>>

ReservationSystem

IMakeReservation

ITakeUpReservation

CustomerMgt

IHotelMgt

Especificação dos Componentes do Sistema

IBilling

Page 8: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

8

Uma Arquitetura Inicial

<<comp spec>>

ReservationSystem

IMakeReservation

ITakeUpReservation

<<comp spec>>

BillingSystem IBilling

<<comp spec>>

CustomerMgr

CustomerMgt

<<comp spec>>

HotelMgr IHotelMgt

Especificação da Arquitetura de Componentes

Page 9: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

9

Descobrir Operações de Negócio

• O foco é descobrir as operações de

negócio;

<<comp spec>>

ReservationSystem

IMakeReservation

ITakeUpReservation

<<comp spec>>

BillingSystem IBilling

<<comp spec>>

CustomerMgr

CustomerMgt

<<comp spec>>

HotelMgr IHotelMgt

Arquitetura Inicial do Componente

Page 10: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

10

Descobrir Operações de Negócio (cont)

Conjunto inicial de operações das interfaces

getHotelDetails()

getRoomInfo()

makeReservation()

<<interface type>>

IMakeReservation

getReservation()

beginStay()

<<interface type>>

ITakeUpReservation

Page 11: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

11

Descobrir Operações de Negócio (cont.)

• Diagramas de colaboração são usados

para descobrir e modelar cada possível

fluxo de execução;

• Todos os fluxos alternativos importantes

devem ser modelados;

• Deve-se encontrar e estabelecer as

restrições ao fluxo de execução

decorrente das chamadas das operações;

Page 12: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

12

<<interface type>>

IHotelMgt

<<core>>

Customer

name:String

postCode:String

email:String

<<interface type>>

ICustomerMgt

<<core>>

Hotel

name:String

<<type>>

Reservation

resRef:String

dates:DateRange

<<type>>

Room

number:String

<<type>>

RoomType

name:String

price(date):Currency

stayPrice(DateRange):Currency

available(DateRange):Boolean

*

*

*

1

*

*

1 1

*

1 0..1 allocation

1..*

1..*

Diagrama de Responsabilidade das Interfaces do Modelo de Tipos de Negócio

Page 13: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

13

Exemplo: getHotelDetails()

• A operação:

– Recebe como argumento uma string com o nome do

hotel;

– Retorna uma lista com um identificador para cada hotel e

os tipos de acomodações;

• Um “tipo” é definido para retornar as informações:

<<data type>>

HotelDetails

Id: HotelId

Name: String

roomTypes:String[]

IMakeReservation::getHotelDetails(in match:string):HotelDetails[]

Retorna uma coleção de

estruturas HotelDetails

Qual é o

algoritmo

de casa-

mento?

Page 14: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

14

Exemplo: getHotelDetails() (cont)

• A operação é invocada dinamicamente

pela camada de tipo de diálogo;

• O objeto não pode satisfazer a operação

porque componentes de sistema não

armazenam dados de negócio;

• A operação é delegada à interface

IHotelMgt;

Page 15: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

15

Exemplo: getHotelDetails() (cont)

• Com esse estudo, a primeira operação de

negócio é descoberta na interface

IHotelMgt;

/IMakeReservation:ReservationSystem 1:getHotelDetails(s)

/IHotelMgt

1.1:getHotelDetails(s)

Interações de getHotelDetails()

String com o

Nome/Id do Hotel

Page 16: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

16

Exemplo: getRoomInfo()

• A operação:

– Recebe como argumento um identificador do hotel, a

data da estada e o tipo de acomodação;

– Retorna a disponibilidade do tipo de acomodação e o

preço;

• Também delega a operação para a IHotelMgt;

<<data type>>

ReservationDetails

hotel: HotelId

dates: DateRange

roomType:String

<<data type>>

DateRange

startDate: Date

endDate: Date

IMakeReservation::getRoomInfo(in res:ReservationDetails,

out availability: boolean,

out price: Currency)

Page 17: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

17

Page 18: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

18

Exemplo: makeReservation()

• A operação:

– Cria a reserva e avisa o cliente por e-mail

– Recebe como argumento os detalhes da reserva e

os detalhes do cliente;

– Retorna a referência para uma nova reserva

IMakeReservation::makeReservation(in res:ReservationDetails,

in cus: CustomerDetails,

out resRef: String): Integer

Código de

Retorno da

operação

Page 19: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

19

Exemplo: makeReservation()

(Cont.)

• Se for um novo cliente, os três atributos são

requeridos (name, postCode, email)

• Se for um cliente existente, o postCode é

requerido apenas se name não for único.

<<data type>>

CustomerDetails

name:String

postCode[0..1]:String

email[0..1]:String

Atributos

Opcionais

Atributos

Opcionais

Page 20: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

20

Código de Retorno da Operação

makeReservation()

• É usado para retornar a situação da

chamada e execução da operação;

• Os valores são:

– 0: Sucesso;

– 1: É um novo cliente e os atributos postCode

e e-mail não foram fornecidos;

– 2: Nome não é único e o atributo postCode

não foi fornecido;

IMakeReservation::makeReservation(in res:ReservationDetails,

in cus: CustomerDetails,

out resRef: String): Integer

Page 21: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

21

Uma nova Operação

• O sistema referencia internamente um

cliente por um código, custId;

• Esse código, diferentemente do hotelId, foi

mantido como um conceito interno;

• Uma operação na interface ICustomerMgt

deve encontrar o custId a partir de

CustomerDetails;

ICustomerMgt::getCustomerMatching(in custD: CustomerDetails,

out cusId: CustId): Integer

Código de

Retorno da

operação

Page 22: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

22

Código de Retorno da Operação

getCustomerMatching()

• Os valores são:

– 0: Sucesso;

– 1: Cliente não existente;

– 2: Nome não é único e o atributo postCode

não foi fornecido;

ICustomerMgt::getCustomerMatching(in custD: CustomerDetails,

out cusId: CustId): Integer

Page 23: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

23

Quebra de Dependência dos

Componentes

/IMakeReservation:ReservationSystem

/IHotelMgt

1.2:makeReservation(r, id, rr)

/ICustomerMgt

1.1:makeReservation(r, c, rr)

1.1:getCustomerMatching(c, id){result=0}

1.3:notifyCustomer (c, id)

{where s includes rr etc}

Interações de makeReservation() (cliente existente)

Page 24: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

24

Outra Operação

• notifyCustomer tem como entrada a

identificação do cliente e a mensagem a

ser enviada.

ICustomerMgt::notifyCustomer( in cus: CustId,

in: msg:String)

Page 25: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

25

Quebra de Dependência dos

Componentes

• O componente HotelMgr é responsável por armazenar a associação entre reservas e clientes;

• O componente CustomerMgr é independente do componente HotelMgr;

• O componente ReservationSystem não pode delegar a operação a HotelMgt e deixar que este faça a chamada à operação getCustomerMatching();

Page 26: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

26

Manter a Integridade Referencial

• A arquitetura da especificação de

componentes mostra apenas quais

componentes existem mas não quantos

de cada tipo em tempo de execução;

• É necessário mostrar claramente que

ReservationSystem usa sempre os

mesmos objetos componentes de

negócio;

Page 27: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

27

Manter a Integridade Referencial

<<comp spec>>

ReservationSystem

<<interface type>>

ICustomerMgt

<<interface type>>

IBilling

<<interface type>>

IHotelMgt

1{frozen}

1{frozen}

1{frozen}

Restrições na arquitetura dos objetos componentes

Page 28: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

28

Controlar as Referências

Intercomponentes • Um problema que surge da integridade

referencial intercomponentes é: como garantir a validade dos identificadores?

• Algumas das soluções: 1. A responsabilidade é do componente que armazena

a referência;

2. A responsabilidade é do componente alvo da referencia;

3. A responsabilidade é de um terceiro componente que faz a mediação;

4. Permitir e tolerar referencias inválidas;

5. Não permitir a exclusão de informações;

Page 29: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

29

Controlar as Referências

Intercomponentes (opção 3)

/IMakeReservation:ReservationSystem

/IHotelMgt

1.2:deleteReservationsFor(cid)

/ICustomerMgt

1:deleteCustomer(cd)

1.1:getCustomerMatching(cd, cid){result=0}

1.3: deleteCustomer(cid)

Interações deleteCustomer() (mantendo a integridade referencial)

CustomerDetails

Identificador

Page 30: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

30

Completando a operação makeReservation

/IMakeReservation:ReservationSystem

/IHotelMgt

1.3:makeReservation(r, id, rr)

/ICustomerMgt

1:makeReservation(r, c, rr)

1.1:getCustomerMatching(c, id){result=1}

1.4:notifyCustomer (c, s)

{where s includes rr etc}

1.2:createCustomer(c, id)

Interações de makeReservation() (novo cliente)

ReservationDetails

CustomerDetails

Identificador da Reserva

Page 31: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

31

Demais Operações

/ITakeUpReservation:ReservationSystem

/IHotelMgt

1.1:getReservation(rr, rd, c)

/ICustomerMgt

1:getReservation(rr, rd, cd)

1.2:getCustomerDetails(c): cd

Interações de getReservation()

ReservationDetails

CustomerDetails

Identificador

da Reserva

Page 32: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

32

Demais Operações

/ITakeUpReservation:ReservationSystem

/ICustomerMgt

1.1:getReservation(rr, rd, c)

/IBilling

1:beginStay(rr, n)

1.4:openAccount(rd, cd)

/IHotelMgt

1.3:getCustomerDetails(c): cd

1.2:beginStay(rr, n)

Interações de beginStay()

Identificador

da Reserva

Número da

Acomodação

Page 33: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

33

Interfaces do Sistema <<interface type>>

IMakeReservation

getHotelDetails(in match: string): Hoteldetails[]

getRoomInfo(in res:ReservationDetails, out availability:Boolean, out price:Currency) makeReservation(in res:ReservationDetails, in cus:customerDetails, out resRef:String):Integer

<<interface type>>

ITakeUpReservation

getReservation(in resRef:String, out rd:ReservationDetails, out cus:CustomerDetails):Boolean

beginStay(in resRef:String, out roomNumber:String):Boolean

<<interface type>>

IBilling

openAccount(in res:ReservationDetails, in cus:CustomerDetails)

Interfaces do Sistema e as assinaturas de suas operações

Page 34: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

34

Interfaces de Negócio <<interface type>>

IHotelMgt

getHotelDetails(in match: string): Hoteldetails[]

getRoomInfo(in res:ReservationDetails, out availability:Boolean, out price:Currency) makeReservation(in res:ReservationDetails, in cus:customerDetails, out resRef:String):Integer

getReservation(in resRef:String, out rd:ReservationDetails, out cusId:CustId):Boolean

beginStay(resRef:String, out roomNumber:string:Boolean

<<interface type>>

ICustomerMgt

getCustomerMatching(in custD:CustomerDetails, out cusId:CustId):Integer

createCustomer(in custD: CustomerDetails, out cusId:CustId):Boolean

getCustomerDetails(in cus:CustId):CustomerDetails

notifyCustomer(in cus:custId, in msg:String)

Interfaces de Negócio e as assinaturas de suas operações

Page 35: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

35

Refinar Interfaces

• Após a descoberta e definições de operações é

necessário refinar as operações e interfaces.

• Pode-se fatorar as interfaces com

generalizações ou divisão em mais interfaces.

• As operações também podem ser fatoradas

para se tornar mais genéricas.

• Considerar: minimização de chamadas,

dependências ciclicas, padrões de projeto,

normalização de interfaces e operações, etc.

Page 36: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

36

Refinar Interfaces (cont)

• Não se deve antecipar funcionalidades e requisitos;

• Muita da flexibilidade dos sistemas baseados em componentes advém do fato de que componentes podem oferecer múltiplas interfaces;

• Novos requisitos podem ser acomodados usando-se novas interfaces e gerenciando a dependência;

Page 37: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

37

Especificação de Componentes

Cap. 7

Page 38: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

38

Especificação de Componentes

• O objetivo é especificar os contratos de

uso e os contratos de realização;

• O contrato de uso é definido pela

especificação de interface;

• O contrato de realização é definido pela

especificação de componente;

Page 39: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

39

Especificação de Componentes

• Modela os aspectos comportamentais

• Mostra como os componentes trabalham

juntos para prover as funcionalidades

• Tem o objetivo de:

– Definir as interações do sistema;

– Refinar as definições de interfaces;

– Identificar o uso das interfaces;

– Descobrir novas interfaces e operações.

Definir Modelos de

Informação da Interface

Especificar

pré e pós-condições

das operações

Especificar restrições de

Interface e Componente

Modelo de Tipos

de Negócio Especificação dos

Componentes & Arquitetura

Especificação dos

Componentes

Interfaces Especificação dos

Componentes & Arquitetura

Interfaces

Page 40: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

40

Especificação de Interfaces

• Uma interface é um conjunto de

operações que definem, cada uma,

serviços e funções do objeto componente;

• As interfaces definem como gerenciar as

dependências e, portanto, são unidades

de contrato dos componentes;

• A primeira tarefa é descrever o estado dos

objetos componente;

Page 41: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

41

Modelos de Informação da

Interface

• Cada interface deve possuir um modelo

de informação que especifica as

operações das interfaces;

• É um modelo dos possíveis estados de

um objeto componente;

• As mudanças de estado dos objetos

componente, causados pelas operações,

podem ser descritas por esse modelo;

Page 42: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

42

Modelos de Informação da Interface:

Especificação das Operações

• Uma operação especifica uma ação

individual que um objeto componente

executará para o cliente.

• Devem ser especificados:

– os parâmetros de entrada;

– os parâmetros de saída;

– os resultados da mudança de estado dos

objetos componentes;

– As restrições aplicáveis.

Page 43: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

43

Exemplo de Especificação de

Interface <<interface type>>

ICustomerMgt

getCustomerMatching(in custD:CustomerDetails, out cusId:CustId):Integer

createCustomer(in custD: CustomerDetails, out cusId:CustId):Boolean

getCustomerDetails(in cus:CustId):CustomerDetails

notifyCustomer(in cus:custId, in msg:String)

<<data type>>

CustomerDetails

name:String

postCode[0..1]:String

email[0..1]:String

Customer

Id:CustId

name:String

postCode:String

email:String

*

Modelo de informação de interface para ICustomerMgt

Page 44: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

Modelo de Especificação de

Interface (Cont.) • Uma interface só pode ser associada a tipos de

informação e os tipos não podem ser

associados a qualquer coisa fora do modelo de

informação de interface.

• O conjunto de tipos que forma o mod. de info.

de interface vive em um pacote com as

interfaces.

• Tipos de dados podem ser compartilhados com

outras interfaces e vivem em um pacote

separado e podem ser importados (usados) por

outras interfaces.

44

Page 45: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

45

Pré-condições e Pós-condições

• Cada operação tem uma pré-condição e uma pós-condição;

• A pós-condição especifica o efeito da operação se a pré-condição for verdadeira;

• A pré-condição não é uma condição para que uma operação seja invocada;

• A pré-condição é uma condição de garantia para que a operação garanta que a pós-condição seja verdadeira;

Page 46: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

46

Pré-condições e Pós-condições (cont.)

• OCL é usada para especificar as pré e

pós-condições;

• Uma operação para alterar o nome do

cliente:

context ICustomerMgt::

changeCustomerName(in cus:CustId,newName:String)

pre:

-- Cus é um identificador de cliente valido

customer->exists(c | c.id = cus)

post:

-- o nome do cliente de identificar cus é newName

customer->exists(c | c.id = cus and c.name = newName)

Page 47: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

47

Exemplo: getCustomerDetails()

context ICustomerMgt::

getCustomerDetails(in cus:CustId): CustomerDetails

pre:

-- Cus é um identificador de cliente valido

customer->exists(c | c.id = cus)

post:

-- os detalhes retornados são iguais ao

-- do cliente cujo identificador é cus.

-- encontra o cliente:

Let theCust = customer->select(c | c.id = cus) in

-- especifica o resultado

result.name = theCust.name and

result.postCode = theCust.postCode and

result.email = theCust.email

Page 48: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

48

Regras para criar expressões

OCL • Elas podem se referir aos parâmetros,

resultado das operações e ao estado do objeto componente (conforme definido na interface do modelo de informação da interface)

• Não pode se referir a mais nada

• Pré condições podem se referir ao estado anterior (@pre) e posterior à execução da operação.

Page 49: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

49

Processo para a construção de

Modelos de Informação da Interface

• Pode-se derivar o Modelo de Informação

de Interface a partir do Modelo de Tipos

de Negócio (Diagrama de

Responsabilidade de Interfaces);

• Os tipos que pertencem a duas interfaces

devem aparecer em todos os modelos de

informação de interface;

*

*

1

Page 50: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

Exemplo: IhotelMgt

• Direto- hotel, room, room type

• Dúvida Customer?

• O que acontece com a associação

Reservation-Customer?

– Aparece nas duas interfaces

– Mas aqui tem outra forma, pois o que

interessa é apenas a identificação do cliente.

50

Page 51: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

51

<<interface type>>

IHotelMgt

<<core>>

Customer

name:String

postCode[0..1]:String

email[0..1]:String

<<interface type>>

ICustomerMgt

<<core>>

Hotel

name:String

<<type>>

Reservation

resRef:String

dates:DateRange

<<type>>

Room

number:String

<<type>>

RoomType

name:String

price(date):Currency

stayPrice(DateRange):Currency

available(DateRange):Boolean

*

*

*

1

*

*

1 1

*

1 0..1 allocation

1..*

1..*

Diagrama de Responsabilidade das Interfaces

Page 52: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

52

<<interface type>>

IHotelMgt

getHotelDetails(in match: string): Hoteldetails[]

getRoomInfo(in res:ReservationDetails, out availability:Boolean, out price:Currency) makeReservation(in res:ReservationDetails, in cus:customerDetails, out resRef:String):Integer

getReservation(in resRef:String, out rd:ReservationDetails, out cusId:CustId):Boolean

beginStay(resRef:String, out roomNumber:string:Boolean

Customer

Id:CustId

Hotel

Id:HotelId

name:String

Reservation

resRef:String

dates:DateRange

claimed:Boolean

Room

number:String

RoomType

name:String

available(during: DateRange):Boolean

price(on: date):Currency

stayPrice(for: DateRange):Currency 1

*

* *

*

1

1

1..*

*

0..1

allocation *

1

*

1

Diagrama de especificação de interface para IHotelMgt

Page 53: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

53

Invariantes

• Um invariante é uma restrição ligada ao

tipo que deve ser verdadeira para todas

as instâncias do tipo;

• Ex: o seguinte invariante relaciona o

atributo requerido de uma reserva com a

associação entre Reservation e Room;

Context r: reservation inv:

-- a reserva é ocupada se existe uma alocação de

-- acomodação

r.claimed = r.allocation->notEmpty

Page 54: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

Alternativa: usar o estilo mais informal de Larman

54

Page 55: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

55

Instantâneos

• IhotelMgt::makeReservation(

in res: ReservationDetails,

in cus: CustId,

out cusRef: String):Boolean

• O que esperamos que aconteça se a operação for chamada com os seguintes valores:

• Hotel Id =4, customer Id =92, room type = single

• Estes diagramas podem ajudar a definir as prés e pós-condições.

Page 56: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

56

Page 57: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

57

context IHotelMgt::

makeReservation(in res: ReservationDetails,

in cus: CustId,

out resRef: String): Boolean

pre:

-- o hotel e tipo de acomodação são válidos

hotel->exists(h | h.id = res.hotel and

h.room.roomType.name->includes(res.roomType))

post:

-- retornar o valor “true” implica sucesso da operação

result implies

-- uma reserva foi criada

-- identificar o hotel

Let h’ = hotel->select(x |

x.id=res.hotel)->asSequence->first in

-- deve haver uma reserva a mais que anteriormente

(h.reservation – h.reservation@pre)->size=1 and

-- identificar a reserva

Let r=(h.reservation–h.reservation@pre)->asSequence->first in

-- a ref retornada é a nova reserva

r.resRef=resRef and

-- os outros atributos são atualizados

r.dates=res.dateRange and

r.roomType.name=res.roomType and not r.claimed and

r.customer.id=cus

Page 58: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

58

Especificação das Interfaces de

Sistema

• As interfaces do sistema também devem

ser especificadas.

• Elas raramente armazenam estado. Suas

implementações obtém os dados que

precisam dos componentes de negócio.

• Suposição initial: a i.s. necessita uma

cópia de tudo o que existe no modelo de

tipos de negócio.

Page 59: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

59

Customer

Id:CustId

postCode:String

email:String

Hotel

Id:HotelId

name:String

Reservation

resRef:String

dates:DateRange

claimed:Boolean

Room

RoomType

name:String

available(during:DateRange):Boolean

1

*

*

*

1

1

1..*

*

0..1

allocation *

1

*

1

<<interface type>>

IMakeReservation

getHotelDetails(in match: string): Hoteldetails[]

getRoomInfo(in res:ReservationDetails, out availability:Boolean, out price:Currency) makeReservation(in res:ReservationDetails, in cus:customerDetails, out resRef:String):Integer

Diagrama de especificação de interface para IMakeReservation

???

Page 60: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

60

<<interface type>>

ITakeUpReservation

getReservation(in resRef:String, out rd:ReservationDetails, out cus:CustomerDetails):Boolean

beginStay(in resRef:String, out roomNumber:String):Boolean

Customer

Id:CustId

postCode:String

email:String

Hotel

Id:HotelId

Reservation

resRef:String

dates:DateRange

claimed:Boolean

Room

number:String

RoomType

name:String

1

*

*

*

1

1

1..*

*

0..1

allocation *

1

*

1

Diagrama de especificação de interface para ITakeUpReservation

?

?

Page 61: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

Especificação das Interfaces de

Sistema (Cont.) • Notar que

– O modelo de informação para

IMakeReservation não requer o atributo room

number.

– O modelo de informação para

ITakeUpReservation não requer os atributos

hotel name ou o atributo available(during) de

RoomType.

61

Page 62: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

62

Especificação dos Componentes

• Até este momento o foco foi dado aos

contratos de uso.

• Aqui o foco é a dependência de um

componente em relação a outras

interfaces.

• Se há alguma restrição de

implementação, ela é especificada neste

momento.

Page 63: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

63

Interfaces oferecidas e requeridas

• Para cada especificação de componentes é

necessário estabelecer a quais interfaces sua

realização dá suporte.

• Isso já foi feito antes, mas aqui nós separamos

essas partes, para mostrar para o

implementador.

Page 64: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

64

<<comp spec>>

ReservationSystem

IMakeReservation

ITakeUpReservation

IBilling

CustomerMgt

IHotelMgt

<<comp spec>>

ReservationSystem

<<interface type>>

ICustomerMgt

<<interface type>>

IBilling

<<interface type>>

IHotelMgt

1{frozen}

1{frozen}

1{frozen}

Diagrama de

Especificação

de Componentes para

ReservationSystem

Diagrama de Especificação

de Componentes adicional

para ReservationSystem

Page 65: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

Restrições sobre a interação

entre componentes

65

Componente

B não importa

Componente C

não importa

Não interage com

componente IY

Fragmentos de Interação

Page 66: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

66

Restrições Inter-Interface

• A análise das restrições interinterface trata

dos relacionamentos entre os modelos de

informação de interface:

– como as interfaces oferecidas se relacionam;

– como as interfaces oferecidas se relacionam

com as interfaces usadas;

Page 67: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

67

Interfaces Oferecidas

• Diferentes interfaces de uma especificação de componente podem fazer referência a um mesmo tipo;

• Deve-se definir explicitamente quais tipos são usados por quais interfaces;

• Exemplo:

– o tipo reservation está presente em: • ReservationSystem::IMakeReservation;

• ReservationSystem::ITakeUpReservation;

Page 68: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

68

context ReservationSystem

-- restrições entre interfaces oferecidas

IMakeReservation::hotel = ITakeUpReservation::hotel

IMakeReservation::reservation = ITakeUpReservation::reservation

IMakeReservation::customer = ITakeUpReservation::customer

context ReservationSystem

-- restrições entre interfaces usadas e interfaces oferecidas

IMakeReservation::hotel = IHotelMgt::hotel

IMakeReservation::reservation = IHotelMgt::reservation

IMakeReservation::customer = ICustomerMgt::customer

como as interfaces

oferecidas se relacionam

como as interfaces oferecidas

se relacionam com as usadas

Page 69: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

69

Fatoração de Interfaces

• Criar os modelos de informação de

interfaces pode ser trabalhoso.

• Cada interface necessita de seu próprio

modelo, que difere um pouco das outras

interfaces.

• É possível fatorar interfaces introduzindo

novas interfaces abstratas que funcionam

como supertipos, contendo os elementos

comuns.

Page 70: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

70

<<interface type>>

IReservationSystem

Customer

id:CustId

postCode:String

email:String

Hotel

Id:HotelId

Reservation

resRef:String

dates:DateRange

claimed:Boolean

Room

RoomType

name:String

1

*

*

*

1

1

1..*

*

0..1

allocation *

1

*

1

IMakeReservation ITakeUpReservation IReservationSystem

Page 71: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

71

Hotel

(from IReservationSystem)

Id:HotelId

RoomType

(from IReservationSystem

name:String

<<interface type>>

IMakeReservation

getHotelDetails(in match: string): Hoteldetails[]

getRoomInfo(in res:ReservationDetails, out availability:Boolean, out price:Currency) makeReservation(in res:ReservationDetails, in cus:customerDetails, out resRef:String):Integer

RoomType

available(during: DateRange):Boolean

Hotel

Name:String

Page 72: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

72

Provisionamente e Composição

Requirements

Specification Provisioning Assembly

Test

Deployment

Use case

models

Use case

models

Business concept

models

Business

requirements

Existing

assets

Technical

constraintsComponents

Applications

Tested

applications

Component specs

& architectures

Assegura que os

componentes

necessários estejam

disponíveis (compra,

reuso, desenvolvimento)

Junta os

componentes com

softwares existentes

e interface,

produzindo a

aplicação

Page 73: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

Tecnologia Alvo

• É o ambiente de execução (runtime), mais

a linguagem de programação (secundária)

• Há também um ambiente distribuído de

componentes, com regras que devem ser

obedecidas e serviços de infraestrutura

(segurança, transações, concorrência, etc)

• Ex1:Microsoft COM+, dependente de

Windows.

• Ex2: Enterprise Java Beans (EJB),

dependente de Java. 73

Page 74: Interações dos Componentes - USP · Modelo de Especificação de Interface (Cont.) • Uma interface só pode ser associada a tipos de informação e os tipos não podem ser associados

Realização (ou implementação)

74