Como Implementar O Padrão de Projeto Composite em Python

Este artigo tem por finalidade apresentar a definição, uso e melhores práticas do padrão de projeto Composite em Python, a fim de que possamos saber quando e porque utilizá-lo corretamente.

composite em python - tree

Série Design Patterns em Python

Antes de mais nada, eu gostaria de deixar aqui o repositório no github que eu criei com os exemplos dessa série.

Portanto, se por acaso você quiser conferir todo o código que estamos escrevendo neste artigo, basta acessar o link:

O Padrão de Projeto Composite

Composite Design Pattern UML

A sample UML class and object diagram for the Composite design pattern




O design pattern Composite é utilizado para criar um objeto composto com outros objetos similares em estrutura de árvore.

composite em python - tree

Você pode imaginar uma aplicação do padrão de projeto Composite imaginando uma página html.

Uma página HTML é composta por diversos elementos semelhantes, os quais também podem possuir uma série de outros elementos semelhantes, certo?

É exatamente isso que é o design pattern Composite, justamente compor com partes menores o todo, que no exemplo acima, seria a página html.




Composite em Python – O Componente

O componente é a interface, ou contrato estabelecido entre as partes para definir os objetos que fazem parte da composição.


O Component, ou componente, é quem definirá o comportamento padrão em toda a composição dos componentes envolvidos.

Composite em Python – O Composto

O Composite é um elemento na hierarquia de objetos que possui diversos elementos abaixo dele.

Composite em Python – A Folha

O objeto Leaf, ou folha, é a “menor parte” na estrutura de objetos no padrão de projeto Composite.




Isso porque o objeto Leaf não possui nenhum filho abaixo dele.

Ele é a estrutura mais básica de toda a árvore de componentes.

Composite em Python – O Criador

O Client, ou cliente, é o objeto responsável por criar e manipular a toda a composição de objetos.

Executando a Criação

E agora podemos testar o nosso código:


E o resultado será:

Composite – Compondo Patos

Nós podemos utilizar o duck typing que nos é oferecido pelo Python para economizar algumas linhas de código.


E o resultado será exatamente o mesmo que o exemplo acima que utilizou herança para criar a composição:

Conclusão

Eu acredito que o conceito do padrão de projeto Composite em Python é mais utilizado do que o padrão em si.

É muito comum precisarmos trabalhar com árvores de objetos semelhantes, porém, como nós estamos trabalhando com uma linguagem bem mais flexível do que outras, nós acabamos não utilizando toda a estrutura que foi proposta pelo padrão em si.

Como sempre, eu finalizo falando sobre a necessidade de tanto aprender os padrões de projeto, para que tenhamos conhecimentos padronizados e universais sobre o possível código que venhamos a ler, quanto a cautela para utilizá-los, tentando evitar sempre o máximo de complexidade desnecessária no código.

Gostou do padrão Composite em Python?

Não exite em comentar abaixo com qualquer dúvida, sugestão ou crítica!

Um grande abraço.

 




Leave a Reply