CLASSES
DE ASSOCIAÇÃO (OU CLASSE ASSOCIATIVA)
Permite
acrescentar atributos, operações e outras características às associações. Na
figura abaixo, observe que, se um fornecedor pode fornecer mais de um produto e
um produto pode ser fornecido por mais de um fornecedor, temos um
relacionamento N para N. Caso o cliente deseje verificar a data e o valor total
de um fornecimento, isso poderá ser resolvido facilmente por uma classe
associativa de nome Fornecimento.
Esse tipo
de associação traz a idéia de associação enésima, nesse sentido BOOCH (2005, p.
452) lembra que a “associação enésima” se refere a uma associação entre três ou
mais classes. Esse conceito de associação não será tratado nesse artigo.
ENUMERAÇÃO
É um
recurso usado em várias linguagens de programação. São listas (literais) que
podem ser armazenados como valores ou passados como parâmetros. Para
representar usa-se o estereótipo: <> OU
<>. Eis um exemplo “ilustrativo”.
ASSOCIAÇÕES
REFLEXIVAS
É também
conhecida como auto-associação, sua função é associar objetos de uma mesma
classe. As associações reflexivas trazem o conceito de papéis assumidos por ….
No exemplo ilustrativo a seguir vemos uma associação reflexiva na classe
Funcionário. Isso NÃO significa dizer que o funcionário gerencia a si mesmo,
mas sim, que em um determinado momento um determinado objeto dessa classe
assume o papel de Gerenciador (Gerente) e em outro momento, outro objeto, desta
mesma classe, assume o papel de gerenciado (O vendedor por exemplo).
É também
conhecida como auto-associação, sua função é associar objetos de uma mesma
classe. As associações reflexivas trazem o conceito de papéis assumidos por ….
No exemplo ilustrativo a seguir vemos uma associação reflexiva na classe
Funcionário. Isso NÃO significa dizer que o funcionário gerencia a si mesmo,
mas sim, que em um determinado momento um determinado objeto dessa classe
assume o papel de Gerenciador (Gerente) e em outro momento, outro objeto, desta
mesma classe, assume o papel de gerenciado (O vendedor por exemplo).
GUEDES
(2008, p. 79) denomina as associações reflexivas como associações unárias,
segundo esse autor a associação unária ou reflexiva é quando “existe um
relacionamento de uma classe para consigo mesma”. A descrição do nome da
associação reflexiva no diagrama de classe é importante pois esclarece dúvidas
sobre aquele tipo de associação, uma vez que apenas uma classe é envolvida,
assim esclarece MELO (2002, p. 102) “[...] o nome da associação é mais usado
quando possa haver dúvidas sobre o tipo de associação ou nas associações que
envolvem uma única classe”. Nessa mesma linha de raciocínio, BEZERRA (2007, P.
117), relata que, para melhor esclarecer o significado das associações no
diagrama de classes, a UML fornece além do nome da associação, o direcionamento
de leitura e o papel.
ESCOPO DA
CLASSE (VISIBILIDADE)
As
propriedades, o comportamento das classes e a própria classe, são
definidos por identificadores específicos para cada situação, são eles: “+” ou
público, especifica acesso dentro da classe, por elementos externos e em
classes descendentes; “#” ou protegido, especifica acesso dentro da classe e
por classes descendentes; “-“ ou privado, especifica acesso somente dentro da
classe que foi criada; “~” ou pacote, especifica acesso dentro do pacote.
CLASSE
ABSTRATA
É uma
classe que não possui uma instância imediata. A classe abstrata fornece os
elementos para que classes descendentes possam instanciar seus próprios objetos
cada um com suas particularidades. No diagrama de Classes a classe abstrata é
definida pelo estereótipo <>.
RESTRIÇÕES
São
informadas sempre entre { }. As restrições são inseridas nas próprias
associações entre as classes e tem por objetivo definir constraints iniciais
nessa fase do projeto. O diagrama de classe é o local ideal para fazê-las.
GERAÇÃO
DE CÓDIGO
O
diagrama de classe permite a geração de código fonte, da classe para uma
linguagem de programação orientada a objetos. Algumas ferramentas Case fazem o
caminho inverso (engenharia reversa), ou seja, do código fonte para o diagrama.
Veja a seguir a documentação da classe funcionário e das respectivas classes
herdadas (Gerente e Vendedor), geradas pela ferramenta CASE Open Source Star
UML.
CLASSE
FUNCIONÁRIO
Observe
na figura, que a geração “Java Doc”, poderoso recurso de documentação da
linguagem JAVA, é automaticamente implementada nessa ferramenta CASE, para
isso, basta usar a aba “documentation” da tela principal da ferramenta.
CLASSE
GERENTE
Esta
classe herda (através da generalização) propriedades e comportamentos da sua
classe ancestral (Funcionário), essa característica é implementada através da
cláusula “extends”.
CLASSE
VENDEDOR
Da mesma
forma que a classe Gerente, a classe Vendedor herda (através da generalização)
propriedades e comportamentos da sua classe ancestral (Funcionário), essa
característica é implementada através da cláusula “extends”. Deve ser observado
também que, a título de ilustração, essa classe realiza a interface
iFornecerPrecos, essa característica é implementada pela cláusula “Implements.”
Diagrama de classe (didático e ilustrativo) completo na figura abaixo.
REFERÊNCIAS
BIBLIOGRÁFICAS PRINCIPAIS
BOOCH, Grady; RUMBAUGH,
James; JACOBSON, Ivar. UML Guia do Usuário. – Rio de Janeiro : Elsevier, 2005.
BEZERRA,
Eduardo. Princípios de Análise e Projeto de Sistemas com UML. – Rio de
Janeiro : Elsevier, 2003.
BEZERRA,
Eduardo. Princípios de Análise e Projeto de Sistemas com UML. 2o. Ed. –
Rio de Janeiro : Elsevier, 2007.
PÁDUA,
Wilson de Paula Filho. Engenharia de Software. Fundamentos, Métodos e
Padrões. 2o. Ed. – Rio de Janeiro. LTC – Livros Técnicos e Científicos,
2003.
FOWLER,
Martin.; SCOTT Kendal. UML essencial: um breve guia para a linguagem –
padrão de modelagem de objetos. 169 p. 2. ed. – Porto Alegre: Bookman,
2000.
MELO, Ana
Cristina. Desenvolvendo aplicações com UML. 255 p. – Rio de
Janeiro: Brasport, 2002.
MARTIN,
James.; ODELL, James. Análise e Projeto Orientados a Objeto.
639 p. – São Paulo: Makron
Books, 1995.
GUEDES,
Gilleanes. UML – Uma abordagem Prática. 336 p. 3, ed. – São Paulo:
Novatec Editora, 2008.