aula 06 - diagrama de classes
DESCRIPTION
Diagrama de classesTRANSCRIPT
Diagrama de Classes Aula 06
Prof. Kleinner Farias Programa Interdisciplinar de Pós-Graduação
em Computação Aplicada – PIPCA Universidade do Vale do Rio dos Sinos
6
Objetivos • Compreender os principais conceitos sobre
diagrama de classes da UML • Entender como o diagrama de classes
complementa os outros diagramas da UML • Elaborar diagramas a partir de situações
cotidianas
2 4/7/14 @KleinnerFarias
Agenda • Introdução • Motivação • Elementos do Diagrama de Classes • Exemplo Prático • Referências
3 4/7/14 @KleinnerFarias
Introdução • Representa uma visão estática (ou estrutural)
do projeto de um software • Diagrama mais utilizado da UML • Modela os conceitos de – domínio da aplicação
• descrevendo o próprio domínio do problema
– projeto da aplicação • descrevendo como a implementação deve ser feita
4 4/7/14 @KleinnerFarias
Motivação
5 4/7/14 @KleinnerFarias
Motivação
6 4/7/14 @KleinnerFarias
Motivação
7 4/7/14 @KleinnerFarias
Metamodelo
4/7/14 @KleinnerFarias 8
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
9 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Classe – representa um conceito de OO utilizado para representar as
entidades do domínio do problema e do domínio da solução
– possui três compartimentos: nome, atributos e operações
– Exemplo:
10 4/7/14 @KleinnerFarias
nome
atributos
operações
• Classe – Atributos: representam as características dos
objetos daquela classe – Visibilidade:
+ público: visível em qualquer classe de qualquer pacote # protegido: visível para classes do mesmo pacote - privado: visível somente para classe
– Exemplo: + nome: String
11 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes
Elementos do Diagrama de Classes • Classe – Operações: representam os comportamentos que
os objetos de uma classe podem desempenhar – Visibilidade:
+ público: visível em qualquer classe de qualquer pacote # protegido: visível para classes do mesmo pacote - privado: visível somente para classe
– Exemplo: + getNome(): String
12 4/7/14 @KleinnerFarias
4/7/14 @KleinnerFarias 13
Aluno
nome: Texto matrícula: Inteiro
definirNome(nome) obterNome() definirMatricula(matricula) obterMatricula
Turma
código: Texto sala: Texto horario: Horario
estaAberta() definirProfessor(professor) incluirAluno(aluno)
está-matriculado-em
Professor
nome: Texto titulação: Texto
definirNome(nome) obterNome() definirTitulacao(titulo) obterTitulacao
é-ministrada-por
Elementos do Diagrama de Classes • Exemplo de um diagrama
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
14 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Interface – Elemento que especifica as comportamentos ou
serviços que serão oferecidos por classes ou componentes
15 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
16 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento – representa uma conexão semântica entre elementos
do diagrama de classes
• Tipos de relacionamento: – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
17 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
18 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – representa uma conexão semântica entre classes – representa conexões entre objetos de classes
relacionadas semanticamente – representa um relacionamento estrutural entre
classes – relaciona não só os classificadores, mas também
suas instâncias
19 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – uma instância de uma associação é um link – um link é uma tupla (uma lista ordenada) de
objetos – um link binário representa o relacionamento entre
dois objetos – produz informação sobre quais objetos se
relacionam – quando o sistema estiver em execução, links entre
os objetos serão estabelecidos e destruídos
20 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação
Associations are the “glue” that ties a system together. Without associations, there are nothing
but isolated classes that don’t work together. [Rumbaugh99]
21 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – Notação:
• representada por uma linha só lida conectando duas classes
22 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – Qualified Association
• Se um atributo (ou mais) assume um valor único em uma associação (relacionamento entre objetos), então ele é um qualificador (qualifier)
23 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – Association Class
• uma associação pode ter atributos próprio
24 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – Association Class
25 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – mostra uma associação representando emprego – o relacionamento entre Company e Person é do tipo
many-to-many – um pessoa (Person) pode ter mais que um emprego,
porém um emprego (Job) por Empresa (Company) – salário não é um atributo nem da empresa nem da
pessoa (mas do relacionamento) porque a associação é do tipo many-to-many
– salário surge a partir do ou com o relacionamento
26 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – o relacionamento boss-worker não é apenas o
relacionamento entre duas pessoas – boss-worker é um relacionamento entre uma
pessoa e um emprego e uma outra pessoa e um emprego
– boss-worker representa o relacionamento (Manages) entre uma association class e ela mesmo
27 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação
28 4/7/14 @KleinnerFarias
Association Class vs Reified Association
Elementos do Diagrama de Classes • Relacionamento: Associação – Estoque (Stock) modelado como uma association
class entre Person e Company. – Quantity representa a quantidade em estoque – Por que foi utilizado uma association class?
• Porque deve existe apenas um registro para cada par de Company-Person
29 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação – Por que foi utilizado uma reified association?
• Pode existir múltiplas compras com um mesma Pessoa-Empresa. • Cada compra distinta, sendo caracterizada pela sua data
e custo • Purchase tem seus próprios identificadores
30 4/7/14 @KleinnerFarias
• Os relacionamentos possuem: – Nome: descrição dada ao relacionamento (faz, tem, possui,...) – Sentido de leitura – Navegabilidade: indicada por uma seta no fim do
relacionamento – Multiplicidade: 0..1, 0..*, 1, 1..*, 2, 3..7 – Tipo: associação, agregação, composição, generalização e
dependência – Papéis: desempenhados por classes em um relacionamento
31 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes
Elementos do Diagrama de Classes • Relacionamento: Associação
32 4/7/14 @KleinnerFarias
Pessoa Empresa 1..*
Tipo: associação
multiplicidade
* trabalha para
empregado
papéis
empregador
sentido de leitura
E a navegabilidade?
nome
Elementos do Diagrama de Classes • Relacionamento: Associação – Navegabilidade:
• uma associação navegável representa informação de estado disponível para uma classe • pode se implementada de diferentes formas
33 4/7/14 @KleinnerFarias
Endereço Cliente reside
1 *
navegabilidade
Elementos do Diagrama de Classes • Relacionamento: Associação – Navegabilidade:
• uma associação navegável representa informação de estado disponível para uma classe
34 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Associação • Indicadores de multiplicidade:
– 1 Exatamente um
– 1..* Um ou mais
– 0..* Zero ou mais (muitos)
– * Zero ou mais (muitos)
– 0..1 Zero ou um
– m..n Faixa de valores (por exemplo: 4..7)
35 4/7/14 @KleinnerFarias
Pessoa Empresa 1..*
associação
multiplicidade
* trabalha para
Elementos do Diagrama de Classes • Relacionamento: Associação
• Exemplo: – Um Estudante pode ser
um aluno de uma Disciplina e um jogador da Equipe de Futebol
– Cada Disciplina deve ser cursada por no mínimo 1 aluno
– Um aluno pode cursar de 0 até 8 disciplinas
36 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
37 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Agregação
– É um tipo especial de associação – Utilizada para indicar um relacionamento do tipo “parte-todo”,
porém não tem a responsabilidade de gerenciar as suas partes • Pedido não é responsável por gerenciar Item
38 4/7/14 @KleinnerFarias
Item Pedido 1 1..*
agregação
todo parte
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
39 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Composição
– É uma variante semanticamente mais “forte” da agregação – Representa um relacionamento do tipo parte-todo – O todo é responsável por gerenciar as suas partes – Os objetos "parte” só podem pertencer a um único objeto “todo”
e têm o seu tempo de vida coincidente com o dele – Quando o “todo” morre todas as suas “partes” também morrem
40 4/7/14 @KleinnerFarias
Teclado Notebook
Frame Window
1 1
1 0..*
1..* 0..* errado
Elementos do Diagrama de Classes • Relacionamento: Composição
– Exemplo: • Quando o “todo” morre todas as suas “partes” também morrem
41 4/7/14 @KleinnerFarias
Janela
Scroll Título Corpo
1
0..1 2 1
Empresa
Departamento Escritório
1 1..* 1..*
0..1
*
Elementos do Diagrama de Classes • Relacionamento: Agregação e Composição
– Exemplo:
42 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Composição vs Agregação
43 4/7/14 @KleinnerFarias
Andar Edifício1..n
MesaSala
1..n11
1..n
1..n
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
44 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Dependência – representa que a alteração de um objeto (o objeto
independente) pode afetar outro objeto (o objeto dependente)
– relacionamento semanticamente mais fraco – Exemplo:
• A classe cliente depende de algum serviço da classe fornecedor • A mudança de estado do fornecedor afeta o objeto cliente • A classe cliente não declara nos seus atributos um objeto do tipo
fornecedor • Fornecedor é recebido por parâmetro de método
45 4/7/14 @KleinnerFarias
cliente fornecedor
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
46 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Generalização
– É um relacionamento entre elementos mais genéricos/estáveis (superclasses) e itens mais específicos/concretos (subclasses)
47 4/7/14 @KleinnerFarias
“é um” “é um tipo de”
superclasse
subclasse
Veículo
Terrestre Aéreo
Elementos do Diagrama de Classes • Relacionamento: Generalização
– É um relacionamento entre elementos mais genéricos/estáveis (superclasses) e itens mais específicos/concretos (subclasses)
48 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Classe – Atributos – Operações
• Interface • Relacionamento – Associação
• Agregação • Composição
– Dependência – Generalização – Realização
49 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Realização – conecta uma classe a um interface – um interface especifica quais comportamentos um
classe deve ter/implementar – nenhum comportamento ou estrutura é oferecido
50 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Realização – Exemplo:
51 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Generalização e Realização – generalização e realização relacionam algo mais
genérico com algo mais específico – generalização relaciona dois elementos em um
mesmo nível semântico • Exemplo: mesmo nível de abstração
– generalização relaciona elementos que são usualmente mantidos em um mesmo modelo/módulo
52 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes • Relacionamento: Generalização e Realização – Realização relaciona elementos em diferentes níveis
semânticos, • um classe de análise e uma classe de projeto • Exemplo: uma interface e uma classe que a implementa
53 4/7/14 @KleinnerFarias
Elementos do Diagrama de Classes
54
Relacionamento Breve descrição Notação
associação Uma conexão entre instâncias de classes
agregação Relacionamento do tipo parte-todo
composição Relacionamento do tipo parte-todo mais forte a agregação
dependência Depencência entre dois elementos do modelo
generaliação
Relacionamento de herança de OO Relacionamento entre algo mais genérico (estável) e algo mais específico (menos estável)
realização
Relacionamento entre uma especificação e sua implementação. Ex.: entre uma interface e uma classe que a implementa
Exemplo de Diagrama
55 4/7/14
Exemplo Prático A Universidade XYZ deseja informatizar seu sistema de matrículas: • A universidade oferece vários cursos. • O Coordenador de um curso define as disciplinas que serão oferecidas
pelo seu curso num dado semestre. • Várias disciplinas são oferecidas em um curso.
• Várias turmas podem ser abertas para uma mesma disciplina, porém o número de estudantes inscritos deve ser entre 3 e 10.
• Estudantes selecionam 4 disciplinas. • Quando um estudante matricula-se para um semestre, o Sistema de
Registro Acadêmico (SRA) é notificado.
• Após a matrícula, os estudantes podem, por um certo prazo, utilizar o sistema para adicionar ou remover disciplinas.
• Professores usam o sistema para obter a lista de alunos matriculados em suas disciplinas.
• Todos os usuários do sistema devem ser validados.
4/7/14 @KleinnerFarias 56
Exemplo Prático Descrição do Caso de Uso
4/7/14 @KleinnerFarias 57
Exemplo Prático Descrição do Caso de Uso “Matricular em Disciplina”
• Esse caso de uso se inicia quando o Estudante de Curso inicia uma sessão no sistema e apresenta suas credenciais.
• O sistema verifica se a credencial é válida.
• O sistema solicita que o estudante realize sua matrícula, selecionando 4 disciplinas.
• O estudante preenche um formulário eletrônico de matrícula e o submete para uma análise de consistência.
• O sistema analisa as informações contidas no formulário.
– Se as informações são consistentes, o estudante é incluído em turmas abertas de 4 disciplinas, iniciando pelas preferenciais.
– Se as informações não são consistentes, o sistema informa o motivo da inconsistência e solicita que o formulário seja alterado.
4/7/14 @KleinnerFarias 58
Exemplo Prático • Exemplos de candidatos a relacionamentos:
– A é parte física ou lógica de B. – A está contido fisicamente ou logicamente em B. – A é uma descrição de B. – A é membro de B. – A é subunidade organizacional de B. – A usa ou gerencia B. – A se comunica/interage com B. – A está relacionado com uma transação B. – A é possuído por B. – A é um tipo de B.
4/7/14 @KleinnerFarias 59
Exemplo Prático • Identificando as classes
4/7/14 @KleinnerFarias 60
Professor Coordenador Estudante
Turma Universidade Disciplina
FormularioMatricula
Curso
AnalisadorMatricula
SistemaRegistroAcademico ListaAlunos
Exemplo Prático
4/7/14 @KleinnerFarias 61
O formulário de matrícula é processado por um analisador de matrícula
O analisador de matrícula gerencia a disciplina
FormularioMatricula AnalisadorMatricula é-processado-por
1 0..*
Disciplina
FormularioMatricula AnalisadorMatricula é-processado-por
1 0..* 1
0..*
• Identificando os relacionamentos
Exemplo Prático
4/7/14 @KleinnerFarias 62
Professor
Coordenador
Estudante Turma
Disciplina
FormularioMatricula AnalisadorMatricula
é-preenchido-por
está-matriculado-em
é-processado-por
é-ministrada-por
é-definida-por
aluno
gerencia
1
1
1 0..* 1
0..*
1 1..* 1
1..*
1 0..3 3..10 4
Exemplo Prático • Identificando os atributos: – Examine as descrições dos casos de uso e entenda bem
os conceitos do domínio do problema – Cada turma oferecida possui:
• um código • uma sala • um horário
4/7/14 @KleinnerFarias 63
Turma
código sala horário
Exemplo Prático
4/7/14 @KleinnerFarias 64
Coordenador
FormularioMatricula AnalisadorMatricula
é-preenchido-por
está-matriculado-em
é-processado-por
é-ministrada-por
é-definida-por
aluno
gerencia
1
1
1 0..* 1
0..*
1 1..*
1
1..*
1 0..3 3..10 4
Turma
código sala horário
Professor
nome titulação
Estudante
nome matricula
Disciplina
nome numCréditos
Exemplo Prático • Identificando os métodos – Dica: criar os diagramas de sequência
4/7/14 @KleinnerFarias 65
SIM
submeterFormulario(formulario)
AnalisadorMatricula
adicionar(aluno, disciplina)
: SIM : AnalisadorMatricula
2: adicionar(a,d )
1: submeterFormulario(f)
Exemplo Prático
4/7/14 @KleinnerFarias 66
• E a navegabilidade?
public class Turma {
private String codigo; private String sala; private Estudante alunos[]; ...
}
public class Estudante {
private String nome; private String matricula;
... }
OBS: Turma não aparece como atributo de Estudante!
Turma Estudante 3..10
está-‐matriculado-‐em
3..10 4
Exemplo Prático • Acrescentando generalizações: – Atributos, operações e/ou relacionamentos
comuns podem ser movidos para uma classe mais geral.
4/7/14 @KleinnerFarias 67
Estudantematricula : Inteiro
definirMatricula(matricula)obterMatricula()
Usuarionome : Texto
definirNome(nome)obterNome()
Professortitulacao : Texto
definirTitulacao(titulacao)obterTitulacao()
Exemplo Prático
4/7/14 @KleinnerFarias 68
SIM
Usuarionome : Texto
definirNome(nome)obterNome()
FormularioMatricula
obterEstudante() : EstudanteobterNomeDIsciplina(i : Inteiro) : Texto
Estudantematricula : Inteiro
definirMatricula(matricula)obterMatricula()
1
1
é-preenchido-por
1
1-aluno
Professortitulacao : Texto
definirTitulacao(titulacao)obterTitulacao()
AnalisadorMatricula
adicionar(aluno, disciplina) 1 11 1
usa
10.. * 10.. *
é-processado-por
Disciplinanome : TextonumCreditos : Inteiro
estaCompleta()adicionar(aluno : Estudante)
0..*
1
0..*
1
gerencia
Turmacodigo : Textosala : Textohorario : HorarionumAlunos : Inteirocompleta : Booleano
estaCompleta() : Booleano
3..10
4
3..10
4
está-matriculado-em
0..3 10..3 1
responsável-por
1..*
11
1..*
Próxima Aula • Estimativa de esforço (use case ponits) • Processo de desenvolvimento de software
69 4/7/14 @KleinnerFarias
References [Rumbaugh99] J. Rumbaugh, I. Jacobson, G. Booch, The Unified Modeling Language Reference Manual, Addison-Wesley, 2a edition, 1999.
[LES.14] Material das Apresentações LES/PUC-Rio, http://www.les.inf.puc-rio.br/wiki/index.php/PSS [Larman07] Larman, C.: Utilizando UML e Padrões: uma Introdução à Análise e ao Projeto Orientados a Objetos. Porto Alegre: Bookamn, 2007. 492p.
70 4/7/14 @KleinnerFarias