[MÚSICA] [MÚSICA] Olá a todos. Meu nome é Eduardo Guerra. Esse é o curso de desenvolvimento Ágil com Padrões de Projeto e hoje vamos falar de dos meus padrões favoritos, que é o composite. Ele é padrão que você usa para representar uma coisa que é formada por outras coisas iguais a ele. A gente vai ver que confusão é essa. Exemplo que eu gosto de dar, imagina, por exemplo, que você tem tecido que é composto por vários outros tecidos. Ele continua sendo tecido. Então eu posso dizer que ele seria tecido composto. Mais ou menos. Vamos ver outro exemplo. Imagina que eu tenho uma loja online e eu quero criar kit de produtos e vender como produto único. Ou seja, por exemplo, eu tenho kit de câmera que eu vou incluir tripé, a câmera e uma lente. E eu quero chamar isso de produto só. Então, eu tenho produto que é composto por outros produtos. Então, como que eu represento grupo de produto que também é produto. Então, como que eu represento conjunto de coisas que também é uma coisa dessas? Vamos dar uma olhada. Por lado, se eu olhar esse kit é igual a produto porque, por exemplo, ele pode ser adicionado no carrinho como se fosse produto, ele possui seu próprio preço, também como se fosse produto mas, por outro lado, a minha abordagem para fazer o controle de stock dele é diferente porque, eu vou verificar cada dos três e não só o produto. Também para fazer o cálculo do volume para transporte, eu também faço cálculo pouquinho diferente. Então, o kit de produto é ou não é o produto? O composite é uma forma que a gente tem de fazer isso. A gente utiliza a composição recursiva para, por exemplo, a gente tem ali uma abstração e a gente cria uma subclasse que a gente chama de composite, que ela tem aquela abstração e é composta também por conjunto daquelas abstrações. Então, o composite, se eu fosse falar de uma forma informal, é o grupo de uma coisa que também é essa coisa. Então, por exemplo, no meu caso do kit, o kit de produtos ele é o produto, ele é grupo de produtos que também é produto. Então, como eu falei, o kit é conjunto de produtos que é produto, inclusive uma coisa interessante é pensar que composite também pode ser composto por outros composites. Imagina que eu tenho ali o meu famoso pau de selfie, junto com o tripé, fazendo kit de suporte para a câmera. Eu posso ter esse kit de suporte como parte de kit de câmeras. Então, não tem problema nenhum. Como o composite também é uma abstração, ele também é produto não tem problema ele compor outro composite. Então, essa é uma das vantagens. Se a gente for pensar, o composite meio que vai criando uma árvore. Toda a vez que você tem composite, você tem nódulo, você tem uma das outras classes, você tem uma folha. Então, se a gente olhar, por exemplo, o produto composite vai estender produto e aí, por exemplo, dentro dele vai ter uma lista de produtos e, os métodos do composite vai acabar que eles vão chamar os métodos daqueles produtos que estão ali dentro. Por exemplo, se eu chamar Remover Do Estoque, eu vou remover do estoque cada daqueles produtos que estão ali dentro do composite. Mas nem sempre eu preciso de simplesmente " não, eu vou pegar e vou chamar todo o mundo". Eu posso ter uma lógica própria do composite. No caso ali, por exemplo, eu posso dar o desconto na hora de calcular o preço. Então, o meu composite pode ter atributo desconto e na hora de calcular o preço eu não só somo o preço do que está ali, mas dou aquele desconto para fazer o kit e talvez vá ser mais atrativo do que comprar os produtos separadamente. Então, lembrando que normalmente o composite chama assim os métodos dos produtos ou objetos que estão compondo ele, mas ele pode ser pouquinho mais complicado do que isso e ter uma lógica própria dentro de cada dos métodos. Certo? Bom. Então, é isso. O composite é dos meus padrões favoritos, eu já usei ele várias vezes. Fiquem de olho no hands on que tem exemplo bem legar com os trechos que inclusive já utilizei na prática, num tema real e espero que vocês tenham entendido o padrão. Muito obrigado. [MÚSICA] [MÚSICA]