quarta-feira, 23 de abril de 2014

Diagrama de Classes - parte 2

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.