contratos modelagem funcional. especificação das funções externas do sistema operações de...
TRANSCRIPT
![Page 1: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/1.jpg)
Contratos
Modelagem Funcional
![Page 2: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/2.jpg)
Modelagem Funcional
Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs
![Page 3: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/3.jpg)
Artefatos necessários
Modelo conceitual Diagramas de seqüência ou casos de
uso expandidos
![Page 4: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/4.jpg)
Contrato de Operação de Sistema Pré-condições Pós-condições Exceções
![Page 5: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/5.jpg)
Contrato de Consulta de Sistema Pré-condições Resultados
![Page 6: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/6.jpg)
Pré-condições
definem o que deve ser verdadeiro na estrutura da informação armazenada para que a operação ou consulta possa ser executada
elas não serão testadas durante a execução algum mecanismo externo deverá garantir
sua validade antes de habilitar a execução da operação ou consulta de sistema correspondente
![Page 7: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/7.jpg)
Pós-condições
estabelecem o que uma operação de sistema muda na estrutura da informação armazenada
![Page 8: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/8.jpg)
Resultados
Conjunto de informações retornado por uma consulta
![Page 9: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/9.jpg)
Exceções
eventos que, se ocorrerem, impedem o prosseguimento correto da operação
usualmente não podem ser garantidas a priori
serão testadas durante a execução
![Page 10: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/10.jpg)
Tipos de Pré-condições
Garantia de parâmetros: pré-condições que garantem que os parâmetros da operação ou consulta correspondem a elementos válidos do sistema de informação
Restrição complementar: pré-condições que garantem que a informação se encontra em uma determinada situação desejada
![Page 11: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/11.jpg)
Pré-condição de garantia de parâmetros é semântica Verificações sintáticas são feitas por
tipagem Ex.: Ao invés de escrever “x deve ser
maior do que zero”, usar x:InteiroPositivo na declaração do parâmetro
Uma pré-condição é semântica se para testa-la for necessário consultar informações gerenciadas pelo sistema
![Page 12: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/12.jpg)
Garantia de Parâmetros
Classe Videolocadora
operação: identificaCliente(nomeCliente:String)
pré:
Existe uma instância da classe Cliente tal que o atributo nome desta instância é igual ao parâmetro nomeCliente.
self.cadastroexists(cliente|cliente.nome=nomeCliente)
![Page 13: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/13.jpg)
Em um contexto não ambíguo
é possível simplificar a escrita da pré-condição
Classe Videolocadora
operação: identificaCliente(nomeCliente:String)
pré:
Existe um Cliente cujo nome é igual a nomeCliente.
self.cadastroexists(nome=nomeCliente)
![Page 14: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/14.jpg)
Restrição complementar exemplo: se o modelo conceitual
especifica que uma associação tem multiplicidade de papel 0..1, uma pré-condição complementar poderá especificar que, para uma instância específica, a associação efetivamente existe (ou não existe)
uma pré-condição nunca poderá contradizer as especificações do modelo conceitual, apenas complementá-las
![Page 15: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/15.jpg)
Tipos de restrições complementares Existe (ou não existe) uma instância (ou um conjunto
de instâncias) com determinadas propriedades. Todas as instâncias (ou nenhuma das instâncias) de
uma determinada classe (ou um conjunto definido por uma associação) têm determinadas propriedades.
Uma associação não obrigatória (com multiplicidade de papel 0..1 ou *) existe (ou não existe) entre determinadas instâncias.
Um determinado atributo de uma instância tem um certo valor.
![Page 16: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/16.jpg)
Exemplo
Classe Videolocadora
operação: identificaCliente(nomeCliente:String)
pré:
Existe um Cliente cujo nome é igual a nomeCliente.
Este Cliente possui débito igual a zero.
Alias: cliente = self.cadastroselect(nome=nomeCliente)
Pré:
clientesize() == 1
cliente.debito == 0
![Page 17: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/17.jpg)
Como garantir pré-condições
Considere a seguinte interface
![Page 18: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/18.jpg)
Diagrama de seqüência com exceções
Operação: identificaCliente(nome:String)
Alias: cliente = self.cadastroselect(nome=nomeCliente)
Pré: -
Exceções:
“Nome invalido” se clientesize == 0
“Cliente com debito” se cliente.debito != 0
![Page 19: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/19.jpg)
Convertendo uma possível exceção em pré-condição Interface modificada
![Page 20: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/20.jpg)
DS modificado para garantir uma pré-condição
Operação: identificaCliente(nome:String)
Alias: cliente = self.cadastroselect(nome=nomeCliente)
Pré: clientesize() == 1
Exceções:
“Cliente com debito” se cliente.debito != 0
![Page 21: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/21.jpg)
DS modificado para garantir ambas
Operação: identificaCliente(nome:String)
Alias: cliente = self.cadastroselect(nome=nomeCliente)
Pré:
clientesize() == 1
cliente.debito == 0
Exceções: -
![Page 22: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/22.jpg)
Associações temporárias
são usadas para representar informações que não precisam persistir
![Page 23: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/23.jpg)
Uso da associação temporária no contrato
Classe Videolocadora
operação: emprestaFita(codigoFita:String)
pré:
Existe um clienteCorrente.
self.clienteCorrentesize()==1
![Page 24: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/24.jpg)
Pós-condições semânticas
Instância: criação e destruição Associação: criação e destruição Atributo: modificação de valor
![Page 25: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/25.jpg)
Criação de uma instância e sua associação com outra instância preexistente
Pós: foi criado um Cliente e associado à Videolocadora
Pós: cliente = Cliente.new() self.addToCadastro(cliente).
![Page 26: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/26.jpg)
Destruição de uma instância
Pós: “foi destruído um Cliente cujo nome é igual a nomeCliente”.
Presume-se que quando uma instância é destruída, todas as associações ligadas a ela também o sejam. Deve-se tomar cuidado com questões estruturais (associações obrigatórias) quando um objeto é destruído.
Alias: cliente = self.cadastroselect(nome=nomeCliente)
Pós:
self.cadastroremove(cliente)
cliente.destroy()
![Page 27: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/27.jpg)
Criação de uma associação entre duas instâncias
Pós: O cliente cujo nome é nomeCliente foi associado à VideoLocadora como clienteCorrente
Alias: cliente = self.cadastroselect(nome=nomeCliente) Pós: self.clienteCorrente = cliente
![Page 28: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/28.jpg)
Destruição de uma associação
Pós: foi destruída a associação de VideoLocadora com clienteCorrente
Pós: self.setClienteCorrente(null)
![Page 29: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/29.jpg)
Modificação do valor de um atributo de uma instância
Pós: O débito do cliente corrente foi alterado para R$50,00
Pós: self.clienteCorrente.debito = 50
![Page 30: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/30.jpg)
Pós-condição condicional
Pós: se não havia nenhum emprestimoAberto associado ao clienteCorrente, então um novo Emprestimo foi criado e associado ao clienteCorrente como emprestimoAberto.
Pós: self.clienteCorrente.emprestimoAberto@presize==0 IMPLIES self.clienteCorrente.emprestimoAberto=Emprestimo.new()
![Page 31: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/31.jpg)
Contrato para Inserção
Classe Videolocadora
operação: cadastraCliente(nomeC,enderecoC,telefoneC:String)
pré:
Não existe nenhum Cliente com nome = nomeC.
pós:
Foi criado um Cliente e adicionado ao cadastro.
Os atributos nome, endereco e telefone do Cliente foram alterados para nomeC, enderecoC e telefoneC.
O atributo debito do Cliente foi alterado para 0,00.
![Page 32: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/32.jpg)
Em OCL
Classe Videolocadora
operação: cadastraCliente(nomeC,enderecoC,telefoneC:String)
pré:
self.cadastro select(nome=nomeC) size==0
pós:
cliente = Cliente.new()
self.addToCadastro(cliente)
cliente.nome = nomeC
cliente.endereco = enderecoC
cliente.telefone = telefoneC
cliente.debito = 0
![Page 33: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/33.jpg)
Contrato para Alteração
Classe Videolocadora
operação: alteraCliente(nomeC,enderecoC,telefoneC:String)
pré:
Existe um Cliente com nome = nomeC.
pós:
Os atributos endereco e telefone do Cliente foram alterados para enderecoC e telefoneC.
![Page 34: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/34.jpg)
Em OCL
Classe Videolocadora
operação: alteraCliente(nomeC,enderecoC,telefoneC:String)
alias:
cliente = self.cadastro select(nome=nomeC)
pré:
cliente size() == 1
pós:
cliente.endereco = enderecoC
cliente.telefone = telefoneC
![Page 35: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/35.jpg)
Contrato para Exclusão
Classe Videolocadora
operação: excluiCliente(nomeC:String)
pré:
Existe um Cliente com nome = nomeC.
Esse Cliente não possui associação com nenhum Emprestimo.
pós:
O Cliente com nome = nomeC foi destruído.
![Page 36: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/36.jpg)
Em OCL
Classe Videolocadora
operação: excluiCliente(nomeC:String)
alias:
cliente = self.cadastro select(nome=nomeC)
pré:
cliente size=1.
cliente.emprestimos size=0.
pós:
self.removeFromCadastro(cliente).
![Page 37: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/37.jpg)
Três opções para destruir uma instância com segurança
Garantir, via pré-condição, que ela não tenha associações obrigatórias.
Propagar a exclusão através das associações obrigatórias.
Gerar uma exceção, se a operação de exclusão for tentada em uma instância com associações obrigatórias
![Page 38: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/38.jpg)
Contrato para Consulta
Classe Videolocadora
consulta: consultaCliente(nomeC:String)
pré:
Existe um Cliente com nome = nomeC.
resultado:
Retorna o endereco e o telefone do Cliente
![Page 39: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/39.jpg)
Em OCL
Classe Videolocadora
consulta: consultaCliente(nomeC:String)
alias:
cliente = self.cadastro select(nome=nomeC)
pré:
cliente size==1
retorno:
cliente collect(Sequence{endereco,telefone})
![Page 40: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/40.jpg)
Contrato para uma Consulta de Listagem
Classe Videolocadora
consulta: listaClientes()
pré:
retorno:
retorna os nomes de todos os Clientes do cadastro.
![Page 41: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/41.jpg)
Em OCL
Classe Videolocadora
consulta: listaClientes()
pré:
retorno:
self.cadastro collect(nome)
![Page 42: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/42.jpg)
Outras Consultas e Operações (específicas dos casos de uso) Freqüentemente haverá uma cadeia de
execução ao longo de um dos fluxos, explicitada no diagrama de seqüência.
Verificar: Qual é o objetivo de cada operação? O que cada uma delas espera que tenha sido
produzido pelas anteriores? O que cada uma delas produz? Que exceções poderiam ocorrer durante a
execução?
![Page 43: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/43.jpg)
Exemplo
![Page 44: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/44.jpg)
Classe Videolocadora
consulta: listaNomesDeClientes()
pré:
resultado:
this.cadastro collect(nome)
![Page 45: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/45.jpg)
Classe Videolocadora
operação: identificaCliente(nomeC:String)
alias:
cliente = self.cadastro select(nome=nomeC)
pré:
cliente size() == 1
self.clienteCorrente size() == 0
pós:
self.setClienteCorrente(cliente)
![Page 46: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/46.jpg)
Classe Videolocadora
consulta: listaCodigosDeFitasDisponiveis()
pré:
retorno:
self.fitas select(emAndamento size() == 0) collect(codigo)
![Page 47: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/47.jpg)
Classe Videolocadora operação: emprestaFita(codigoF:String) alias: fita = self.fitas select(codigo=codigoF) pré: self.clienteCorrente size() == 1 fita size() == 1 pós:
self.clienteCorrente.emprestimoAberto size() == 0 IMPLIES emprestimo = Emprestimo.new() emprestimo.data = today() emprestimo.valorTotal = 0 self.clienteCorrente.setEmprestimoAberto(emprestimo) item = ItemDeEmprestimo.new() emprestimo.addItem(item) estado = EmAndamento.new() item.addEstado(estado) estado.setFita(fita) item.setPrazo(fita.filme.tipoDeFilme.prazo) item.setValor(fita.filme.tipoDeFilme.valor) emprestimo.setValorTotal(emprestimo.valorTotal@pre + item.valor)
![Page 48: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/48.jpg)
Classe Videolocadora
consulta: consultaValorDoEmprestimoAberto()
pré:
self.clienteCorrente.emprestimoAberto size() == 1
resultado:
self.clienteCorrente.emprestimoAberto.valorTotal
![Page 49: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/49.jpg)
Classe Videolocadora
consulta: consultaPrazosDoEmprestimoAberto()
pré:
self.clienteCorrente.emprestimoAberto size() == 1
retorno:
self.clienteCorrente.emprestimoAberto.itensDeEmprestimo collect(prazo)
![Page 50: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/50.jpg)
Classe Videolocadora
operação: finalizaEmprestimo()
pré:
self.clienteCorrente.emprestimoAberto size() == 1
self.clienteCorrente.emprestimoAberto.itensDeEmprestimo size() > 0
pós:
self.clienteCorrente.setEmprestimoAberto(null)
self.setClienteCorrente(null)
![Page 51: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/51.jpg)
Trabalho a ser entregue no próximo módulo
1. Escolher um sistema qualquer. Selecionar um caso de uso não trivial. Expandir o caso de uso e fazer o diagrama de seqüência.
2. Fazer o modelo conceitual.3. Escrever os contratos das operações
e consultas do caso de uso.
![Page 52: Contratos Modelagem Funcional. Especificação das funções externas do sistema Operações de Sistema - inputs Consultas de Sistema - outputs](https://reader036.vdocuments.pub/reader036/viewer/2022081507/552fc11b497959413d8c98d8/html5/thumbnails/52.jpg)
Equipes de 3 pessoas
Cada equipe entregará 3 trabalhos Cada membro executa o passo 1
individualmente. Em seguida cada um repassa o resultado do
passo 1 para outro membro da equipe executar o passo 2.
Em seguida cada um repassa o resultado do passo 2 para o outro membro executar o passo 3.
Identificar em cada trabalho quem fez o que