Diagrama de Classes
Agenda
IntroduçãoObjetos Classes Atributos
Operações & Métodos Relacionamentos Relacionamento: Associação Nome de Relacionamento Papeis de Relacionamento Multiplicidade Navegabilidade Classes de Associação Associações OU Relacionamento: Agregação Relacionamento: Composição Relacionamento: Generalização Restrições Interface Relacionamento: Realização Relacionamento: Dependência Pacote Estereótipos Bibliografia
No mundo real, manuseiam-se objetos.
Com o intuito de diminuir a distância entre o mundo real e mundo da solução, modelam-se os elementos
manuseados pelos sistemas como objetos.
O diagrama de classe modela a estrutura estática do
sistema, isto é, os objetos manipulados por um sistema e seus relacionamentos.
Objetos
Número: 991 Num. Série: 123 Marca: Motorola Número: 992 Num. Série: 124 Marca: Motorola Número: 994 Num. Série: 126 Marca: Motorola Número: 993 Num. Série: 127 Marca: Motorola São elementos mapeados do mundo real. Possuem: Informações; Comportamentos; Identidade única e Relacionamentos.
Tem natureza dinâmica.
Classes
Número: 991 Num. Série: 123 Marca: Motorola Número: 992 Num. Série: 124 Marca: Motorola Número: 994 Num. Série: 126 Marca: Motorola Número: 993 Num. Série: 127 Marca: Motorola Classe é a definição dos objetos, define:
Informações que os objetos devem possuir: atributos
Comportamento que os objetos podem executar: operações
Tem natureza estática.
Os relacionamentos entre as classes definem os relacionamentos que os objetos podem possuir. O compartimento do nome da classe é sempre
obrigatório, mas os compartimentos de atributos e operações são opcionais.
Definem as informações que os objetos devem ter.
Visibilidade:
Privado (-) somente o próprio objeto tem acesso aos atributos privados
Público (+) qualquer outro objeto pode
acessar os atributos públicos
Protegido (#) usado em relacionamento de
generalização (herança), somente a própria classe e as classe filhas têm acesso aos métodos protegidos da classe pai
Recomendação: use atributos privados, obrigue o acesso a eles somente através de operações.
Sintaxe padrão:
Atributos
Representam os comportamentos dos objetos
A operação é somente a descrição do comportamento (a assinatura do método)
O método é a implementação da operação
Visibilidade:
Privado (-) somente o próprio objeto tem
acesso aos métodos privados
Público (+) qualquer outro objeto pode invocar os atributos públicos
Protegido (#) usado em relacionamento de
generalização (herança), somente a própria classe e as classe filhas têm acesso aos métodos protegidos da classe pai
Sintaxe padrão:
Operações e Métodos
Tipos de Operações:
Construtora
Operação que cria e/ou inicializa um objeto Primeira operação executada
Executada no momento em que o objeto é instanciado
Seletora
Pode ler, mas não alterar o estado do objeto
Modificadora
Pode alterar o estado do objeto
Destrutora
Operação que finaliza um objeto Última operação executada
Executada no momento em que o objeto é destruído
Os tipos de relacionamentos são: Associação Agregação Composição Generalização Dependência Realização
Um relacionamento também possuem informações, como:
Nome Papeis
Multiplicidades Outros
Relacionamento: Associação
Relacionamento mais comum entre classes.
Mapeia o relacionamento entre os objetos do mundo real.
Represente uma dependência estrutural, pois, na
implementação, uma classe pode ter atributos do tipo da outra classe. Isto dependerá da navegabilidade.
Associação Unária. Associação Binária. Associação Ternária ou Associação N-ária.
Relacionamento: Associação
Profes sor Disciplina Curso Identifica um relacionamento.
Pode-se usar um nome ou um verbo para nomear um
relacionamento. O verbo deve ser usado juntamente com a navegabilidade para indicar o sentido de leitura do
relacionamento.
Recomendação: somente use nomes de relacionamentos
quando não tiver claro o significado do relacionamento. Cuidado para não poluir o diagrama.
Papeis de Relacionamento
Identifica a função que um objeto da classes assume no relacionamento.
Deve ser um substantivo.
Também possui visibilidade, pois, em caso de geração de código, este substantivo será o nome do atributo dentro da outra classe. Isto também depende da navegabilidade.
Multiplicidade
Indica quantos objetos de uma classe participam do relacionamento com um objeto da outra classe.
Valores mais comuns:
1 – exatamente um 5 – exatamente cinco 0..1 – zero ou um 0..* – zero ou mais * – zero ou mais 1..* – um ou mais m..n – de m a n 3..5 – de 3 a 5
Navegabilidade
Indica que dado um objeto pode-se alcançar outro objeto.
Na implementação, a navegabilidade vai definir se um uma classe juntamente com seu papel irão gerar um atributo dentro da outra classe.
Semanticamente: Considerando duas classes, A e B, que se relacionam, a navegabilidade de A para B indica que a partir de um objeto de A pode-se obter rapidamente os objetos de B que se relacionam com o objeto de A.
Caso não haja navegabilidade de B para A, para se obter os objetos de A que se relacionam com um objeto de B, deve-se percorrer todos os objetos de A, perguntando se o objeto de B está associado aquele determinado objeto de A.
Navegabilidade
Unidirecional:
Indeterminada ou Bidirecional:
Quando se usa a navegabilidade, ganha-se desempenho, pois, rapidamente se alcança outros objetos.
Mas perde-se em quantidade de espaço, pois exige-se mais ponteiros para referenciar os outros objetos.
Recomendação: não se preocupe com a navegabilidade
logo de início, deixe para decidir a navegabilidade após os diagramas de seqüência, pois, você terá uma melhor
visão de que objetos deseja-se alcançar.
Quando existem atributos que são próprios do
relacionamento, não pertencendo especificamente a uma das classes que participam do relacionamento.
A classe de associação tem as mesmas características de qualquer outra classe. Tem atributos, operações e
relacionamentos.
Associação OU
É o conceito de OU exclusivo.
Uma classe A pode ser relacionar com várias outras classes.
Mas quando se diz que estes relacionamentos pertencem a uma associação OU, cada objeto da classe A somente pode se relacionar com os objetos de uma mesma
Relacionamento: Agregação
Caso particular de associação
Representa um relacionamento do tipo Todo-Parte. A vida do objeto parte não depende da vida do objeto
todo.
Um objeto parte pode ser compartilhado por vários objetos “todos” (Agregação por Referência).
Também representa uma dependência estrutural,
podendo gerar um atributo do tipo da classe “parte”
Relacionamento: Composição
Caso particular de agregação
Também representa um relacionamento do tipo Todo-Parte.
A vida do objeto parte depende da vida do objeto todo. Um objeto parte não pode ser compartilhado por vários
todos (Agregação por Valor).
Também representa uma dependência estrutural, sempre gera um atributo do tipo da classe parte dentro da classe que representa o todo.
Relacionamento entre itens gerais e tipos mais específicos
Classe Mãe/Superclasse x Classe Filha/Subclasse
Relacionamento do tipo “é-um” Subclasses herdam atributos,
operações e relacionamentos da superclasse
Necessária para o polimorfismo
Relacionamento: Generalização
Que subclasses são da mesma categoria?
Restrições
É um dos mecanismos de extensão da UML.
Indica uma restrição sobre um elemento da UML. Por
exemplo, sobre associações onde gera a Associação OU. Deve vir entre chaves ({,}), como {ou}.
Restrições no relacionamento de Generalização:
Completo ou Incompleto: usado para indicar se todas as classes
filhas de uma herança estão modeladas ou não.
Disjunção ou Sobreposição: usada para indicar se existem
objetos de uma classe filha que também pode ser enquadrados como objeto de outra classe filha.
Exercício
Desenhe o diagrama de classes para o sistema de Assinatura de Revistas
Interface
É uma classe que possui somente operações e
relacionamentos do tipo Implementação e Dependência. Isto é, não define atributos nem métodos.
Permite a utilização de chamadas polimórficas sem a utilização de herança.
É um relacionamento entre uma interface e uma classe, onde a classe é obrigada a implementar os serviços
definidos pela interface.
Entre interfaces, o relacionamento passa a ser a
Generalização, pois a interface filha herda os serviços da interface mãe.
Relacionamento: Realização ou Implementação
Usado quando uma classe depende de outra para realizar suas funções (comportamentos).
Representa uma dependência comportamental e não estrutural.
Na implementação, a dependência comportamental pode ocorrer através da passagem de um parâmetro ou de um objeto local de um método, do uso de objeto global ou classe abstrata, etc.
Exemplo de uso de Dependência entre interfaces.
Um pacote é um mecanismo de propósito geral para a organização de elementos em grupo.
Na modelagem, um pacote pode conter: classes, visões, relacionamentos, outros pacotes, etc
Em um sistema, um pacote contém um conjunto de classes e interfaces.
Pacote
Apresentacao + frmInscricao curso + Aluno + Curso - Materia + Pessoa + Professor Controle O relacionamento entre pacotes é a Dependência.
Um pacote também possui o conceito de encapsulamento. Para isso, as classes também possui a informação sobre visibilidade:
Pública (+)
Classes que podem ser exportadas
para outros pacotes
Privada (-)
Classes que não são exportadas
Pacote
curso + Aluno + Curso - Materia + Pessoa + Professor É um outro mecanismo de extensão da UML.
Serve para classificar os elementos (Categorizar), criando novos conceitos ou elementos não definidos na UML.
Exemplos:
Estereótipo de Relacionamento entre Casos de Uso:
Include
Extend
Exemplos: Estereótipo de Classes Boundary (Fronteira) Control (Controle) Entity (Entidade)
Estereótipo
Exercício
Desenhe o diagrama de classes para o sistema de Vídeo Locadora
FOWLER, Martin. UML Essencial. 3a. edição. Bookman, 2005.
BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML – Guia do Usuário. Campus, 2000.