Anotando Diagramas de Classe com o Rose
description
Transcript of Anotando Diagramas de Classe com o Rose
![Page 1: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/1.jpg)
Anotando Diagramas de
Classe com o Rose
Engenharia de Software e Sistemas
![Page 2: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/2.jpg)
Roteiro
UML anotado com Z Elementos da notação Inserindo anotações em diagramas Usando a ferramenta Exemplo Exercícios
![Page 3: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/3.jpg)
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
![Page 4: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/4.jpg)
Elementos da notação (1)
Operadores lógicos Implicação - \implies Negação - \lnot And - \land Or - \lor
Quantificadores \forall \exists
![Page 5: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/5.jpg)
Elementos da notação (2)
Conjuntos Pertence - \in Contido - \subset União - \cup Intersecção - \cap
Tipos Naturais - \nat Inteiros - \num Booleanos - Bool
![Page 6: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/6.jpg)
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
![Page 7: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/7.jpg)
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.)
![Page 8: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/8.jpg)
Inserindo anotações no diagrama
Invariantes de classe Open specification -> documentation Escreva a invariante na área reservada
para a documentação da classe
![Page 9: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/9.jpg)
Exemplo:
0..n 0..n
1 0..n
Banco
cadastrarremovercreditardebitargetSaldotransferir
Contanumero: NUMsaldo: \natgetNumgetSaldocreditardebitar
Clienteid: IDnome: NOMEgetIdgetNome
clientescontas
dono
Poupança
renderJuros
![Page 10: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/10.jpg)
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?
![Page 11: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/11.jpg)
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?
![Page 12: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/12.jpg)
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?
![Page 13: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/13.jpg)
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()
![Page 14: Anotando Diagramas de Classe com o Rose](https://reader036.fdocumentos.com/reader036/viewer/2022082820/56814c22550346895db925cb/html5/thumbnails/14.jpg)
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?}