Composite

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Composite é um padrão de projeto de software utilizado para representar um objeto que é constituído pela composição de objetos similares a ele. Neste padrão, o objeto composto possui um conjunto de outros objetos que estão na mesma hierarquia de classes a que ele pertence. O padrão composite é normalmente utilizado para representar listas recorrentes - ou recursivas - de elementos. Além disso, esta forma de representar elementos compostos em uma hierarquia de classes permite que os elementos contidos em um objeto composto sejam tratados como se fossem um único objeto. Desta forma, todos os métodos comuns às classes que representam objetos atômicos da hierarquia poderão ser aplicáveis também ao conjunto de objetos agrupados no objeto composto.

Aplicação[editar | editar código-fonte]

Utilizado sempre que é necessário representar elementos que são compostos por outros elementos similares.
Por exemplo, em interfaces gráficas um elemento gráfico pode ser constituído pela composição de vários outros elementos gráficos. Uma janela pode conter um ou mais ícones, uma caixa de texto e vários outros elementos gráficos - até mesmo outra janela. Considerando que uma determinada hierarquia de classes indicasse ElementoGráfico como a super-classe comum a todas classes que representassem os elementos gráficos atômicos, a classe Janela seria representada como uma classe que contém zero (0) ou mais elementos gráficos. Veja diagrama a seguir.
Outro exemplo clássico é o de gramáticas utilizadas para definir linguagens de programação. Se utilizarmos uma hierarquia de classes para representar os comandos da linguagem, supondo que a super-classe seria Comando, teríamos uma classe para o comando de atribuição, outro para, digamos, o comando While, outra para o comando composto - comando que é constituído por uma lista de outros comandos normalmente delimitados por indicadores como { e } ou palavras reservadas como begin e end - e assim por diante. Pois bem, comandos que podem conter outros comandos - como o comando composto ou o comando While do exemplo - normalmente serão representados utilizando-se o padrão composite. Também é apresentado um diagrama a seguir que representa esta hierarquia.
É importante observar que será responsabilidade do objeto composto, para cada método a ser aplicável à lista de objetos que possui, implementá-lo de maneira repetitiva. Por exemplo, no caso da hierarquia de elementos gráficos exemplificada, suponha que um objeto cliente ative o método desenha() de um objeto do tipo Janela. Este método deverá ser capaz de ativar os métodos desenha() de cada um dos objetos que ele contém. Desta maneira será possível interagir com uma composição de objetos da mesma forma que se interage com objetos individuais.

Estrutura[editar | editar código-fonte]

O diagrama abaixo mostra a estrutura de classes do exemplo de componentes gráficos apresentada acima.

Hierarquia de Classes para Elemento Gráfico

Ressalte-se aí que a estrutura do padrão composite é sempre composta por uma estrutura auto-referenciada como a do diagrama. O próximo diagrama representa a hierarquia de classes do exemplo de comandos da linguagem de programação hipotética apresentada.

Hierarquia de Classes para Comando

Padrões relacionados[editar | editar código-fonte]

Bibliografia[editar | editar código-fonte]