Buscar

Aula 7 - (2012)

Prévia do material em texto

16/03/2012
1
Visão Geral
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 2
16/03/2012
2
� Artefatos
© Carla A. Lima Reis e Rodrigo Quites Reis 
(LABES-UFPA) / 2009 3
Sistema
Usuário
XPTO
Diagrama de CasosDiagrama de CasosDiagrama de CasosDiagrama de Casos
de Usode Usode Usode Uso
T elefone
codArea
numero
Funcionario
nome
cargo
dataAdmissao 0..*
0..1
0..*
+subordinado
0..1+chefe
supervisiona
0..*0..*
possui
DadosPessoais
corPele
corOlhos
tipoSanguineo
...
Diagrama de ClassesDiagrama de ClassesDiagrama de ClassesDiagrama de Classes
 : Atendente : Atendente
Tela de Geração 
de Cont a
Tela de Geração 
de Cont a
 : Sessão : Sessão : Item : Item
conta : Contaconta : Conta
 : Promoção : Promoção
1: gerarContaSessão(s)
2: obter(s)
3: s
4: obterItensConsumidos
5: ob terItens
6: itens
7: itens
10: obterPreço
11: preçoUnit ário
12: obterQuantidade(item)
13: quantidade
8: obterNome
9: nome
repetir enquanto houver itens na sessão de consumo
15: criar(s, i tens)
16: conta
17: conta
14: 
Diagrama de SequênciaDiagrama de SequênciaDiagrama de SequênciaDiagrama de Sequência
e Colaboraçãoe Colaboraçãoe Colaboraçãoe Colaboração
Planejado
Cancelado
transferência( novaData, novaHora ) / 
data := novaData; hora := novaHora
Pago
Realizado
Realizado com 
pagamento pendente
Realizado com 
pagamento antecipado
Realizado com 
pagamento pendente
pagamentoEfetuado Realizado com 
pagamento antecipado
solicitaçãoPaciente / criarCancelamento(dataHoraAtual, 
motivo=paciente)
solicitaçãoMédico / criarCance lamento(dataHoraAtual, 
motivo=médico)
autorização( dataHoraAutorização, códigoAutorização, convênio )[ tipo == convênio 
] / criarAutorização(dataHoraAutorização, códigoAutorização, convênio)
pagamentoEfetuado[ tipo == particular ]
Diagrama de EstadosDiagrama de EstadosDiagrama de EstadosDiagrama de Estados
Diagrama deDiagrama deDiagrama deDiagrama de
AtividadesAtividadesAtividadesAtividades
� Relacionamento entre artefatos (1)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 4
Sistema
Usuário
XPTO
Diagrama de CasosDiagrama de CasosDiagrama de CasosDiagrama de Casos
de Usode Usode Usode Uso
 : Atendente : Atendente
Tela de Geração 
de Cont a
Tela de Geração 
de Cont a
 : Sessão : Sessão : Item : Item
conta : Contaconta : Conta
 : Promoção : Promoção
1: gerarContaSessão(s)
2: obter(s)
3: s
4: obterItensConsumidos
5: obterIt ens
6: itens
7: itens
10: obterPreço
11: preçoUnitário
12: obterQuantidade(item)
13: quantidade
8: obterNome
9: nome
repetir enquanto houver itens na sessão de consumo
15: criar(s, itens)
16: conta
17: conta
14: 
Diagrama de SequênciaDiagrama de SequênciaDiagrama de SequênciaDiagrama de Sequência
e Colaboraçãoe Colaboraçãoe Colaboraçãoe Colaboração
Fornece os
cenários
Valida as iterações
16/03/2012
3
� Relacionamento entre artefatos (2)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 5
Sistema
Usuário
XPTO
Diagrama de CasosDiagrama de CasosDiagrama de CasosDiagrama de Casos
de Usode Usode Usode Uso
T elefone
codArea
numero
Funcionario
nome
cargo
dataAdmissao 0..*
0..1
0..*
+subordinado
0..1+chefe
supervisiona
0..*0..*
possui
DadosPessoais
corPele
corOlhos
tipoSanguineo
...
Diagrama de ClassesDiagrama de ClassesDiagrama de ClassesDiagrama de Classes
Fornece os cenários
Validas as iterações (*)
(*) isto é, se não forem achadas as classes envolvidas em um CDU,
há indícios que não se trata de um CDU em si.
� Relacionamento 
entre Artefatos (3)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 6
T elefone
codArea
numero
Funcionario
nome
cargo
dataAdmissao 0..*
0..1
0..*
+subordinado
0..1+chefe
supervisiona
0..*0..*
possui
DadosPessoais
corPele
corOlhos
tipoSanguineo
...
Diagrama de ClassesDiagrama de ClassesDiagrama de ClassesDiagrama de Classes
 : Atendente : Atendente
Tela de Geração 
de Cont a
Tela de Geração 
de Cont a
 : Sessão : Sessão : Item : Item
conta : Contaconta : Conta
 : Promoção : Promoção
1: gerarContaSessão(s)
2: obter(s)
3: s
4: obterItensConsumidos
5: ob terItens
6: itens
7: itens
10: obterPreço
11: preçoUnit ário
12: obterQuantidade(item)
13: quantidade
8: obterNome
9: nome
repetir enquanto houver itens na sessão de consumo
15: criar(s, i tens)
16: conta
17: conta
14: 
Diagrama de SequênciaDiagrama de SequênciaDiagrama de SequênciaDiagrama de Sequência
e Colaboraçãoe Colaboraçãoe Colaboraçãoe Colaboração
Fornece objetos
e classes
Valida o modelo
e fornece detalhes
(atributos e operações)
16/03/2012
4
� Relacionamento entre Artefatos (4)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 7
T elefone
codArea
numero
Funcionario
nome
cargo
dataAdmissao 0..*
0..1
0..*
+subordinado
0..1+chefe
supervisiona
0..*0..*
possui
DadosPessoais
corPele
corOlhos
tipoSanguineo
...
Diagrama de ClassesDiagrama de ClassesDiagrama de ClassesDiagrama de Classes
Planejado
Cancelado
transferência( novaData, novaHora ) / 
data := novaData; hora := novaHora
Pago
Realizado
Realizado com 
pagamento pendente
Realizado com 
pagamento antecipado
Realizado com 
pagamento pendente
pagamentoEfetuado Realizado com 
pagamento antecipado
solicitaçãoPaciente / criarCancelamento(dataHoraAtual, 
motivo=paciente)
soli citaçãoMédico / criarCance lamento(dataHoraAtual, 
motivo=médico)
autorização( dataHoraAutorização, códigoAutorização, convênio )[ tipo == convênio 
] / criarAutorização(dataHoraAutorização, códigoAutorização, convênio)
pagamentoEfetuado[ tipo == particular ]
Diagrama de EstadosDiagrama de EstadosDiagrama de EstadosDiagrama de Estados
Fornece os objetos e classes
Valida o modelo
e fornece detalhes
(atributos e operações)
� Relacionamento entre Artefatos (5)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 8
http://www.voxxel.com.br/pages/introdiauml.html
16/03/2012
5
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 9
� Resumo
◦ Diagrama base para qualquer discussão acerca da 
arquitetura de um sistema com UML
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 10
16/03/2012
6
� Propósito
◦ Representação dos dados manipulados e 
armazenados pelos programas de acordo com os 
conceitos de Orientação a Objetos
◦ Notação fortemente baseada no Diagramas 
Entidade-Relacionamento de Peter Chen
11
� Diagrama de Classe
◦ Notação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 12
Nome da classeNome da classeNome da classeNome da classe
atributo: tipo de dado
atributo: tipo de dado = valor inicial
Operação(lista de argumentos):
tipo do resultado
Opcionais
(fornecidos somente após
um melhor entendimento
do sistema)
16/03/2012
7
� Aspectos tratados pelos Diagramas de Classe: 
Dados e Funções
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 13
DadosDadosDadosDados
FunçõesFunçõesFunçõesFunções
EventosEventosEventosEventos
Sistema
Obs: a ordem da execução das funções (aspecto temporal) não é tratada
explicitamente nos diagramas de classe
� Associações
◦ Permitem descrever as relações existentes entre os 
elementos (objetos) dos conjuntos (classes)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 14
LivrosLivrosLivrosLivros
PessoasPessoasPessoasPessoasAutor de
Escrito por
16/03/2012
8
� Associações
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 15
LivroLivroLivroLivroPessoaPessoaPessoaPessoaescrito por
0..* 1..*
Multiplicidade da associação
Rótulo da associação
� Associações
◦ Interpretação:
� Um objeto de Livro está associado com no mínimo um 
objeto de Pessoa, e no máximo com uma quantidade 
indeterminada
� Um objeto de Pessoa pode não estar vinculado com 
qualquer objeto de Livro ou com uma quantidade 
indeterminada
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 16
LivroLivroLivroLivro PessoaPessoaPessoaPessoaescrito por
0..* 1..*
16/03/2012
9
� Associações
◦ Classes:
� Nome de “Entidades”
� Rotuladas no Singular
◦ Associações
� Leitura no sentido “convencional” (esquerda para 
direita, de cima para baixo)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 17
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 18
Jogador
Gol
0..* +autor0..*
Relação
18..*
0..*
18..*
0..*
Substituição
0..* +substituto0..*
0..*
+substituído
0..*
Expulsão
0..*
+expulso
0..*Estádio
Arbitro
Torneio
Jogo
0..*0..*
+local
0..*0..*
+principal
2
0..*+auxiliar
2
0..*
1
0..*
+reserva
1
0..*
0..1
1..*
0..1
1..*
HistoriaEquipeJogo
0..*0..*
0..*0..*
0..*0..*
0..*
Equipe
2
0..*
2
0..*
0..*0..*0..*
Ex
em
p
lo
 d
e 
d
ia
g
ra
m
a 
co
n
ce
it
u
al
Ex
em
p
lo
 d
e 
d
ia
g
ra
m
a 
co
n
ce
it
u
al
Ex
em
p
lo
 d
e 
d
ia
g
ra
m
a 
co
n
ce
it
u
al
Ex
em
p
lo
 d
e 
d
ia
g
ra
m
a 
co
n
ce
it
u
al
(t
ip
ic
am
en
te
 p
ro
d
u
zi
d
o
 n
as
 p
ri
m
ei
ra
s 
it
er
aç
õ
es
)
realizado em
16/03/2012
10
� Atributos
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 19
PessoaPessoaPessoaPessoa
Nome: Str
Endereço: {
Logradouro: Str,
Bairro: Str,
Cidade: Str. }
Telefones: Array of Int
Obs: Atributos Compostos e
Multivalorados são
permitidos pelo modelo de
dados OO
No entanto é indicado que uma 
Classe seja criada (facilita 
reutilização) Ex: Pedro e João 
moram no mesmo endereço
� Associações
◦ Observe: não há chave-primária
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 20
LivroLivroLivroLivro
Título: Str
ISBN: Int
Editora: Str
PessoaPessoaPessoaPessoa
Nome: Str
Endereço: {
Logradouro: Str,
Bairro: Str,
Cidade: Str. }
Telefones: Array of Int
escrito por
0..* 1..*
Multiplicidade da associação
Rótulo da associação
16/03/2012
11
� Associações
◦ Papel de Classe/Objeto em uma Associação (em 
inglês, role)
◦ Pode ocorrer simultaneamente com o nome 
(rótulo / label) da associação
◦ O papel é usado na geração de código e BD
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 21
LivroLivroLivroLivro
Título: Str
ISBN: Int
Editora: Str
PessoaPessoaPessoaPessoa
Nome: Str
Endereço: {
Logradouro: Str,
Bairro: Str,
Cidade: Str. }
Telefones: Array of Int
escrito por0..* 1..*
autorobra
Papéis
� Atributos e Métodos
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 22
Conta BancáriaConta BancáriaConta BancáriaConta Bancária
número
saldo
dataAbertura
criar()
bloquear()
desbloquear()
creditar()
debitar()
PessoaPessoaPessoaPessoa
Nome: Str
Endereço: {
Logradouro: Str,
Bairro: Str,
Cidade: Str. }
Telefones: Array of Int
10..*
titular
dependente
0..20..*
16/03/2012
12
� Associações
◦ Exemplo de Geração de Código em Java
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 23
ContaBancariaPessoa 0..*
1
0..*
1
+titular possui
0..* 0..*+dependente 0..*0..*
Class ContaBancaria {Class ContaBancaria {Class ContaBancaria {Class ContaBancaria {
String numero;
float saldo;
Date dataAbertura;
Pessoa titular;
Vector dependente;
� Associações
◦ Exemplos: Associação Unária ou Reflexiva
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 24
Funcionário
0..1
*
Supervisiona
FuncionárioFuncionárioFuncionárioFuncionário
João
supervisiona
É supervisionado por
16/03/2012
13
� Associações
◦ Exemplos: Associação Unária ou Reflexiva
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 25
Funcionário
0..1
*
Supervisiona
Funcionario
0..*
0..1 supervisiona
0..*
0..1+chefe
+subordinado
Evolução:Evolução:Evolução:Evolução: acréscimo dos
papéis facilita a implementação
e o entendimento
� Associações
◦ Exemplos: Associação Unária ou Reflexiva
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 26
�Class Funcionario {
�Xxx;
�Funcionario chefe;
�Vector subordinado;
Funcionario
0..*
0..1 supervisiona
0..*
0..1+chefe
+subordinado
16/03/2012
14
� Associações
◦ Navegabilidade das Associações
� Associação binária e bibibibidirecional
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 27
Funcionário Departamento
0..* trabalha 1
Funcionário trabalha em Departamento
Funcionário
João
Departamento
Financeiro
� Associações
◦ Navegabilidade das Associações
� Associação binária e uniuniuniunidirecional
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 28
Funcionário Departamento
0..* trabalha
Funcionário
João
Departamento
Financeiro
16/03/2012
15
� Associações
◦ Navegabilidade das Associações
� Associação Unidirecional
� Razão da existência � mais fácil a implementação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 29
� Associações
◦ Navegabilidade das Associações
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 30
16/03/2012
16
� Associações
◦ Multiplicidade: limiar inferior..limiar superior
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 31
Multiplicidade Significado
0..1 Zero ou um
1 Somente 1 (opcional)
0..* Maior ou igual a zero
* Maior ou igual a zero
1..* Maior ou igual a 1
1..15 (m..n) De 1 a 15 (m a n), inclusive
� Exercício: qual o mais correto?
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 32
Funcionário Departamento
1 trabalha 0..1
Funcionário Departamento
0..* trabalha
Funcionário Departamento
0..* trabalha 0..*
(adaptado de BEZ02)
16/03/2012
17
� Exemplos
◦ Funcionário = { João, Maria, José }
◦ Depto = {A, B}
◦ Trabalha = { (João, A), (Maria, B), (José, B)}
◦ Gerente = { (João, B), (Maria, A) }
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 33
Funcionário Departamento
trabalha
1*
gerente 0..1
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 34
Funcionário Departamento
Financeiro
TI
João
Marcela
Amanda
Funcionário Departamento
trabalha
1*
gerente 0..1
16/03/2012
18
� Exemplo
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 35
Financeira
código
nome
Venda
data
hora
Vendedor
número
nenha
nívelAutorização
financia
0..1 * *
realizada por
� Classes associativas
◦ Informação que surge a partir da associação de 
duas outras classes
◦ Podem ser anônimas
◦ Um objeto de classe associativa está associado 
com exatamente um objeto de cada extremidade
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 36
Fulano, Cálculo I, INS, 75%, 1º 2005
Fulano, Cálculo I, BOM, 100%, 2º 2005
Beltrano, Mat, BOM, 90%, 2º 2005
16/03/2012
19
� Classes associativas
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 37
Pessoa
Nome
Endereço: {
Logradouro;
Bairro;
Cidade. }
Sexo
marido
esposa
0..1
0..1
casamentoData
Regime
Pessoa
Nome
Endereço: {
Logradouro;
Bairro;
Cidade. }
Sexo
Pessoa
Nome
Endereço: {
Logradouro;
Bairro;
Cidade. }
Sexo
marido
esposa
0..1
0..1
casamento Data
Regime
Data
Regime
Data
Regime
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 38
Pessoa
Nome
Endereço: {
Logradouro;
Bairro;
Cidade. }
Sexo
marido
esposa
0..1
0..1
casamento Data
Regime
Pessoa
Nome
Endereço: {
Logradouro;
Bairro;
Cidade. }
Sexo
Pessoa
Nome
Endereço: {
Logradouro;
Bairro;
Cidade. }
Sexo
marido
esposa
0..1
0..1
casamento Data
Regime
Data
Regime
Data
Regime
Pessoa
João
Marcela
Amanda
Jorge
Abel
dataX
regimeX
dataY
regimeY
16/03/2012
20
� Classes associativas
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 39
Financeira
código
nome
Venda
data
hora
Vendedor
número
nenha
nívelAutorização
financia
0..1 * *
realizada por
registroAprovação
dataAprovação
Financiamento
� Onde guardar data de locação e outras 
informações da locação? Na classe Locadora 
ou na classe Carro?
Locadora
CNPJ : String
Endereco : String
Carro
Renavan : String
Placa : String
Ano : Date
Modelo : String
0..n
loca
0..n
16/03/2012
21
Locadora
CNPJ : String
Endereco : String
Carro
Renavan : String
Placa : String
Ano : Date
Modelo : String
0..n
loca
0..n
Aluguel
DataLocacao
DataDevolucao
ValorPorHora
� Classes associativas
◦ Observação importante: o conceito de “Classe 
Associativa” não é permitido em todas as 
linguagens de programação e sistemas de banco de 
dados OO
◦ Assim, em muitos casos as classes associativas 
encontradas em Análise são substituídas por 
classes regulares em Projeto
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 42
16/03/2012
22
� Classes associativas
◦ Classe associativa substituída por normal
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 43
Obs: sempre vai ser multiplicidade 1, neste caso
OriginalOriginalOriginalOriginal
(Análise)(Análise)(Análise)(Análise)
ModificadoModificadoModificadoModificado
(Projeto)(Projeto)(Projeto)(Projeto)
� Classes associativas
◦ Classe associativa substituída por normal
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 44
Observar que neste caso a
substituição não é trivial visto
que o objeto de devolução só
é criado após a associação
de Empréstimo e Item.
16/03/2012
23
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 45
� Agregação
◦ Associa de todo/partetodo/partetodo/partetodo/parte
◦ Ação realizada sobre todo atinge as partes
◦ Tipo especial de associação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 46
Documento Parágrafo Sentença0..* 0..*
Documento Parágrafo Sentença0..* 0..*
composto-por composto-por
16/03/2012
24
� Agregação
◦ A parte pode existir sem o todo
◦ Exemplo
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 47
Associação
Esportiva
Equipe Jogador0..* 0..*
◀ afiliada
� Composição
◦ A parte não existir sem o todo
◦ Exemplo
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 48
Homem Órgão0..*
16/03/2012
25
� Generalização/Especialização
◦ Todos os exemplos anteriores envolviam a ligação 
entre instâncias de classes (objetos)
◦ Com a Herança, o relacionamento fornecido é o de 
subconjunto
◦ Útil para definir hierarquias de classes (não de 
objetos!) que possuem propriedades comuns
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 49
� Generalização/Especialização
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 50
Cliente
nome
PessoaFísica
CPF
RG
Sexo
DataNascimento
PessoaJurídica
CGC
RazãoSocial
Super-classe
Sub-classes
(herdeiras)
16/03/2012
26
� Generalização/Especialização
◦ Em Rational Rose
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 51
Cliente
PFPJ
� Generalização/Especialização
◦ Polimorfismo de dados:
� Uma associação pode ocorrer com objetos de 
diferentes classes (deste que tenham suas classes 
relacionadas por herança).
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 52
16/03/2012
27
� Generalização/Especialização
◦ Polimorfismo de dados: exemplo
� não há necessidade de se criar uma associação entre 
Compra e subclasses de Cliente
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 53
Cliente
nome
PessoaFísica
CPF
RG
Sexo
DataNascimento
PessoaJurídica
CGC
RazãoSocial
Compra*
realiza
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 54
16/03/2012
28
� Generalização/Especialização
◦ Herança Múltipla: caso especial
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 55
Veículo
anfíbio
Veículo
Veículo
terrestre
Veículo
aquático
Conceito pouco usado na prática:
•Poucas linguagens de programação
permitem o uso
•Adiciona maior complexidade ao
modelo
� Generalização/Especialização
◦ Classe Abstrata
� Classe que não instancia objetos.
� Serve apenas para gerar novas sub-classes a partir da 
herança.
� Freqüentemente é uma classe artificial, isto é, que não 
existe no Domínio do Problema e surge para acomodar 
propriedades comuns de classes concretas.
� Representada com título em itálico ou com uma 
restrição {abstrata} (ou {abstract})
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 56
16/03/2012
29
� Generalização/Especialização
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 57
Cliente
ContaBancária
número
dataAbertura
saldo
debitar(quantia)
creditar(quantia)
Transação
ContaCorrente
limiteSaque
ContaPoupança
dataAniversário
* *
Classe Abstrata
possui
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 58
16/03/2012
30
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 59
Evolução Facilitada
� Restrições
◦ São regras especificadas com lógica ou com 
linguagem específica (*) para impedir / condicionar 
a criação de objetos e associações
◦ Úteis para especificar regras de negócios no 
diagrama
◦ (*) Object Constrain Language - OCL
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 60
16/03/2012
31
� Restrições – Exemplo {ou}
◦ Restrição {ou} implica na seleção exclusiva entre 
duas ou mais associações existentes em uma classe
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 61
Conta
corrente
Indivíduo
Organização
0..*
0..*
0..1
0..1
{ou}
cliente
cliente
� Restrições
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 62
Conta
corrente
Cliente
Organização
0..*
0..1
cliente
Indivíduo
Conta
corrente
Indivíduo
Organização
0..*
0..*
0..1
0..1
{ou}
cliente
cliente
Obs: são equivalentes Notar classe
abstrata
16/03/2012
32
� Restrições
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 63
Contrato de
Seguro
Indivíduo
Empresa
0..*
0..*
1..*
1..*
{ou}
Contrato
Cliente
Organização
0..*
1..*
IndivíduoOBS: Não são equivalentes!
Por que?
� Restrições
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 64
Significado: seja uma pessoa (empregado), seu empregador é 
mesmo do seu chefe
16/03/2012
33
� Restrições
◦ Restrição {subconjunto} ou {subset}
� Estabelece relação de subconjunto entre duas 
associações
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 65
Pessoa Comitê
Membro-de
Presidente-de{subconjunto}
0..*
0..*
0..*
� Restrições: exemplos diversos
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 66
EmpregadoEmpregadoEmpregadoEmpregado
salário chefe
{Empregado.salário < Empregado.chefe.salário}
1..*
1
Janela TelaVisível em
{ordenado}
*
16/03/2012
34
� Restrições: exemplos diversos
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 67
PessoaPessoaPessoaPessoa
Nome
Endereço: {
Logradouro;
Bairro;
Cidade. }
Sexo
marido
esposa
0..1
0..1 casamento
Data
Regime
{pessoa.sexo=Feminino}
{pessoa.sexo=Masculino}
Restrições: exemplos diversos
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 68
16/03/2012
35
� Restrições
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 69
Conta BancáriaConta BancáriaConta BancáriaConta Bancária
número
saldo
dataAbertura
criar()
bloquear()
desbloquear()
creditar()
debitar()
PessoaPessoaPessoaPessoa
nome: Str
endereço: {
logradouro: Str,
bairro: Str,
cidade: Str. }
telefones: Array of Int
1..**
correntista
titular
{subconjunto}
*
� Transmutação ou Metamorfose de Objetos
◦ Monitor, Professor, Aluno: herança
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 70
Pessoa
AlunoProfessor
Monitor
16/03/2012
36
� Transmutação ou Metamorfose de Objetos
◦ Monitor, Professor, Aluno: herança
� Problemas
� Acomodação pouco eficiente de objetos que mudam de 
classes
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 71
Pessoa
AlunoProfessor
Monitor
� Transmutação ou Metamorfose de Objetos
◦ Solução Geral: Combinar herança e associação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 72
PapelPessoa
AlunoProfessor Monitor
Pessoa *
nome
cpf
dataNascimento
exerce
matrícula matrícula
1. Início: 01/02
2. Início: 01/11
Fim: 31/12
3. Fim: 31/12
4. Início: 01/01/próximo ano
0. criação
dataInicio
dataFim
16/03/2012
37
� Erros Comuns
◦ Usar classes ou associações para representar 
consultas ou operações do sistema que não devem 
ser registradas
� Exemplo 1
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 73
Usuário Acervo
consulta
� Erros Comuns
◦ Usar classes ou associações para representar 
consultas ou operações do sistema que não devem 
ser registradas
◦ Exemplo 2
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 74
Usuário Consulta
faz *
16/03/2012
38
� Erros Comuns
◦ Inserir atributos quando o ideal é criar uma 
classe
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 75
Canal
EstiloMusical
Refere-se a
*
� Erros Comuns
◦ Usar herança quando a quantidade de tipos é 
grande ou dinâmica
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 76
EstiloMusical
Pagode Rock Axé
EstiloMusical
Nome: string
16/03/2012
39
� Erros Comuns
◦ Inserir chaves-estrangeiras no diagrama de classes
� As associações são suficientes
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 77
Funcionário
codFunc
codDepto
Depto
codDepto
...
trabalha
*
Chave primária? Usar OID!
Chave estrangeira? Redundante!
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 78
16/03/2012
40
� Descrição:
◦ Representa os sub-sistemas englobados no 
Sistema. 
◦ Possui pacotes e as dependências entre pacotes
◦ Pode ser representado associado com outros 
diagramas
� Objetivo: agrupar classes em pacotes
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 80
Pacote 
Dependência
Pacote 
Dependência
http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/uml/diagramas/pacotes/diag_pacotes.htm
16/03/2012
41
16/03/2012
42
� Descrição:
◦ Descrevem os componentes do Sistema
� Como os componentes são estruturados
� Como os componentes interagem
◦ Representa os Componentes, Interfaces, Portas de 
Comunicação de um ou vários Sistemas
16/03/2012
43
16/03/2012
44
� Descrição:
◦ Determina as necessidades de hardware do Sistema 
� servidores, topologias, protocolos de comunicação
◦ Pode ser representado em conjunto com o 
diagrama de Componentes 
◦ Nós, Topologia, Forma de comunicação
16/03/2012
45
16/03/2012
46
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 92
16/03/2012
47
� Vários diagramas da UML podem ser usados 
para expressar os aspectos temporais
◦ Diagrama de Atividades
◦ Diagrama de Transição de Estados
◦ Diagramas de Interação
� Diagrama de Seqüência
� Diagrama de Colaboração
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 93
� Aspectos principais tratados pelos Diagramas 
Temporais: Funções e Eventos
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 94
DadosDadosDadosDados
FunçõesFunçõesFunçõesFunções
EventosEventosEventosEventos
Sistema
16/03/2012
48
� Objetivos da Modelagem Temporal
◦ Descrever detalhadamente as funções a serem 
desempenhadas em um sistema OO
� Fluxo de mensagens entre objetos
� Métodos necessários para cada classe
� Métodos de classe
� Métodos de objetos
◦ “O que o sistema deve realizar?”
◦ “Quando cada função será realizada?”
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 95
� Modelagem Funcional e Temporal
◦ Definição de Métodos
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 96
PedidoPedidoPedidoPedido
Data recebimento
é_préPago
Número
Preço
?Serviços fornecidos pelaclasse para outros objetos
16/03/2012
49
� Modelagem Funcional e Temporal
◦ Tipos de métodos
� Serviços algoritmicamente simples (90%)
� Criar
� Conectar
� Acessar
� Liberar
� Serviços algoritmicamente complexos
� Calcular
� Calcula um resultado a partir dos valores de atributos do 
objeto
� Monitorar
� Monitora um sistema ou dispositivo externo
� Lida com E/S externas ao sistema
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 97
Diagrama de Transição de Estados
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 98
16/03/2012
50
� Histórico
◦ Notação proposta por David Harel-1987
◦ Máquina com número finito de estados
◦ A máquina pode receber eventos, e cada evento 
pode gerar uma transição de estado
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009 99
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
0
Agencia
numero
nome
ContaBancaria
numero
saldo
limite
0..*
Correntista
nome
cpf
0..*
0..*
0..*
0..*
0..*
DTE será construído
16/03/2012
51
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
1
Disponível
Devedora
contaCriada( data ) / 
dataAbertura := data;
realizarSaque(quantia) / sacar(quantia)
realizarDepósito( quantia ) / depositar(quantia)
realizarDepósito( quantia ) / depositar(quantia)
realizarSaque( quantia )[ quantia <= saldo + limite ] / sacar(quantia)
contaFechada( data )[ saldo == 0 ] / 
dataEncerramento := data
realizarSaque( quantia )[ limite + saldo >= quantia 
AND quantia > saldo ] / sacar(quantia)
after( 30 dias ) / aplicarJuros
when( saldo > 0 )
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
2
Class ContaBancaria {
float saldo;
int numero;
Date dataCriacao;
Date dataEncerramento;
int situacao;
ContaBancaria(data) {
dataAbertura = data;
}
void realizarSaque(quantia) {
if (situacao == DISPONIVEL) AND
(quantia > saldo) AND
(quantia <= saldo + limite)
sacar(quantia)
if (situacao == BLOQUEADA)
(quantia <= saldo + limite)
sacar(quantia)
16/03/2012
52
� Estado◦ Situação na vida de um objeto
◦ Estado é determinado pelo conjunto de valores 
armazenados em um objeto
◦ Estados Especiais
� Inicial: somente um em um DTE
� Final
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
3
disponível
Conta criada
� Transições
◦ Um estado é associado a outro (ou a si mesmo) 
pelas transições
◦ Formato:
� evento(lista-parâmetros) [guarda] / ação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
4
disponível
Realizar depósito(quantia)
/ depositar(quantia)
16/03/2012
53
� Eventos
◦ Uma transição é associada a um evento
◦ Evento: “algo que acontece em algum ponto no 
tempo e que pode modificar o estado de um 
objeto” [Bezerra, 2002]
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
5
Eventos em Software Eventos do Domínio do 
Problema
Mouse pressionado Pedido realizado
Impressora sem papel Fatura paga
Cheque devolvido
� Eventos: tipos
◦ Evento de chamada: recebimento de uma 
mensagem de outro objeto (síncrono)
◦ Evento de sinal: recebimento de um sinal 
(assíncrono)
◦ Evento temporal: passagem de intervalo de 
tempo pré-definido (cláusula after)
� Exemplo: after(30 segundos)
◦ Evento de alteração/tempo: condição que se 
torna verdadeira (cláusula when)
� Exemplos:
� when(saldo > 0)
� when (horário = 00:00 h)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
6
16/03/2012
54
� Guardas
◦ Condição lógica que precisa ser satisfeita para 
habilitar a transição
◦ Diferença entre guardas e evento de mudança
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
7
a b
Evento [quantia=saldo]
a b
when(quantia=saldo)
Se ocorre evento e
quantia = saldo
a transição é disparada
Quando quantia = saldo
a transição é disparada
� Ações
◦ “Ao transitar de um estado para outro, um objeto 
pode realizar uma ou mais ações”
◦ Representação:
� /ação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
8
16/03/2012
55
� Exemplo: Ponto de Junção
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
10
9
E0
E1
E2
E3
E4
E5
evento1 [guarda1]/ação1
evento0 [guarda0]/ação0
evento2 [guarda2]/ação2
[else]/ação5
� Exemplo: Despertador
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
0
Desarmado Esperando Tocando
16/03/2012
56
� Exemplo: Despertador
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
1
desarmado
esperando
entry / n := n + 1
tocando alarme
entry / tocarAlarme(10)
Desarmar alarme
Desarmar alarme
when(n > 3)
Armar alarme(horario)
/ horarioDefinido := horario,
n := 0
when(horarioDefinido = agora())
/ horarioDefinido :=
horarioDefinido + 5 minutos
Ação ocorre quando a
ação entry de
tocandoAlarme é
encerrada
Despertador
n
horarioDefinido
� Estados e Sub-estados
◦ Um estado pode ser decomposto em sub-estados
◦ Cada estado composto deve possuir os estados 
inicial e final
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
2
16/03/2012
57
� Estados e Sub-estados
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
3
� Exemplo com Biblioteca
◦ Observar que a prática de cenários com DTE leva à 
descoberta de novas classes e atributos
◦ Observar que agregar os estados “Emprestado” e 
“Emprestado/Reservado” em um estado maior foi 
útil apenas para o evento de extravio
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
4
16/03/2012
58
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
5
Classe para DTE ser construído
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
6
Disponível
Extraviado
Danificado
Conserto
Descartado
Devolvido e 
Reservado
when( 
expiração_reserva )
NewState
Emprestado e 
Reservado
EmprestadoEmprestado e 
Reservado
devolução( data ) 
/ devolver(data)
Emprestado
devolução( data ) / devolver(data)
reservaEfetuada
retirada( 
data ) / 
retirar(data)
extravio( data ) / 
registrarExtravio(
data)
conserto( data ) / 
registrarEnvioConserto(data)
recuperado( data )
reversão[ adm ]
<<exceçao>>
after( 1 ano )
encontrado( data ) / 
tornarDisponível(data)
retirada( data ) / retirar(data)
danificado( data ) / registrarDefeito(data)
extravio( data ) / registrarExtravio(data)
16/03/2012
59
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
7
Elementos destacadosElementos destacadosElementos destacadosElementos destacados: incorporados ao modelo a partir da prática com DTE
� Exemplo de controle de Turmas em um 
sistema de gestão acadêmica
◦ Exemplo mostra como lidar com prazos fixos que o 
sistema deve controlar automaticamente
◦ Além disso, a modelagem considera que há 
situações de exceção – permissões que devem ser 
liberadas para usuários com privilégios
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
8
16/03/2012
60
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
11
9
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
0
Cancelada Turma 
Concluída
Turma Criada
Inscrições 
encerradas
Ajustes 
encerrados
Aberta para 
i nclusões
when( situação excepcional )
Inscrições 
encerradas cancelamento( aluno ) / número_alunos--
inclusão( aluno )[ administrador ] / inscrever(aluno, hoje); número_alunos++
<<exceção>>
Ajustes 
encerrados
when( hoje > data_limite_exclusões )
inclusão( aluno )[ administrador ] / 
inscrever(aluno, hoje); número_al unos++
<<exceção>>
cancelamento( aluno )[ administrador ] / 
número_alunos--
<<exceção>>
Aberta para 
i nclusões
when( hoj e > data _li mi te_i nclusões )
inscrição( aluno )[ número_alunos <= l im ite_turma ] / inscreve r(aluno, hoj e); núm ero_al unos++
cancelam ento( aluno ) / número_alunos--
[ disciplina 
está ati va ]
when( concei toFi nal é l ançado )
16/03/2012
61
� O exemplo a seguir mostra a gestão de 
consultório médico
◦ O DTE construído – para a classe Procedimento –
lida simultaneamente com várias situações 
(agendamento e pagamento). 
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
1
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
2
16/03/2012
62
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
3
Planejado
Cancelado
transferência( novaData, novaHora ) / 
data := novaData; hora := novaHora
Pago
Realizado
Realizado com 
pagamento pendente
Realizado com 
pagamento antecipado
Realizado com 
pagamento pendente
pagamentoEfetuado Realizado com 
pagamento antecipado
solicitaçãoPaciente / criarCancelamento(dataHoraAtual, 
motivo=paciente)
solicitaçãoMédico / criarCancelamento(dataHoraAtual, 
motivo=médico)
autorização( dataHoraAutorização, códigoAutorização, convênio )[ tipo == convênio 
] / criarAutorização(dataHoraAutorização, códigoAutorização, convênio)
pagamentoEfetuado[ tipo == particular ]
� Histórico
◦ Mecanismo de ativação de subestados
◦ Se a entrada em um estado for por história 
simples (H), o subestado mais recentemente 
visitado é escolhido, em detrimento do estado 
default.
◦ Se for história do tipo H* então considera-se 
como candidato a ser ativado o subestado mais 
recentemente visitado independente do nível 
hierárquico em que se encontra
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
4
16/03/2012
63
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
5
funcionabilidade
enchimento
parada
lavagem
...
H pausatampafechada
tampa levantada
Page-Jones, M. Fundamentos do Desenho
Orientado a Objeto com UML. Makron Books, 2001.
Nodo (H) registra o histórico
do último estado
Estado Aninhado
� Estado de Histórico
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
6
Command Collecting
Copying
CleaningUp
BackingUp
H
End-of-backup
pause
16/03/2012
64
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
7
Exercício 5Exercício 5Exercício 5Exercício 5
Considerando o diagrama de estados abaixo e a seqüência de eventos listada abaixo,
marque a alternativa correta:
estA
estC
estD
est2
H
estB
ev1
new ev2
ev3
ev5
ev0
ev4
Eventos: new, ev1, ev0, ev2, ev3, ev5, ev0, ev2
a) Após a ocorrência de eventos listada o objeto encontra-se no estado estA
b) Após a ocorrência de eventos listada o objeto encontra-se no estado estC
c) Após a ocorrência de eventos listada o objeto encontra-se no estado estB
d) Após a ocorrência de eventos listada o objeto encontra-se no estado estD
e) Após a ocorrência de eventos listada o objeto encontra-se no estado inicial
� Estados concorrentes
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
8
Ociosa
Manutenção
Testando
dispositivos
Auto
Diagnóstico
Esperando Processando
Comando
Testando
Comandando
Iniciar manutenção
16/03/2012
65
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
12
9
inscrito
Matriculado
cursando 
disc iplinas
realizando 
TCC
H
Não 
selecionado
cursando 
disc iplinas
Aguardando 
diploma
Desligado
when( falecimento, desistência, mudança, etc, etc )
realizando 
TCC
Selecionado
não selecionado
selecionado
when( disciplinas concluídas ) when(TCC entregue)[ 
tcc.conceito >= REG ]
when( matriculaEfetuada )
when( prazo matriculado superado )
H
Trancadoretomada
Diplomado
trancamento solicitado( data )
when( diploma entregue )
Classe Aluno ou MatrículaClasse Aluno ou MatrículaClasse Aluno ou MatrículaClasse Aluno ou Matrícula
Notação usada por diversas
Ferramentas para
indicar concorrência
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
0
DTE para
PacMan
16/03/2012
66
� Engenharia de Produção com DTE (1)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
1
Waiting
GettingToken
GettingBody
put(c) [c==‘<‘]
put(c) [c==‘>‘]
put(c) [c==‘;‘] / return true
put(c) [c/=‘<‘] / return false
put(c) [c/=‘>‘] / return false
put(c) [c/=‘;‘]
/ body.append(c); return false
Processamento de XML
� Engenharia de Produção com DTE (2)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
2
class MessageParser {
Public boolean put(char c) {
switch(state) {
case Waiting:
if (c == ‘<‘) {
state = GettingToken;
token = new StringBuffer();
body = new StringBuffer();
}
break;
case GettingToken:
if (c == ‘>’) state = GettingBody
else token.append(c);
break;
case GettingBody:
if (c == ‘;’) {
state = Waiting;
return true; }
else body.append(c);
}
return false;
...
16/03/2012
67
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
3
Agencia
numero
nome
estado : ativa, inativa
Pessoa
ContaBancaria
numero
saldo
estado
limite
dataCriação
dataEncerramento
depositar()
sacar()
aplicarJuros()
0..*0..*
0..*
+titular
0..*
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
4
Agencia
numero
nome
estado : ativa, inativa
Class AgenciaClass AgenciaClass AgenciaClass Agencia {
...
final int ativa = 10;
final int inativa = 20;
desativar(data) {
if (estado == ativa) {
if (não existam contas vinculadas à agência
{
estado == inativa;
dataEncerramento = data;
}
}
Ativa
Inativa
desativarAgência( data )[ não existam contas 
vinculadas à agência ]
Novos atributos:
dataCriação,
dataEncerramento
16/03/2012
68
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
5
ContaBancaria
numero
saldo
estado
limite
dataCriação
dataEncerramento
Disponivel
Bloqueada
realizarDeposito( quantia, data ) / depositar(data, quantia)
realizarSaque( data, quantia ) / 
sacar(quantia)
usando limite de 
crédito
when( saldo >= 0 )
realizar deposito( quantia, data ) / depositar(quantia, data)
realizarSaque( data, quantia )[ quantia <= saldo 
+ limite ] / sacar(quantia)
after( 12 dias ) / aplicarJuros()when( autorizacao gerente )
criar( data, pessoa, agência ) / dataCriação := data; titular := pessoa; this.agência := agência
solicitaçãoEncerramento( data )[ saldo == 0 ] / 
dataEncerramento := data
when( cheque sem fundos pela 2a vez )
realizarSaque( data, quantia )[ quantia > saldo 
AND saldo+limite >= quantia ] / sacar(quantia)
Processo e Heurísticas para Construção de 
diagramas de transições de estados
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
6
16/03/2012
69
� Quantidade de Estados
◦ Em sistemas bastante simples, a definição dos 
estados de todos os objetos não é tão trabalhosa.
◦ No entanto, o crescimento dos estados de um 
sistema cresce exponencialmente com o número de 
objetos
◦ Torna impraticável a construção de um único 
diagrama para todo o sistema 
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
7
� Um DTE por classe
◦ Para resolver o problema da explosão exponencial 
de estados, os diagramas de estados são 
desenhados por classe.
� Desvantagem: dificuldade na visualização do estado do 
sistema como um todo.
� Essa desvantagem é parcialmente compensada pelos 
diagramas de interação.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
8
16/03/2012
70
� Identificação de Transições
◦ Nem todas as classes de um sistema precisam de 
um DTE.
� Somente classes que exibem um comportamento 
dinâmico relevante.
� Objetos cujo histórico precisa ser rastreado pelo 
sistema são típicos para se construir um diagrama de 
estados. 
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
13
9
� Processo de construção de DTEs (1)
◦ Identifique os estados relevantes para a classe.
◦ Identifique os eventos relevantes. Para cada 
evento, identifique qual a transição que ele 
ocasiona.
◦ Para cada estado: identifique as transições 
possíveis quando um evento ocorre.
◦ Para cada estado, identifique os eventos 
internos e ações correspondentes.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
0
16/03/2012
71
� Processo de construção de DTEs (2)
◦ Para cada transição, verifique se há fatores que 
influenciam no seu disparo. (definição de 
condições de guarda e ações).
◦ Para cada condição de guarda e para cada ação, 
identifique os atributos e ligações que estão 
envolvidos.
◦ Defina o estado inicial e os eventuais estados 
finais.
◦ Desenhe o DTE.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
1
� Informações para o modelo de classes
◦ A construção de um DTE freqüentemente leva à 
descoberta de novos atributos para uma classe
� principalmente atributos para servirem de abstrações 
para estados.
◦ Além disso, este processo de construção permite 
identificar novas operações na classe
� pois os objetos precisam reagir aos eventos que eles 
recebem.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
2
16/03/2012
72
� Uso do DTE no processo de desenvolvimento
◦ Os diagramas de estados podem ser construídos 
com base nos diagramas de interação e nos 
diagramas de classes. 
◦ Durante a construção do diagrama de estados para 
uma classe, novos atributos e novas operações 
podem surgir.Essas novas propriedades devem ser 
adicionadas ao modelo de classes.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
3
� Uso do DTE no processo de 
desenvolvimento (continuação)
◦ O comportamento de um objeto varia em função 
do estado no qual ele se encontra. 
◦ Pode ser necessária a atualização de uma ou mais 
operações de uma classe para refletir o 
comportamento do objetos em cada estado.
◦ Por exemplo, o comportamento da operação 
sacar()sacar()sacar()sacar() da classe ContaBancáriaContaBancáriaContaBancáriaContaBancária varia em função 
do estado no qual esta classe se encontra 
� saques não podem ser realizados em uma conta que 
esteja no estado bloqueadabloqueadabloqueadabloqueada.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
4
16/03/2012
73
� Quais são as classes candidatas a possuírem 
DTE?
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
5
Ativo,
Inativo,
Aposentado
Ativo,
Inativo,
Matriculado,
Não matriculado,
Concluinte,
Concluído,
Etc.
Ativo,
Inativo
Atual,
Passada,
Aberta (p/ inclusão)
Fechada
Etc
*
� Observação importante
◦ Muitas vezes as regras do negócio precisam ser 
flexibilizadas no sistema implementado
◦ Tipicamente necessário em decorrência de erros no 
preenchimento de dados ou ainda em função de 
decisão administrativa de alto nível
◦ Prever as situações e criar transições com 
estereótipo <<exception>>
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
6
16/03/2012
74
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
7
� Exercício 
◦ Escolha uma classe do sistema escolhido e faça um 
diagrama de estado
Imifarma S.A. - Programação 
Orientada a Objetos
14
8
16/03/2012
75
Diagrama de Atividades
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
14
9
� “Tipo especial de diagrama de estados, onde 
são representados os estados de uma estados de uma estados de uma estados de uma 
atividadeatividadeatividadeatividade, ao invés dos estados de um estados de um estados de um estados de um 
objetoobjetoobjetoobjeto.”
� Estados de Atividade:
◦ Exemplo 1: passos de um algoritmo
◦ Exemplo 2: etapas de um workflow
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
0
16/03/2012
76
� Um diagrama de atividade exibe os passos de 
uma computação. 
◦ Cada estado é um passo da computação, onde o 
sistema está realizando algo. 
◦ É orientado a fluxos de controle (ao contrário dos 
DTEs que são orientados a eventos).
� Fluxogramas estendidos...
◦ Além de possuir toda a semântica existente em um 
fluxograma, permite representar ações concorrentes e 
sua sincronização.
� Elementos podem ser divididos em dois 
grupos: controle seqüencial e controle paralelo.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
1
� Notação básica
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
2
16/03/2012
77
� Concorrência/Paralelismo
◦ Fluxos de controle paralelos: dois ou mais fluxos 
sendo executados simultaneamente.
◦ Uma barra de bifurcaçãobarra de bifurcaçãobarra de bifurcaçãobarra de bifurcação recebe uma transição de 
entrada, e cria dois ou mais fluxos de controle 
paralelos.
� cada fluxo é executado independentemente e em paralelo com 
os demais.
◦ Uma barra de junçãobarra de junçãobarra de junçãobarra de junção recebe duas ou mais transições 
de entrada e une os fluxos de controle em um único 
fluxo.
� Objetivo: sincronizar fluxos paralelos.
� A transição de saída da barra de junção somente é disparada 
quando todas as transições de entrada tiverem sido disparadas.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
3
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
4
Selecionar local
Contratar arquiteto
Desenvolver plano
Orçar plano
[rejeitado]
[aceito]
Fazer trabalho no
local
Fazer trabalho em
outros setores()
Concluir construção
:CertificadoDeHabitação
[concluído]
Estado inicial
Estado de ação
Concorrência
(bifurcação)
Estado da atividade
com
submáquina
Fluxo de
Objetos
Objeto
Estado
Fluxo: Construção de uma Casa
D
ia
g
ra
m
a
 d
e
 A
ti
vi
d
a
d
e
s
16/03/2012
78
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
5
� Diagrama de Atividades: SwimlanesSwimlanesSwimlanesSwimlanes
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
6
16/03/2012
79
� Geração de código: exemplo (1)
◦ Classe Linha: método interseção
� Um parâmetro de entrada (l: Linha) e um de retorno
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
7
� Geração de código: exemplo (2)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
8
Point Line:: intersection (l: Line) {Point Line:: intersection (l: Line) {
if (slope == l.slope) return Point(0,0)if (slope == l.slope) return Point(0,0)
else {else {
int x = (l.delta int x = (l.delta -- delta) / (slope delta) / (slope -- l.slope);l.slope);
int y = (slope * x) + delta;int y = (slope * x) + delta;
return Point(x,y);return Point(x,y);
}}
}}
16/03/2012
80
� Diagrama de Atividades: Uso
◦ O diagrama de atividades é pouco utilizado na 
prática para modelagem de aspectos temporais de 
software
◦ É fortemente utilizado na modelagem de fluxos de 
trabalho de processos negócio
� A própria descrição do Processo Unificado é 
fortemente baseada em diagramas de atividades
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
15
9
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
0
16/03/2012
81
-Diagramas de Interação:
-Diagrama de Seqüência
-Diagrama de Colaboração ou Comunicação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
1
� Diagramas de Interação
◦ Interações entre objetos
� Sequência de trocas de mensagem entre um conjunto 
de objetos para realizar um caso de uso.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
2
Ator Ator
Caso de Uso
Objeto Objeto
Evento
de
entrada
(estímulo)
Mensagem Evento
de
saída
(resposta)
Tempo
16/03/2012
82
� Diagrama de Interação
◦ Identifica os estados de um objeto em um caso de 
uso específico
◦ Aspectos temporais
� Decisões
� Ordem dos eventos
◦ Dois tipos
� Diagrama de Sequência
� Diagrama de Colaboração
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
3
� Descrição
◦ Provê ordem temporal
◦ Mensagens são trocadas entre objetos e classes
◦ Baseia-se em um caso de uso
◦ Apóia-se no diagrama de Classes para determinar 
classes envolvidos
◦ Identifica o ator e o evento gerador da 
funcionalidade
◦ Descreve como uma funcionalidade deve acontecer
16/03/2012
83
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
5
� Características
◦ Há preocupação com ordem das ações
◦ Na Análise, erros e situações de tratamento de 
exceção nãonãonãonão são considerados
◦ Geralmente envolve a interação do sistema com 
os usários
◦ Cada mensagem é rotulada com
� nome
� argumentos
� informações de controle
� Condições de guarda
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
6
16/03/2012
84
� Características
◦ Principal objetivo: identificar quais mensagens 
devem ser implementadas pelas classes
� Classe/Objeto Emissor da mensagem é um Cliente
� Classe/Objeto Receptor da mensagem é um Servidor
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
7
Emissor Receptor
mensagem(parâmetros)
Mensagem deve ser implementado na
Classedo objeto receptor!
� Tipos de Interações:
• síncronasíncronasíncronasíncrona - o emissor fica parado à espera de resposta
• retornoretornoretornoretorno de mensagem síncrona
• assíncronaassíncronaassíncronaassíncrona - o emissor não fica parado à espera de 
resposta
• SimplesSimplesSimplesSimples - não se decide se é síncrona, de retorno ou 
assíncrona
16/03/2012
85
� Características
◦ Tipos de Interação
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
16
9
Simples
Síncrona
Assíncrona
Retorno
Somente fazem sentido
se a linguagem de
programação permitir
esta alternativas
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
0
+ocorrência
Equipe
nome
Campo
dimensoes
nome
Arbitro
nome
Jogo
hora-inicio
hora-fim
data 2*
+participante
2*
0..n
+local
0..n
realizado em
0..*
+principal
0..*
mediado por
2
0..n
+auxiliar2
0..n
Posição
nome
Gol
instante
Cartão
instante
tipo : verm, amarelo
Escalação
Jogador
nome
0..*0..*
marcado por0..*0..*
11
0..*
+t itular11
0..*
5
0..*
+reserva
5
0..*
Súmula
0..*0..*
0..*+ocorrência 0..*
possui
Subst ituição
instante
0..*
+substituído
0..*
0..*
+substituto
0..*0..6+ocorrência0..6
16/03/2012
86
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
1
 : Juiz : Juiz
Controlador
Gol
Controlador
Gol
s : Súmulas : Súmula e : Equipee : Equipe
 : Gol : Gol
1: registrarGol(s)
7: criarGol(instante, jogador-selecionado, s)
8: <<construtor>> (instante, jogador-selecionado, s)
2: obterEquipe()
3: e
4: obterJogadores()
5: jogadores
6: jogadores
Componente de Implementação (IU)
s: súmula foi recuperado
em outro CDU
A seleção do jogador é
implícita (pois não envolve
troca de mensagens)
1: obterJogadores(s, e)
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
2
 : Federação : Federação
jogador : 
Jogador
jogador : 
Jogador
1: obterGolsMarcadosJogador(jogador)
2: obterGols()
3: númeroGolsMarcados
G o l
in s t a n t e
Jo g a d o r
n o m e
0 . . *
Obtém todos os gols marcados por um jogador na sua vida,
independente da equipe onde atuou.
16/03/2012
87
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
3
Equipe
nome
Jogo
hora-inicio
hora-fim
data 2*
Súmula
Gol
instante
Jogador
nome
0..*
0..*
Objetivo:
Obter o maior artilheiro de
toda história registrada no
sistema de uma equipe eeee.
Classes envolvidas
Resumo:
-A partir do objeto e de Equipe são localizadas
as instâncias de Súmula, as quais são consultadas para
obter os gols e respectivos autores (Jogador).
-O processo de totalização de quantos gols cada
Jogador marcou não aparece no diagrama em virtude
de não envolver troca de msgs.
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
4
 : Federação : Federação
ControladorIUControladorIU e : Equipee : Equipe : Súmula : Súmula : Gol : Gol
Repetir para cada objeto de súmulas
Repetir para cada objeto de gols
1: 
2: obterSúmulas
3: súmulas
4: obterGols()
5: gols
6: obterJogador()
7: jogador
8: maiorArtilheiro: Jogador
16/03/2012
88
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
5
 : Juiz : Juiz
ControladorGolControladorGol : Jogo : Jogo : Equipe : Equipe
 : Gol : Gol
1: registrarGol()
2: recuperarJogos()
3: jogos
4: jogos
5: obterEquipes(jogo)
6: obterEquipes(jogo)
7: equipes
8: equipes
9: obterJogadores(equipe, jogo)
10: obterJogadores(equipe, jogo)
11: jogadores
12: jogadores
13: registrar(instante, jogo, equipe, jogador)
14: <<construtor>> (instante, jogo, equipe, jogador)
15: gol Cadastrado
16: gol Cadastrado
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
6
 : Federação : Federação
Controlador : 
ControladorUI
Controlador : 
ControladorUI
 : Jogo : Jogo
objetivo: sendo fornecidos um objeto de arbitro e outro de equipe, 
localizar os jogos onde a equipe foi vencedora.
1: obterVitoriasArbitroEquipe(umArbitro, umaEquipe)
2: obterJogosArbitro(umArbitro)
3: jogosÁrbitro
4: obterJogosEquipe(umaEquipe)
5: jogosEquipe
6: obterEquipeVencedora()
7: equipeVencedora
8: [umaEquipe == equipeVencedora] acrescentarJogo()
repetir para todos os jogos resultantes da interseção de jogosÁrbitro com 
jogosEquipe
9: jogosVitoriasArbitroEquiipe
16/03/2012
89
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
7
Voz
numChamado
duracao
TransmissaoDados
bytesTransferidos
Cliente
nome
Conta
numTelefone
1..*1..*
possui
PagamentoFatura
data
Consumo
data-inicio
valor
hora-inicio
FaturaMensal
dataVenc
valor
0..*0..*
0..10..1
possui
0..*0..*
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
8
 : Funcionário : Funcionário
Controlador : 
controller
Controlador : 
controller
 : FaturaMensal : FaturaMensal
1: obterMaioresConsumoDados(mes)
2: obterFaturasMes(mes)
3: faturas
4: obterConsumoTransmissaoDados
5: consumoDados
repetir para todas as instâncias de faturas
8: clientes
clientes é um conjunto de objetos 
de cliente que fizeram uso de 
transmissão de dados no mês 
indicado, ordenado de forma 
decrescente
6: obterCliente()
7: cliente
16/03/2012
90
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
17
9
Atendente
name
(from Use Case View)...)
Gerente
(from Use Case View)...)
Funcionario
nome
senha
Telefone
numero
codigo_area
Cliente
nome
sexo
email
dataCadastro
tipo : normal/especial
(from Use Case View)...)
0..*0..*
cadastrado por
0..* 10..* 1
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
18
0
Serviço
Computador
numero
estado : ocupado/disponivel
estado2 : funcionando/defeito
Loja
numero
endereco
0..*0..*
AcessoComputador
Impressão
tipo
Produto
Validade
dias_semana
horario_inicio
horario_fim
Item
nome
preço
Promoção
codigo
desconto
estado : hab/desab
paraClienteVIP : boolean
0..*
0..*
0..*
0..*
Promoção com 
paraClienteVIP valendo 
true, ela é vál ida para 
Clientes com valor de 
tipo = "Especial"
16/03/2012
91
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
18
1
quantidade
quantidade
VendaAvulsa
data
Item
nome
preço
1..*
0.. *
1..*
0.. *
consome
Cliente
nome
sexo
email
dataCadastro
tipo : normal/especial
(from Use Case View)...)
Conta
valor
Sessão
data
hora_inicio
hora_fim 1..*0..* 1..*0..*
consome
0..*0..*
realiza
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
18
2
 : Atendente : Atendente
Tela de Geração 
de Conta
Tela de Geração 
de Conta
 : Sessão : Sessão : Item : Item
conta : Contaconta : Conta
 : Promoção : Promoção
1: gerarContaSessão(s)
2: obter(s)
3: s
4: obterItensConsumidos
5: obterItens
6: itens
7: itens
10: obterPreço
11: preçoUnitário
12: obterQuantidade(item)
13: quantidade
8: obterNome
9: nome
repetir enquanto houver itens na sessão de consumo
15: criar(s, itens)
16: conta
17: conta
14: 
Obter conta de consumo de itens e serviços
Obs: não considera as promoções
16/03/2012
92
© Carla A. Lima Reis e Rodrigo 
Quites Reis (LABES-UFPA) / 2009
 : Atendente : Atendente
Tela Inserção 
Computador
Tela Inserção 
Computador
 : Loja : Loja
comp : 
Computador
comp : 
Computador
1: inserirComputador(loja)
2: criar(número)
3: comp
4: recuperar(loja)5: loja
8: inserir(comp)
9: computador inserido
10: computador inserido
6: vincularLoja(loja)
7: loja vinculada
� Descrição
◦ Conhecidos como diagrama de Colaboração até a 
UML 1.5
◦ Amplamente associado ao diagrama de Seqüência
◦ Não se preocupa com a temporalidade
◦ Concentra-se em como os objetos ou classes estão 
vinculados
◦ Identifica quais mensagens são trocadas
16/03/2012
93
 : cliente
 : Locadora
 : Carro
a : 
Aluguel
1: solicitaAluguel( )
5: setDataLocacao( )
6: calcularValor( )
2: verificaDisponibilidade( )
3: disponibilidade
4: [disponibilidade == ok] : efetuarAluguel( )
7: a

Continue navegando