Você está na página 1de 5

Universidade Federal de Santa Catarina

INE 5419 Engenharia de Software II


Quarta Prova
7 de dezembro de 2010
Prova individual sem consulta.
Responda a prova em silncio.
Eventuais dvidas sero sanadas com o professor aps a realizao da prova.
Tempo para a prova: 13h30-15h10

Nome:
Respostas:
1
2
3
4
5
6
a
c
e
e
d
b
89% 83% 69% 67% 92% 94%
Mdia da turma: 8,5
Nota mais alta: 10 (8x)
Nota mais baixa: 5 (2x)

1. Qual expresso OCL abaixo define corretamente e de acordo com o diagrama o valor inicial do
atributo valor na classe Causa?
a. Context Causa::valor init: 0.
b. Context Causa init: valor := 0.
c. Context Sistema::Causa::valor init: 0.
d. Context Sistema init: Causa.valor = 0.
e. Context valor:Causa init: 0.
2. Qual expresso OCL abaixo define corretamente e de acordo com o diagrama o atributo derivado
resultado na classe Causa como sendo o veredicto do ltimo julgamento desta causa.
a. Context Causa::resultado derive: julgamento->select(last).veredicto.
b. Context Causa::resultado derive: julgamento->last()->select(veredicto).
c. Context Causa::resultado derive: julgamento->last().veredicto.

d. Context Causa::resultado derive: julgamento[oid].veredicto->last()


e. Context Causa::resultado derive: julgamento.veredicto[last].
3. Qual expresso OCL abaixo define corretamente e de acordo com o diagrama a associao
derivada representante de Parte para Advogado, como sendo o conjunto de advogados que
representam uma dada parte em suas causas (se a causa for contra a pessoa o advogado de
defesa, seno o de acusao).
a. Context Parte::representante derive: causasContra.acusacao->
includingAll(causasPro.defesa).
b. Context Parte::representante derive: causasContra.defesa->
includingAll(causasPro.acusacao) -> includingAll(causasContra.acusacao) ->
includingAll(causasPro.defesa).
c. Context Parte::representante derive: causasContra.advogado ->
includingAll(causasPro.advogado).
d. Context Parte::representante derive: causasContra.defesa AND causasPro.acusacao.
e. Context Parte::representante derive: causasContra.defesa->
includingAll(causasPro.acusacao).
4. Qual expresso OCL abaixo define corretamente e de acordo com o diagrama uma invariante que
estabelece que nenhum advogado pode atuar como defesa e acusao para a mesma causa.
a. Context Causa inv: defesa->forAll(adv| acusacao->includes(adv))
b. Context Causa inv: causasDefendente->forAll(adv|NOT causasAcusador->includes(adv))
c. Context Causa inv: defesa->forAll(adv| acusacao-> NOT includes(adv))
d. Context Causa inv: defesa->exists(adv|NOT acusacao->includes(adv))
e. Context Causa inv: defesa->forAll(adv|NOT acusacao->includes(adv))
5. Qual expresso OCL abaixo define corretamente e de acordo com o diagrama um contrato de
consulta de sistema que retorna o valor total das causas de uma determinada parte. Esta operao
deve receber como parmetro o CPF da parte, e retornar um valor numrico nico.
a. Context Parte::totalCausas(umCpf) body: causasContra->sum(valor) + causasPro ->
sum(valor)
b. Context Parte::totalCausas(umCpf) post: causasContra->sum(valor) + causasPro ->
sum(valor)
c. Context Parte::totalCausas(umCpf) body: causasContra->inclundingAll(causasPro)->sum()
d. Context Sistema::totalCausas(umCpf) body: parte[umCpf].causasContra->sum(valor) +
parte[umCpf].causasPro->sum(valor)
e. Context Sistema::totalCausas(umCpf) body: parte[umCpf].causasContra->sum() +
parte[umCpf].causasPro->sum()
6. Escreva uma expresso OCL para um contrato de operao de sistema que permite o
cadastramento (Create de CRUD) de um novo advogado. A operao recebe como parmetro o
nome, nmero da OAB, e telefone do advogado. Deve ser considerada uma exceo se o nmero
da OAB passado como parmetro corresponder a um advogado que j tenha cadastro.
a. Context Sistema::insereAdvogado(umNome,umNrOAB,umFone)
def: novoAdv = Advogado::newInstance()
post: novoAdvogado^setNome(umNome) AND
novoAdvogado^setNrOAB(umNrOAB) AND
novoAdvogado^setTelefone(umFone)
exception: advogado[umNrOAB]->size()>0 IMPLIES self^throw(j existe)
b. Context Sistema::insereAdvogado(umNome,umNrOAB,umFone)
def: novoAdvogado = Advogado::newInstance()
post: self^addAdvogado(novoAdvogado) AND
novoAdvogado^setNome(umNome) AND
novoAdvogado^setNrOAB(umNrOAB) AND

novoAdvogado^setTelefone(umFone)
exception: advogado[umNrOAB]->size()>0 IMPLIES self^throw(j existe)
c. Context Sistema::insereAdvogado(umNome,umNrOAB,umFone)
def: novoAdv = Advogado::newInstance()
pre: advogado[umNrOAB]->size()>0
post: self^addAdvogado(novoAdvogado) AND
novoAdvogado^setNome(umNome) AND
novoAdvogado^setNrOAB(umNrOAB) AND
novoAdvogado^setTelefone(umFone)
d. Context Sistema::insereAdvogado(umNome,umNrOAB,umFone)
def: novoAdv = Advogado::newInstance()
post: self^addAdvogado(novoAdvogado) AND
novoAdvogado^setNome(umNome) AND
novoAdvogado^setNrOAB(umNrOAB) AND
novoAdvogado^setTelefone(umFone)
exception: advogado[umNrOAB]->size()=0 IMPLIES self^throw(j existe)
e. Context Sistema::insereAdvogado(umNome,umNrOAB,umFone)
def: novoAdv = advogado[umNrOAB]
post: self^addAdvogado(novoAdvogado) AND
novoAdvogado^setNome(umNome) AND
novoAdvogado^setNrOAB(umNrOAB) AND
novoAdvogado^setTelefone(umFone)
exception: advogado[umNrOAB]->size()>0 IMPLIES self^throw(j existe)

Sumrio OCL
::

1. Indica que um mtodo ( direita) est implementado em uma classe (


esquerda).
2. Indica que um valor ( direita) pertence a uma enumerao ( esquerda).
3. Indica envio de uma mensagem a uma classe.
Exemplo:
Venda::getValorTotal():Moeda -- mtodo
EstadoPagto::pendente - enumerao
Livro::newInstance() - mtodo de classe

Indica que a mensagem ( direita) enviada a uma coleo ( esquerda). Exemplo:


clientessize()

A expresso verdadeira se a mensagem indicada direita com seus parmetros


foi enviada ao objeto ou coleo denotado pela expresso esquerda. Usada
especialmente em ps-condies para indicar que uma mensagem foi enviada a
um objeto. Exemplo:
pessoa^setData(novaData)

[ ]

Notao para acessar um elemento diretamente em uma associao qualificada.


Exemplo:
compradores[cpf]

AND

Conector de duas expresses lgicas. A expresso resultante verdadeira se as


expresses direita e esquerda so verdadeiras. Exemplo:
x=1 AND y<3

body:

Indica que a expresso direita a definio (retorno) de uma consulta (mtodo)

do contexto definido esquerda. Exemplo:


Context Livir::saldoCompradorCorrente():Moeda
body: compradorCorrente.saldo

Context

Indica o contexto de uma expresso: classe, mtodo, associao ou atributo.


Exemplos:
Context Venda -- classe
Context Venda::getValorTotal():Moeda -- mtodo
Context Pessoa::nome -- atributo
Context Venda::itens - associao

def:

Usado para definir um termo que passa a valer como resultado de uma expresso.
Exemplo:
def: comprador = compradores[cpfComprador]

derive:

Usado para definir um atributo derivado. esquerda deve constar o atributo como
contexto e direita uma expresso. Exemplo:
Context Produto::lucroBruto:Moeda
derive: precoVenda precoCompra

exception:

Indica que a expresso a seguir avaliada se ocorrer uma exceo durante a


execuo de um mtodo definido no contexto esquerda:
Context Livir::identificaComprador(umCpf)
def:
comprador = compradoresselect(cpf = umCpf)
post:
self^addCompradorCorrente(comprador)
exception:
compradorsize() = 0 IMPLIES
self^throw(cpf invlido)

forAll()

No contexto de uma invariante ou ps-condio indica que a expresso entre


parnteses verdadeira para todos os elementos da coleo esquerda. Exemplo:
Context Aluno
inv:
self.disciplinasforAll(d|
d.cursosincludes(self.curso)
)

IMPLIES

Conector de duas expresses lgicas. A expresso resultante verdadeira se a


primeira for falsa ou ambas verdadeiras. Pode ser substitudo por uma estrutura
if...then...endif. Exemplo:
x=1 IMPLIES y<3

includes()

Mensagem enviada a uma coleo. Retorna true se o parmetro pertence ao


conjunto e false caso contrrio. Exemplo:
clientesincludes(joao)

includingAll() Faz a unio de dois conjuntos retornando um conjunto com os elementos do


conjunto que recebe a mensagem e os elementos do conjunto passado como
parmetro. Exemplo:
irmaos->includingAll(irmas)

init:

Usado para definir um valor inicial para um atributo. esquerda deve constar o
atributo como contexto e direita uma expresso. Exemplo:

Context Venda::valorTotal:Moeda init: 0.0

inv:

Indica que a expresso direita uma invariante para a classe que aparece como
contexto ( esquerda). Exemplo:
Context Transacao inv:
self.movimentos.valorsum() = 0

last()

Retorna o ltimo elemento de um conjunto ordenado ou lista. Exemplo:


reservaslast()

NOT

Conector lgico que retorna a negao de uma expresso booleana. Exemplo:


NOT x = y

post:

Indica que a expresso direita uma ps-condio para o mtodo indicado no


contexto esquerda. Exemplo:
Context
Livir::criaLivro(umIsbn, umTitulo, umAutor)
def:
novoLivro = Livro::newInstance()
post:
self^addLivro(novoLivro) AND
novoLivro^setIsbn(umIsbn) AND
novoLivro^setTitulo(umTitulo) AND
novoLivro^setAutor(umAutor)

pre:

Indica que a expresso direita uma precondio para o mtodo indicado no


contexto esquerda. Exemplo:
Context Livir::operacaoQualquer()
pre:
compradorCorrentenotEmpty()

select()

Mensagem enviada a uma coleo ( esquerda). Retorna uma coleo com os


elementos para os quais a expresso entre parnteses verdadeira. Exemplo:
pessoasselect(idade>18)

self

Denota uma instncia da classe do contexto. Se o contexto for uma associao,


mtodo ou atributo, ento a instncia da classe qual a associao, mtodo ou
atributo pertencem.

size()

Retorna o nmero de elementos da coleo esquerda. Exemplo:


livrossize()

sum()

Mensagem aplicvel apenas a colees de valores numricos. Retorna o somatrio


dos elementos. Pode ser aplicada diretamente a uma coleo de nmeros (sem
parmetros) ou a uma coleo de objetos (com um parmetro que indica como
obter valores numricos a partir da coleo de objetos). Exemplos:
self.movimentos.valorsum()
self.movimentossum(valor)

Você também pode gostar