You are on page 1of 10

At este ponto, a Anlise produziu dois artefatos importantes

Contratos
Modelagem Funcional

 casos de uso expandidos que mostram como possveis usurios trocam informaes com o sistema  modelo conceitual que representa estaticamente a informao a ser gerenciada pelo sistema

Modelagem Funcional
 Especificao das funes externas do sistema Operaes de Sistema - inputs Consultas de Sistema - outputs

Artefatos necessrios
 Modelo conceitual  Diagramas de seqncia ou casos de uso expandidos

Contratos
 Cada operao ou consulta do sistema implica a existncia de uma inteno por parte do usurio, a qual capturada pelos contratos de operaes de sistema e nos contratos de consulta de sistema

Contrato de Operao de Sistema


Tem pelo menos trs sees:  Pr-condies  Ps-condies  Excees

Contrato de Consulta de Sistema


Poder ter as seguintes sees:  Pr-condies  Resultados

Pr-condies
 definem o que deve ser verdadeiro na estrutura da informao armazenada para que a operao ou consulta possa ser executada  elas no sero testadas durante a execuo  algum mecanismo externo dever garantir sua validade antes de habilitar a execuo da operao ou consulta de sistema correspondente

Ps-condies
 estabelecem o que uma operao de sistema muda na estrutura da informao armazenada modificao nos dados armazenados no apropriado que se gerem resultados

Resultados
 Conjunto de informaes retornado por uma consulta No confundir ps-condies com resultados de consultas

10

Excees
 eventos que, se ocorrerem, impedem o prosseguimento correto da operao  usualmente no podem ser garantidas a priori  sero testadas durante a execuo  s excees ligadas com as regras do negcio

Object Constraint Language (OCL)


 porque as pr-condies no podem ser expressas de maneira descuidada  OCL, uma linguagem um tanto quanto formal  que no dificulte a comunicao com o usurio/cliente

11

12

Tipos de Pr-condies
 Garantia de parmetros: pr-condies que garantem que os parmetros da operao ou consulta correspondem a elementos vlidos do sistema de informao  Restrio complementar: pr-condies que garantem que a informao se encontra em uma determinada situao desejada

Pr-condio de garantia de parmetros semntica


 Verificaes sintticas so feitas por tipagem Ex.: Ao invs de escrever x deve ser maior do que zero , usar x:InteiroPositivo na declarao do parmetro  Uma pr-condio semntica se para test-la for necessrio consultar informaes gerenciadas pelo sistema

13

14

Garantia de Parmetros

Em um contexto no ambguo
 possvel simplificar a escrita da pr-condio

Classe Videolocadora operao: identificaCliente(nomeCliente:String) pr: Existe uma instncia da classe Cliente tal que o atributo nome desta instncia igual ao parmetro nomeDoCliente. Classe Videolocadora operao: identificaCliente(nomeCliente:String) pr: Existe um Cliente cujo nome igual a nomeDoCliente.

self.cadastropexists(nome=nomeCliente)
15 16

Restrio complementar
 exemplo: se o modelo conceitual especifica que uma associao tem multiplicidade de papel 0..1, uma prcondio complementar poder especificar que, para uma instncia especfica, a associao efetivamente existe (ou no existe)  uma pr-condio nunca poder contradizer as especificaes do modelo conceitual, apenas complement-las

Tipos de restries complementares


 Existe (ou no existe) uma instncia (ou um conjunto de instncias) com determinadas propriedades.  Todas as instncias (ou nenhuma das instncias) de uma determinada classe (ou um conjunto definido por uma associao) tm determinadas propriedades.  Uma associao no obrigatria (com multiplicidade de papel 0..1 ou *) existe (ou no existe) entre determinadas instncias.  Um determinado atributo de uma instncia tem um certo valor.

17

18

Exemplo
Cl

Como garantir pr-condies


 Considere a seguinte interface

l


oper o: i entific pr :


liente(nomeCliente: tring)


iste m Cli
   

t c o
  

igual a

Cli
 !  #  

t .


Expresso OCL equivalente precondio:


self.cadastropselect(nome=nomeCliente).debito=0
19 20

Diagrama de seqncia com excees

 $

ste Cli

t possui dbit igual a zero.

"

Convertendo uma possvel exceo em pr-condio


 Interface modificada (com boto de seleo de nome ou com autocompletar)

21

22

DS modificado para garantir uma pr-condio

DS modificado para garantir ambas

23

24

Associaes temporrias
 so usadas para representar informaes que no precisam persistir usar esteretipo <<temp>>

Uso da associao temporria no contrato


 nico parmetro da operao: o cdigo da fita  o cliente foi identificado pela operao identificaCliente: est numa varivel de memria
Cl i l r opera o: emprestaFita(codigoFita: tring)
2 3 % & & ' ( ) ' 0 0 1 % ) 0 %

pr :
4

iste um cli

t Corrente.
7

 self.clienteCorrentepsize=1
25 26

Ps-condies semnticas
 Instncia: criao e destruio  Associao: criao e destruio  Atributo: modificao de valor

Criao de uma instncia e sua associao com outra instncia preexistente


 exemplo: foi criado um Cliente e associado Videolocadora por cadastra  ou ainda, fazendo referncia ao papel e no associao, um novo Cliente foi adicionado em cadastro  em OCL : self.cadastropincluding(Cliente.new)

27

28

Destruio de uma instncia


 exemplo: foi destrudo um Cliente cujo nome igual a nomeCliente  Presume-se que quando uma instncia destruda, todas as associaes ligadas a ela tambm o sejam  em OCL: self.cadastropexcluding(nome=nomeCliente)  Deve-se tomar cuidado com questes estruturais (associaes obrigatrias) quando um objeto destrudo
29

Criao de uma associao entre duas instncias


 exemplo: foi criada uma associao atende entre a Videolocadora e o Cliente cujo nome igual a nomeCliente  ou, fazendo referncia ao papel da associao, o Cliente cujo nome igual a nomeCliente foi tornado clienteCorrente  em OCL: self.clienteCorrente=self.cadastrop select(nome=nomeCliente)
30

Destruio de uma associao


 exemplo: foi destruda a associao atende  em OCL: self.clienteCorrentepsize=0

Modificao do valor de um atributo de uma instncia


 exemplo: O debito do clienteCorrente foi alterado para 50,00  em OCL: self.clienteCorrente.debito=50,00

31

32

Ps-condio condicional
 exemplo: se no houver nenhum emprestimoAberto associado ao clienteCorrente, ento um novo Emprestimo foi criado e associado ao clienteCorrente como emprestimoAberto

Ps-condio condicional (2)


 self.clienteCorrente.emprestimoAberto@prepsize=0 IMPLIES self.clienteCorrente.emprestimoAberto= Emprestimo.new()  Em OCL a expresso equivalente a uma ps-condio condicional usa o conectivo lgico IMPLIES  O sufixo @pre indica o valor anterior da propriedade self.clienteCorrente.emprestimoAberto

 Em OCL: self.clienteCorrente.emprestimoAberto@prepsize=0 IMPLIES self.clienteCorrente.emprestimoAberto= Emprestimo.new()


33

34

Excees
 Situaes de erro ou falha que no podem ser evitadas ou verificadas antes de iniciar a execuo da operao propriamente dita  Muitas vezes, situaes identificadas como excees so, na verdade, precondies sobre as quais o analista no pensou muito
Classe Videolocadora

Excees
operao: identificaCliente(nomeC:String) pr: Existe um Cliente com nome igual a nomeC. ps: O Cliente foi associado como clienteCorrente . excees: Cliente com pendncia: O debito do Cliente diferente de zero.

 self.cadastropselect(nome=nomeC).debito<>0
35 36

Contrato para Insero


Classe Videolocadora
Classe Videolocadora

Em OCL

operao: cadastraCliente(nomeC,enderecoC,telefoneC:String) pr: No existe nenhum Cliente com nome = nomeC. ps: Foi criado um Cliente e adicionado ao ca astro. Os atributos nome, en ereco e telefone do Cliente foram alterados para nomeC, en erecoC e telefoneC. O atributo e ito do Cliente foi alterado para 0,00.
9 @ 9 9 9

operao: cadastraCliente(nomeC,enderecoC,telefoneC:String) pr: self.cadastropselect(nome=nomeC)psize=0 ps: self.cadastropincluding(Cliente.new(nomeC,enderecoC,telefoneC, 0))

37

38

Contrato para Alterao

Em OCL

Cl
A B B C D H

i
E C F

l
F G A E F

r
A I

Cl
V W W X c

i
` X a

l
a b V ` a

r
V d

opera o: alteraCliente(nomeC,enderecoC,telefoneC: tring) pr : ps: s atri utos endereco e telefone do Cliente foram alterados para enderecoC e telefoneC .
T U P

opera o: alteraCliente(nomeC,enderecoC,telefoneC: tring) pr :


e

iste um Cliente com nome

nomeC.
ps:

self.cadastro pselect(nome=nomeC) psize=1

self.cadastro pselect(nome=nomeC).endereco = enderecoC self.cadastro pselect(nome=nomeC).telefone = telefoneC

39

40

Contrato para Excluso


Classe Videolocadora operao: excluiCliente(nomeC:String) pr: Existe um Cliente com nome = nomeC. Esse Cliente no possui associao com nenhum Emprestimo. ps: O Cliente com nome = nomeC foi destrudo.
ps: Cl
f g g h s

Em OCL
i
p h q

l
q r f p q

r
f t

opera o: excluiCliente(nomeC: tring) pr :


u

self.cadastro pselect(nome=nomeC) psize=1. self.cadastro pselect(nome=nomeC).emprestimos psize=0.

self.cadastro pselect(nome=nomeC) psize=0.

41

42

Se a instncia a ser destruda tem associao obrigatria com Cliente


 Associao obrigatria para Reserva no pode ser destruda sem destruir Reserva  Assim, o analista tem trs opes  Veja nos trs prximos slides

Opo 1
 Colocar como pr-condio da operao a no existncia de associao do Cliente com Reserva, e incluir um mecanismo de interface que s habilite para excluso os clientes que no tem reserva (como foi feito em relao aos emprstimos).

43

44

Opo 2
 Colocar como exceo da operao a verificao da existncia de alguma reserva. Neste caso, se o usurio tentar excluir algum cliente que tenha alguma reserva em seu nome a operao no ser concluda, e uma exceo ser disparada, possivelmente causando a exibio de uma mensagem de erro.

Opo 3
 Fazer a ao de destruio do Cliente se propagar para as reservas em seu nome.  Neste caso, deveria ser adicionada ao contrato uma ps-condio do tipo: todas as reservas associadas ao cliente foram excludas .

45

46

Contrato para Consulta

Em OCL

Classe Videolocadora consulta: consultaCliente(nomeC:String) pr: Existe um Cliente com nome = nomeC. retorno: Retorna o en ereco e o telefone do Cliente
v

Classe Videolocadora consulta: consultaCliente(nomeC:String) pr: self.cadastropselect(nome=nomeC)psize=1 retorno: self.cadastropselect(nome=nomeC)pcollect(Sequence{nome,endereco,telefone})

47

48

Contrato para uma Consulta de Listagem


Classe Videolocadora consulta: listaClientes() pr: retorno: retorna os nomes de todos os Clientes do ca astro.
w

Em OCL

Cl
x y y

l
x

r
x

consulta: listaClientes() pr : retorno: self.cadastropcollect(nome)

49

50

Consultas e Operaes Relacionadas com Casos de Uso


 Freqentemente, haver uma cadeia de execuo ao longo de um dos fluxos  Verificar: Qual o objetivo de cada operao? O que cada uma delas espera que tenha sido produzido pelas anteriores? O que cada uma delas produz? Que excees poderiam ocorrer durante a execuo?
51 52

Exemplo

Cl
e

l
d

r
f

opera o: identificaCliente(nomeC: tring) pr :


g

Cl

r
h

xiste um Cliente com nome = nomeC

consulta: listaNomesDeClientes() pr : retorno: Para cada Cliente em cadastro: a) nome

No existe clienteCorrente ps: Cliente com nome = nomeC foi associado Videolocadora como clienteCorrente
i

53

54

Classe Videolocadora operao: emprestaFita(codigoF:String) pr: Existe um clienteCorrente Existe uma Fita com co igo = co igoF
m m

ps:

Classe Videolocadora consulta: listaCodigos eFitas isponiveis()


j j

Se no existia um emprestimoA erto para o clienteCorrente, ento foi criado um Emprestimo com ata igual a data de hoje, valorTotal igual a 0,00, e associado como emprestimoA erto ao clienteCorrente.
n

Foi criado um ItemDeEmprestimo e associado ao emprestimoA erto.


n

pr: retorno: ara cada Fita que no esteja associada por apareceEm: a) co igo
l k

Foi criado um Esta oDeItemDeEmprestimo EmAn amento e associado ao ItemDeEmprestimo. O Esta oDeItemDeEmprestimo EmAn amento foi associado
m m

O prazo do ItemDeEmprestimo foi alterado para o prazo do TipoDeFilme do Filme da Fita. O valor do ItemDeEmprestimo foi alterado para o valor do TipoDeFilme do Filme da Fita. O valorTotal do emprestimoA erto foi alterado para o valorTotal anterior somado ao valor do ItemDeEmprestimo.
n

Fita.

55

56

Cl
r s s t u

i
v t w

l
w x r v w

r
r

consulta: consultaPrazosDoEmprestimoAberto() Classe Videolocadora consulta: consulta alor oEmprestimoAberto()


p q

pr :
y

Existe um emprestimoAberto para um clienteCorrente retorno: Para cada ItemDeEmprestimo do emprestimoAberto: a) b) titulo do Filme da Fita do EstadoDoItemDeEmprestimo; prazo.
z

pr: Existe um emprestimoAberto para um clienteCorrente retorno: O valorTotal do emprestimoAberto do clienteCorrente.

57

58

Classe Videolocadora operao: finalizaEmprestimo() pr: Existe um emprestimoA erto para um clienteCorrente. O emprestimoA erto possui pelo menos um ItemDeEmprestimo.
{ {

ps: Foi destruda a associao com emprestimoA erto. Foi destruda a associao com clienteCorrente.
{

59

10

You might also like