Post on 16-Apr-2015
Modelagem de Classes do Domínio
Introdução O modelo de casos de uso fornece uma
perspectiva do sistema a partir de um ponto de vista externo.
De posse da visão de casos de uso, os desenvolvedores precisam prosseguir no desenvolvimento do sistema.
Introdução A funcionalidade externa de um sistema
orientado a objetos é fornecida através de colaborações entre objetos.◦ Externamente, os atores visualizam resultados de
cálculos, relatórios produzidos, confirmações de requisições realizadas, etc.
◦ Internamente, os objetos colaboram uns com os outros para produzir os resultados que são visíveis de fora.
Uma colaboração pode ser vista sob o aspecto dinâmico e sob o aspecto estrutural estático.
Aspecto dinâmico: ◦ Descreve a troca de mensagens entre os objetos
e sua reação a eventos que ocorrem no sistema.
Aspectos dinâmico e estático
Aspecto estrutural estático◦ Permite compreender como o sistema está
estruturado internamente. Este é estrutural, pois seu foco encontra-se na
representação da estrutura das classes e nas relações entre estas.
Este é estático, pois não apresenta informações sobre as interações dos objetos no decorrer do tempo
Aspectos dinâmico e estático
Aspectos dinâmico e estático
Lembre-se:
Os aspectos estático e dinâmico deum SW não são independentes !
Na verdade, a construção de um serve para adicionar detalhes ao outro.
Modelo de classes O diagrama da UML utilizado para representar o
aspecto estático é o diagrama de classes.◦ O modelo de classes é composto desse diagrama e de
alguma descrição textual associada. Assim como outros modelos, o modelo de classes
evolui durante o desenvolvimento do sistema.◦ À medida que o sistema é desenvolvido, o modelo de
classes é incrementado com novos detalhes. Três níveis sucessivos de abstração:
◦ Domínio◦ Especificação◦ Implementação.
Modelo de classes
O modelo de classes de domínio ◦ Representa as classes no domínio do negócio em
questão. ◦ Este modelo é construído na fase de análise.◦ Por definição, este modelo é abstrato e não deve
considerar restrições inerentes à tecnologia a ser utilizada na solução de um problema.
Modelo de classes O modelo de classes de especificação
◦ É obtido através da adição de detalhes (classes da solução tecnológica, tipos, visibilidades, parâmetros,...) ao modelo anterior.
◦ Este modelo é construído (por iteração) na fase de projeto
O modelo de classes de implementação ◦ Corresponde à implementação de classes anteriores
em alguma LPOO◦ Este modelo é construído (por iteração) na fase de
implementação
Modelo de classes
Resumindo... ◦ As classes de domínio são definições abstratas que
descrevem o problema sem considerar a tecnologia
usada na solução. O foco está nas classes e não nos seus atributos e
operações Quando atributos ou operações são representados, define-se
apenas o nome destes (nada de tipo, visibilidade,
parâmetros,...)
Modelo de classes
◦ As classes de especificação e implementação
consideram a tecnologia usada na solução, entretanto: As classes de especificação descrevem a solução com um
elevado nível de abstração (independente de uma LPOO).
As classes de implementação descrevem a solução
considerando a implementação da solução em uma LPOO
É fortemente recomendado que se padronize a nomenclatura a ser usada para os elementos do modelo de classes.
A seguir, é apresentada uma sugestão de padronização
◦ Para nomes de Identificadores (regra geral): Remover qualquer espaço em branco, preposição, artigo,
acento ou caracter especial. EX: OrdemPedido, obterTotal(), precoUnitario, ...
Padronizando a Nomenclatura
◦ Para nomes de Classes e de Relacionamentos: Iniciar as palavras com letra maiúscula. EX: Cliente, ItemPedido, Pedido, OrdemPedido,...
◦ Para nomes de propriedades (Atributos) e operações (Métodos): A primeira palavra inicia com letra minúscula, as demais
iniciam com letras maiúsculas. Acrescentar parênteses às operações e Siglas ficam inalteradas. EX: nome, precoUnitario, obterTotal(), CPF, ...
Padronizando a Nomenclatura
Classes Uma breve revisão...
◦ Uma classe representa um grupo de objetos semelhantes.
◦ Uma classe descreve esses objetos através de atributos e operações.
◦ Os atributos correspondem às informações que um objeto armazena.
◦ As operações correspondem às ações que um objeto sabe realizar.
Classes Notação para uma classe
◦ Uma classe é representada através de uma “caixa” com, no máximo, três compartimentos exibidos (nome da classe, atributos e métodos). Por convenção, o nome de uma classe é apresentado no
singular.◦ A notação utilizada depende do nível de abstração
desejado.
Classes Exemplo: classe ContaBancaria
Associações Representa relacionamentos que são formados
entre objetos.
◦ Embora as associações sejam representadas entre
classes, tais associações representam ligações entre
objetos das classes envolvidas.
São representadas através de um segmento de
reta.
Associações
Exemplos:
Cliente Produto
ContaCorrente HistóricoTransações
Hóspede Quarto
Multiplicidades das Associações Representam os limites inferior e superior da
quantidade de objetos aos quais um outro objeto pode estar associado.
Cada associação em um diagrama de classes possui duas multiplicidades, uma em cada extremo da linha de associação.
Multiplicidades das Associações
Nome SimbologiaApenas Um 1..1 (ou 1)
Zero ou Muitos 0..* (ou *)
Um ou Muitos 1..*
Zero ou Um 0..1
Intervalo Específico li..ls
Multiplicidades das Associações Exemplo 1:
◦ Pode haver um cliente que esteja associado a vários pedidos.
◦ Pode haver um cliente que não esteja associado a pedido algum.
◦ Um pedido está associado a um, e somente um, cliente.
Cliente Pedido
1 0..*
Multiplicidades das Associações Exemplo 2:
◦ Uma corrida está associada a, no mínimo, dois velocistas ◦ Uma corrida está associada a, no máximo, seis velocistas. ◦ Um velocista pode estar associado a várias corridas.
◦ Uma lista de intervalos pode ser especificada na multiplicidade de uma associação EX: “1,3,5..9,11” equivale a um intervalo {1,3,5,6,7,8,9,11}
Velocista Corrida2..6 0..*
Conectividade das Associações A conectividade corresponde ao tipo de
associação entre duas classes: ◦ um para um◦ um para muitos◦ muitos para muitos.
A conectividade da associação entre duas classes depende da multiplicidade da associação.Conectividade Em um
extremoNo outro
extremoUm para um 0..1 ou 1 0..1 ou 1
Um para muitos 0..1 ou 1 * ou 1..* ou 0..*
Muitos para muitos * ou 1..* ou 0..* * ou 1..* ou 0..*
Conectividade das Associações Exemplo:
um para um
um para muitos
muitos para muitos
Participação das Associações Indica a necessidade da existência da
associação. A participação pode ser
◦ Obrigatória. Se o valor mínimo da multiplicidade de uma associação é
igual a 1◦ Opcional
Se o valor mínimo da multiplicidade de uma associação é igual a 0.
Por exemplo:
obrigatórioopcional
Detalhando uma associação Para melhor esclarecer o significado de uma
associação no diagrama de classes, a UML
define três recursos de notação:◦ Nome da associação: fornece algum significado
semântico a mesma.
◦ Direção de leitura: indica como a associação deve
ser lida
◦ Papel: para representar um papel específico em
uma associação.
Detalhando uma associação
PapelNome
Papel
Direção
Detalhando uma associação
Atenção:
É preferível não nomear associações a usar nomes vagos ou óbvios demais.
O mesmo vale para papéis!
O objetivo é ter diagramas claros e não “poluídos”.
Isto é, equilibrar o entendimento e a concisão !
Detalhando uma associação Embora ocorra com pouca freqüência, pode-se
definir mais de uma associação entre duas
classes.
Nestes casos, já que as duas classes
envolvidas são as mesmas, o detalhamento
das associações (uso de papéis, nomes de
associações e/ou direção de leitura) é
apropriado para aumentar a legibilidade.
Detalhando uma associação
Associação de Agregação É um caso especial da associação
◦ conseqüentemente, multiplicidades, participações, papéis, etc. podem ser usados igualmente
É utilizada para representar conexões que guardam uma relação todo-parte entre si.
Associação de Agregação A diferença entre associação simples e uma
associação de agregação é puramente semântica◦ Em uma associação de agregação, um objeto está
contido no outro, ao contrário de uma associação simples que apenas relaciona objetos.
◦ Onde se puder utilizar uma associação de agregação, uma associação simples também poderá ser utilizada.
Associação de Agregação
Atenção:
Sejam duas classes associadas, X e Y. Se
uma das perguntas a seguir for respondida
com um sim, então, provavelmente há uma
agregação onde X é todo e Y é parte.
X tem um ou mais Y?
Y é parte de X?
Associação de Agregação Notação :
◦ Um segmento de reta que conecta as classes relacionadas e possui um losango branco perto da classe que representa o todo.
Exemplo:
Obs:◦ Na associação de agregação não há dependência existencial entre as partes e o todo.
Se uma Equipe for extinta, o Jogador ainda pode ser membro de outras
JogadorEquipe*
membro
*AssociaçãoEsportiva
* *
Afiliada
Composição Um livro é composto de capítulos
◦ Capítulo é parte essencial de livro◦ Se não existir capítulo, não existe livro◦ Capítulo não existe fora de livro
Linha com losângulo preenchido na classe “dominante”◦ Livro é composto de 1 ou mais capítulos
Classe Associativa É uma classe que está ligada a uma associação,
ao invés de estar ligada a outras classes. É normalmente necessária, quando duas ou
mais classes estão associadas, e é necessário manter informações sobre esta associação.
Uma classe associativa pode estar ligada a associações de qualquer tipo de conectividade. ◦ Todavia, é mais comum com conectividade muitos
para muitos
Notação:◦ Mesma da classe, entretanto a classe é ligada a uma associação.
Exemplo:
OBS:◦ Não se descreve a linha de associação de uma classe associativa
Classe Associativa
nometelefoneendereço
Pessoa
razãoSocialendereço
Empresa
saláriodataContratação
Emprego
*
empregado
*
empregador
Classe Associativa De forma geral, pode-se substituir, sem perda de informação, uma classe
associativa por uma classe ordinária
Note que a classe emprego tem participação obrigatória em ambas as associações
Generalizações e Especializações
O modelador também pode representar relacionamentos entre classes.◦ Esses denotam relações de generalidade ou
especificidade entre as classes envolvidas.◦ Exemplo: o conceito mamífero é mais genérico
que o conceito ser humano.◦ Exemplo: o conceito carro é mais específico que o
conceito veículo. Esse é o chamado relacionamento de
herança.◦ relacionamento de generalização/especialização◦ relacionamento de gen/espec
Generalizações e Especializações
Terminologia ◦ subclasse X superclasse.◦ supertipo X subtipo.◦ classe base X classe herdeira.◦ classe de especialização X classe de
generalização.◦ ancestral e descendente (herança em vários
níveis) Notação definida pela UML
Semântica da Herança
Subclasses herdam as características de sua superclasse◦ É como se as características da superclasse
estivessem definidas também nas suas subclasses Note a diferença semântica entre a herança e a
associação.◦ A primeira trata de um relacionamento entre
classes, enquanto que a segunda representa relacionamentos entre instâncias de classes.
Semântica da Herança
◦Na associação, objetos específicos de uma classe se associam entre si ou com objetos específicos de outras classes.
◦Exemplo: Herança: “Gerentes são tipos especiais de funcionários”. Associação: “Gerentes chefiam departamentos”.
Herança de Associações Não somente atributos e operações, mas também
associações são herdadas pelas subclasses. No exemplo abaixo, cada subclasse está
associada a Pedido, por herança.
Propriedades da Herança