Anotando Diagramas de
Classe com o Rose
Engenharia de Software e Sistemas
Roteiro
UML anotado com Z Elementos da notação Inserindo anotações em diagramas Usando a ferramenta Exemplo Exercícios
UML anotado com Z
UML é a linguagem padrão para projetos OO
Porém UML não possui semântica bem definida...
Anotações em linguagem formal nos ajudam a resolver essa carência mantendo os diagramas UML
Elementos da notação (1)
Operadores lógicos Implicação - \implies Negação - \lnot And - \land Or - \lor
Quantificadores \forall \exists
Elementos da notação (2)
Conjuntos Pertence - \in Contido - \subset União - \cup Intersecção - \cap
Tipos Naturais - \nat Inteiros - \num Booleanos - Bool
Elementos da Notação (3)
Seqüências - \seq Conjunto potência - \power Given sets (conjuntos genéricos) Produto Cartesiano - T1 \cross T2
Relações - \rel Funções - \pfun
Inserindo anotações no diagrama
Pré e pós condições Selecione a classe -> open specification Aba operations Clicar duas vezes no método desejado Insira as pré e pós condições nas respectivas abas As expressões devem ser escritas usando a notação
Z/latex (\rel, \exists, etc.)
Inserindo anotações no diagrama
Invariantes de classe Open specification -> documentation Escreva a invariante na área reservada
para a documentação da classe
Exemplo:
0..n 0..n
1 0..n
Banco
cadastrarremovercreditardebitargetSaldotransferir
Contanumero: NUMsaldo: \natgetNumgetSaldocreditardebitar
Clienteid: IDnome: NOMEgetIdgetNome
clientescontas
dono
Poupança
renderJuros
Exercícios:
Cliente- id: ID- nome: NOMEgetIdsetIdgetNomesetNome
getId() pré: pós: result! = id
setId(id: ID) pré: pós: id’ = id?
getNome() pré: pós: result! = nome
setNome(nome: NOME) pré: pós: nome’ = nome?
Exercícios
Conta- num: NUM- saldo: \natgetNum()setNum()getSaldo()setSaldo()creditar()debitar()
getNum() pré: pós: result! = num
setNum(num: Z) pré: pós: num’ = num?
getSaldo() pré: pós: result! = saldo
setSaldo(saldo: IN) pré: pós: saldo’ = saldo?
Exercícios
Conta- num: NUM- saldo: \nat...creditar()debitar()
creditar(val: IN) pré: pós: saldo’ = saldo + val?
debitar(val: IN) pré: saldo val? pós: saldo’ = saldo - val?
Exercícios
cl: clientes cl null cc: contas cc null c1,c2: contas | c1 c2
c1.getNum() c2.getNum() cl1,cl2: clientes | cl1 cl2
cl1.getId() cl2.getId()
Exercícios
Banco
cadastrar()remover()creditar()debitar()transferir()
ATENÇÃO: Esta classe possui dois atributos implícitos nomeados de contas: IP Conta e clientes: IP Cliente, respectivamente
cadastrar(conta: Conta) pré: conta? null
cc:contas cc.getNum() conta? pós: contas´ = contas {conta?}
remover(conta: Conta) pré: conta? null
cc:contas cc.getNum() = conta? pós: contas´ = contas \ {conta?}
Top Related