Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
(Contratos)
2010
Context Livir::identificaComprador(umCpf)
pre:
self.compradoresselect(p|p.cpf=umCpf)notEmpty()
Context Livir::identificaComprador(umCpf)
pre:
self.compradores[umCpf]notEmpty()
pre:
compradores[12345678910].saldo = 0
pre:
compradoresexists(c|c.saldo = 0)
pre:
compradoresforAll(c|c.saldo = 0)
body:
compradorCorrente.saldo
body:
Tuple{
nome = compradores[umCpf].nome,
telefone = compradores[umCpf].telefone
}
def: comprador =
compradores[cpfComprador]
body:
Tuple{
nome = comprador.nome,
telefone = comprador.telefone
}
Context Livir::listaNomeCompradores():Set
body:
compradores.nome
body:
compradoresselect(saldo=0)collect(c|
Tuple {
cpf = c.cpf,
nome = c.nome,
telefone = c.telefone
}
)
Context Livir::operacaoX()
post:
<expressão 1> AND
<expressão 2> AND
...
<expressão n>
pessoa^setDataNascimento(novaData)
Livro::newInstance()
def: novoLivro =
Livro::newInstance()
post:
...
novoLivro^setIsbn(umIsbn) AND
novoLivro^setTitulo(umTitulo) AND
novoLivro^setAutor(umAutor)
jipe^addPassageiro(joao)
Ou:
joao^addAutomovel(jipe)
venda^addPagamento(Pagamento::newInstance())
def: novoLivro =
Livro::newInstance()
post:
self^addLivro(novoLivro) AND
novoLivro^setIsbn(umIsbn) AND
novoLivro^setTitulo(umTitulo) AND
novoLivro^setAutor(umAutor)
p1^removeVenda()
Equivalente a:
post:
if vendaCorrente.saldo@pre = 0 then
vendaCorrente^setSaldo(1)
endIf
post:
self.livrosforAll(livro|
livro^setPreco(livro.preco@pre * (1-x/100))
)
def: comprador =
compradoresselect(cpf = umCpf)
post:
self^addCompradorCorrente(comprador)
exception:
compradorsize() = 0 IMPLIES
self^throw(“cpf inválido”)
def: comprador =
compradoresselect(cpf = umCpf)
pre:
compradorsize() = 1
post:
self.addCompradorCorrente(comprador)
def: novoLivro =
Livro::newInstance()
post:
self^addLivros(novoLivro) AND
novoLivro^setIsbn(umIsbn) AND
novoLivro^setTitulo(umTitulo) AND
novoLivro^setAutor(umAutor)
pre: <<temp>> body: post: exception: <<CRUD>> <<List>> UC
ISBN não pode ser repetido
Context Livir criaLivro(umIsbn, umTitulo, umAutor)
def: novoLivro =
Livro::newInstance()
pre:
post:
self^addLivros(novoLivro) AND
novoLivro^setIsbn(umIsbn) AND
novoLivro^setTitulo(umTitulo) AND
novoLivro^setAutor(umAutor)
exception:
livrosselect(isbn=umIsbn)notEmpty() IMPLIES
self^throw(“Este ISBN já está cadastrado”)
def: novoLivro =
Livro::newInstance()
pre:
livrosselect(isbn=umIsbn)isEmpty()
post:
self^addLivros(novoLivro) AND
novoLivro^setIsbn(umIsbn) AND
novoLivro^setTitulo(umTitulo) AND
novoLivro^setAutor(umAutor)
def: livro =
livrosselect(isbn=umIsbn)
pre:
livrosize()=1
post:
livro^setIsbn(novoIsbn) AND
livro^setTitulo(umTitulo) AND
livro^setAutor(umAutor)
Context Livir::excluiLivro(umIsbn)
def: livro =
livrosselect(isbn=umIsbn)
pre:
livrosize() = 1 AND
livro.itenssize() = 0
post:
livro^destroy()
def: livro =
livrosselect(isbn=umIsbn)
pre:
livrosize() = 1
post:
livro.itensforAll(item|item^destroy()) AND
livro^destroy()
def: livro =
livrosselect(isbn=umIsbn)
pre:
livrosize()
livro size() = 1
post:
livro^destroy()
exception:
livro.itensnotEmpty() IMPLIES
self^throw(“não é possível excluir este livro”)
def: livro =
livrosselect(isbn = umIsbn)
body:
Tuple{
isbn = livro.isbn,
titulo = livro.titulo,
preco = livro.preco,
autor = livro.autor,
status = livro.status
}
body:
self.livros.isbn
body:
self.livroscollect(livro|
Tuple{
isbn = livro.isbn,
titulo = livro.titulo
}
)
body:
self.livrosselect(livro|
livro.itensisEmpty()
) collect(livro|
Tuple{
isbn = livro.isbn,
titulo = livro.titulo
}
)
def: novaCompra =
Compra::newInstance()
def: comprador =
compradores[idComprador]
post:
novaCompra^setNumero(novoNumeroAutomatico()) AND
novaCompra^setData(dataAtual()) AND
novaCompra^addComprador(comprador)
return: novaCompra.numero
exception:
compradorsize() = 0 IMPLIES
self^throw(“Comprador não cadastrado”)
body:
livrosselect(
estoque>0
)collect(livro|
Tuple{
isbn = livro.isbn,
titulo = livro.titulo,
preco = livro.preco,
autor = livro.autor
}
)
def: compra =
compras[idCompra]
def: livro =
livros[idLivro]
def: item =
Item::newInstance()
post:
item^setQuantidade(quantidade) AND
item^setValor(livro.preco) AND
item^addCompra(compra) AND
item^addLivro(livro) AND
livro^setEstoque(livro.estoque@pre – quantidade)
exception:
quantidade > livro.estoque IMPLIES
self^throw(“quantidade insuficiente em estoque”)
pre:
compras[idCompra]size()=1
body:
compras[idCompra].total
def: comprador =
compradores[idComprador]
pre:
compradorsize() = 1
body:
comprador.enderecoscollect(endereco|
Tuple {
id = endereco.idEndereco,
rua = endereco.rua,
numero = endereco.numero,
cidade = endereco.cidade.nome,
uf = endereco.cidade.uf
}
)
def: compra =
compras[idCompra]
def: comprador =
compra.comprador
def: endereco =
comprador.enderecos[idEndereco]
pre:
comprasize()=1 AND
enderecosize()=1
post:
compra^addEnderecoEntrega(endereco)
pre:
compras[idCompra]size() = 1
body:
compras[idCompra].frete
pre:
compras[idCompra]size() = 1
body:
compras[idCompra].totalGeral
pre:
compradores[idComprador]size() = 1
body:
compradores[idComprador].cartoescollect(cartao|
Tuple {
bandeira = cartao.bandeira.nome,
numero = cartao.numero
}
)
def: compra =
compras[idCompra]
def: cartao =
compra.comprador.cartoesselect(numero=idCartao)
pre:
comprasize()=1 AND
cartaosize()=1
post:
compra^addCartao(cartao)
def: compra =
compras[idCompra]
pre:
comprasize() = 1
body:
Tuple {
numero = compra.cartao.numero,
titular = compra.cartao.titular,
validade = compra.cartao.validade,
codSeg = compra.cartao.codSeg,
valor = compra.valorTotal
}
def: compra =
compras[idCompra]
pre:
comprasize() = 1
post:
compra.autorizacao^setCodigo(codigoAutorizacao)
pre:
compras[idCompra]size() = 1
body:
compras[idCompra].enderecoEntrega.cidade.tempoEntrega
def: novaCompra =
Compra::newInstance()
def: comprador =
compradores[idComprador]
post:
novaCompra^setNumero(novoNumeroAutomatico()) AND
novaCompra^setData(dataAtual()) AND
novaCompra^addComprador(comprador) AND
self^addCompraCorrente(novaCompra)
exception:
compradorsize() = 0 IMPLIES
self^throw(“Comprador não cadastrado”)
def: livro =
livros[idLivro]
def: item =
Item::newInstance()
pre:
livrosize()=1 AND
compraCorrentesize()=1
post:
item^setQuantidade(quantidade) AND
item^setValor(livro.preco) AND
item^addCompra(compraCorrente) AND
item^addLivro(livro) AND
livro^setEstoque(livro.estoque@pre – quantidade)
exception:
quantidade>livro.estoque IMPLIES
self^throw(“quantidade insuficiente em estoque”)
pre:
compraCorrentesize() = 1
body:
compraCorrente.total
pre:
compraCorrentesize() = 1
body:
compraCorrente.comprador.enderecoscollect(endereco|
Tuple {
id = endereco.idEndereco,
rua = endereco.rua,
numero = endereco.numero,
cidade = endereco.cidade.nome,
uf = endereco.cidade.uf
}
)
def: endereco =
compraCorrente.comprador.enderecos[idEndereco]
pre:
enderecosize() = 1 AND
compraCorrentesize() = 1
post:
compraCorrente^addEnderecoEntrega(endereco)
pre:
compraCorrentesize() = 1
body:
compraCorrente.frete
pre:
compraCorrentesize() = 1
body:
compraCorrente.totalGeral
pre:
compraCorrentesize() = 1
body:
compraCorrente.comprador.cartoescollect(cartao|
Tuple {
bandeira = cartao.bandeira.nome,
numero = cartao.numero
}
)
def: cartao =
compraCorrente.comprador.cartoes
select(numero=idCartao)
pre:
cartaosize() = 1 AND
compraCorrentesize() = 1
post:
compraCorrente^addCartao(cartao)
pre:
compraCorrentesize() = 1 AND
compraCorrente.cartao->size() = 1
body:
Tuple {
numero = compraCorrente.cartao.numero,
titular = compraCorrente.cartao.titular,
validade = compraCorrente.cartao.validade,
codSeg = compraCorrente.cartao.codSeg
}
pre:
compraCorrentesize()=1 AND
compraCorrente.cartao->size()=1
post:
compraCorrente.autorizacao^setCodigo(codigoAutorizacao)
pre:
compraCorrentesize() = 1
body:
compraCorrente.enderecoEntrega.cidade.tempoEntrega