140 likes | 242 Views
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
E N D
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: Banco cadastrar remover creditar debitar getSaldo transferir clientes contas 0..n 0..n Conta numero: NUM saldo: \nat getNum getSaldo creditar debitar Cliente id: ID nome: NOME getId getNome dono 1 0..n Poupança renderJuros
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: Cliente - id: ID - nome: NOME getId setId getNome setNome
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 getNum() setNum() getSaldo() setSaldo() creditar() debitar()
creditar(val: IN) pré: pós: saldo’ = saldo + val? debitar(val: IN) pré: saldo val? pós: saldo’ = saldo - val? Exercícios Conta - num: NUM - saldo: \nat ... creditar() debitar()
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()
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?} Exercícios ATENÇÃO: Esta classe possui dois atributos implícitos nomeados de contas: IP Conta e clientes: IP Cliente, respectivamente Banco cadastrar() remover() creditar() debitar() transferir()