DIAGRAMA DE
CLASSES
OS ELEMENTOS BÁSICOS PROFESSOR RENATO DE PIERRI
Diagrama de Classes - tópicos
• Propriedades: atributos e associações • Multiplicidade
• Interpretação de propriedades em programas • Associações bidirecionais
• Operações • Generalização • Palavras chaves • Responsabilidades
• Operações e atributos estáticos
• Interfaces e classes abstratas • Read Only e Frozen
• Objetos de referência e de valor • Associações qualificadas
• Classificação e generalização
• Classificação múltipla e dinâmica • Classe de associação
• Classe de template (parametrizada) • Enumerações
Propriedades: atributos e associações
• Mais utilizado é o diagrama de classes
• mostram as
• Propriedades
• Operações
• restrições
Propriedades: atributos e associações
• Propriedades estruturais
• Atributos
• Associações
• Atributos
• É uma linha de texto dentro da classe
visibilidade nome tipo multiplicidade = valor padrão {lista de propriedades} - nome: String [1] = “vira-lata” {readOnly}
Somente “nome” é necessário
“visibilidade” indica se é público (+) ou privado (-).
“nome” Corresponde ao nome de um campo em linguagem de programação. “tipo” Corresponde ao tipo de um campo.
“valor padrão” É o valor padrão do campo quando um novo objeto é criado.
• Associações
• É uma linha cheia entre duas classes da origem para o destino. • Permite mostrar a multiplicidade
• Quando usar, depende do contexto:
• Atributos – coisas pequenas (data, valor, booleanos) • Associações – informações mais significativas
• Multiplicidade indica quantos objetos uma propriedade pode ter, p.ex:
• O campo datadeRecebimento pode ter zero ou uma data de recebimento
• O campo éPré-Pago, booleano só pode ter um valor
• O campo itensdeLinha pode ter nenhuma LinhadePedido e não há limite superior para
o campo LinhadePedido, lembrando que o campo é ordenado (ordered)
• Multiplicidade traz o conceito de limite inferior e superior, p. ex: [0..1], [4..25].
• Se for importante, usar {ordered}, {unordered}, {unique}, {nonunique}, {bag} (coleção)
• Não há uma maneira única de interpretar no código as propriedades do UML. • Uma propriedade do UML é associada a um campo no código (mais comum). • (implementação focada no diagrama)
• Implementação focada na interface
• Se vale dos métodos de leitura
• Propriedades inversamente vinculadas
• Pode usar a seta para indicar a vinculação
• Pode-se utilizar um verbo para indicar a vinculação
• Ações que a classe realiza:
visibilidade nome (lista-de-parâmetros): tipo-de-retorno {lista de
propriedades}
• “visibilidade” é público (+) ou privado (-) – há outros tipos
• “nome” é uma sequência de caracteres
• “lista-de-parâmetros” é uma lista de parâmetros da operação
• “tipo-de-retorno” é o valor retornado se tiver algum
• “lista-de-propriedades” indica os valores que aceitam a operação
• Lista de parâmetros usa notação semelhante:
• direção nome: tipo = valor-por-omissão
• “Nome”, “tipo” e “valor-por-omissão” são iguais aos dos atributos
• “direção” indica se é entrada (in), saída (out) ou ambos (inout).
• +saldoEm (data: Date) : Dinheiro
• Mostrada como texto entre << e >>
• Se você precisa de um modelo não previsto na UML, utilize um simbolo
da UML existente e marque-o com a palavra chave.
• Algumas palavras chaves são abreviadas
• <<interface>> <<I>>
• {abstract} {A}
• Detalhar a função de uma classe
• Utilizar comentários no próprio compartimento da classe.
• Atributos que se aplicam a uma classe
• próximo_pedido
• atendimento_corrente
• Atributo estático é sublinhado.
• Utilizar comentários no próprio compartimento da classe.
• Agregação – “parte de”
• Carece de semântica – evitar usar
• Composição. boa para mostrar
• propriedades que tem valor
• propriedades para objetos de valor
• propriedades que tem forte
participação e ou exclusiva em outros
componentes específicos.
• Calculada a partir de outros valores
• Data de início – Data término – /Duração
• Classe abstrata não pode ser instanciada diretamente • Faz o instanciamento de uma subclasse.
• A classe abstrata contém operações abstratas (sem implementação)
• Classe e ou operações abstratas são exibidas em itálico ou usando o rótulo {abstract}. • A interface corresponde às interfaces do C# e Java – usa <<interface>>
• Uma classe pode fornecer uma interface. Basta implementar um subtipo da interface • Uma classe exige uma interface se precisa que a interface seja instanciada para
funcionar.
Diagrama de Classes – Interfaces e classes abstratas
• Classe abstrata não pode ser instanciada diretamente
• Faz o instanciamento de uma subclasse.
• A classe abstrata contém operações abstratas (sem implementação)
• Classe e ou operações abstratas são exibidas em itálico ou usando o rótulo {abstract}.
• A interface corresponde às interfaces do C# e Java – usa <<interface>>
• Uma classe pode fornecer uma interface. Basta implementar um subtipo da interface
Diagrama de Classes – Interfaces e classes abstratas
Diagrama de Classes – Read Only e Frozen
• ReadOnly – Propriedade que somente pode ser lida e não pode ser atualizada
• Frozen – O valor da propriedade não pode ser alterado durante o tempo de vida de um objeto. Foi retirada na UML 2.0
Diagrama de Classes – Objetos de referência e de valor
• Objetos tem identidade. É verdade mas...
• É mais importante para objetos de referência do que para objetos de valor. • Objeto de referência, Cliente p. ex:
• Identidade é relevante porque há necessidade de identificar o cliente. • Pode haver duplicidade ou não
• Objeto de valor, Data, p.ex:
• Pode ter vários objetos com a mesma data
• Para saber se duas datas são iguais, é mais importante comparar o que elas representam do que o valor em si.
• A data é um objeto e não pode ser compartilhada
Diagrama de Classes – Associações qualificadas
• Equivalente da UML, em programação, a estruturas do tipo chave - valor
• arrays associativos • mapeamentos
• hashing • dicionários
class Pedido...
public LinhadePedido obterItemdeLinha(Produto umProduto); public void adicionarItemdeLinha(Número quantidade, Produto paraProduto);
Diagrama de Classes – Classificação e generalização
• Ao comentar sobre subtipagem, é comum usar o relacionamento “é um”. • Considere:
1. Shep é um Border Collie.
2. Um Border Collie é um Cachorro. 3. Cachorros são Animais.
4. Border Collie é uma Raça. 5. Cachorro é uma Espécie.
• Combine 1 com 2 – Ok • Combine 2 com 3 – Ok
• Combine 1 com 2 com 3 – Temos Shep é um animal – Ok.
Generalização – o tipo Border Collie é um subtipo do tipo Cachorro. Classificação – o objeto Shep é uma instância do tipo Border Collie A generalização é transitiva; a classificação, não.
Posso combinar a classificação seguida de uma generalização, mas não o contrário.
Diagrama de Classes – Classificação múltipla
• Classificação única
• Cada objeto pertence à sua classe
• Classificação múltipla
• Objeto é descrito por vários tipos
• Não é necessariamente conectado por herança • Não é a mesma coisa
que herança múltipla • Precisa especificar quais
Diagrama de Classes – Classificação dinâmica
• Classificação dinâmica
• Conta corrente sem saldo muda seu comportamento
• Várias funções são sobrecritas (“retirar”, “fechar”, “cálculo do saldo” ...)
• Na classificação dinâmica, muda-se a classe dentro da estrutura de
subtipagem
• Classificação estática não admite essa operação.
Diagrama de Classes – Classe de associação
Diagrama de Classes – Classe de template (parametrizada)
• C++ possui classe parametrizada, ou template • Está prevista sua inserção em Java e C#
• Serve para definir comportamento para conjuntos em geral, por exemplo:
class Conjunto <T>{
void insert (T novoElemento); void remove (T umElemento); }
A partir da criação do template, posso criar conjuntos baseado nesse template:
Diagrama de Classes: Enumerações
• Mostra um conjunto fixo de valores
• Não possui nenhum valor além de seu valor simbólico
• Utiliza a palavra chave <<enumeration>>
Diagrama de Classes: Classe ativa
• Possui instâncias e cada instância executa e controla sua própria linha de execução e controle.
• Processador de comandos é um bom exemplo. Recebe um objeto de comando e o executa.
Diagrama de Classes: Visibilidade
• Simples, mas pode assumir aspectos complexos. • Elementos públicos e privados
• +Public, -Private, ~Package e #Protected não é a mesma coisa em todas linguagens • Utilizar de acordo com as regras da linguagem que fará a implementação.
Diagrama de Classes: Mensagens
• UML não define chamadas de mensagem nos diagramas de classe.
• Setas com as mensagens que um objeto envia para outro objeto.
• Abrangem múltiplos casos de uso • Não é normativo.
• Diagrama de comunicação
BIBLIOGRAFIA
FOWLER, Martin. UML Essencial: Um breve guia para a linguagem-padrão de modelagem de objetos. 3. ed. São Paulo: Bookman, 2005. 167 p.