[MÚSICA] [MÚSICA] Olá a todos, meu nome é Eduardo Guerra, esse é o curso de Desenvolvimento Ágil com Padrões de Projeto. Hoje vamos falar do Padrão Bridge. A gente, na aula passada, viu caso que a herança não funcionava. Então hoje a gente vai falar pouquinho dessas diferenças, da herança com a composição e aprender esse padrão que mistura os dois conceitos, o de herança e composição para criar uma solução. Vamos lá. Então, primeiro, a herança tem essa desvantagem de poder ser utilizada somente uma vez. A composição a gente pode compor quantas vezes a gente quiser com quantas classes a gente quiser. A herança tem a questão também, quando a gente define hook method ali na herança, a gente define qual vai ser a implementação dele no momento que a gente instancia a nossa subclasse. Então a gente dá new ali e já está definindo o comportamento. A composição, pelo fato da gente poder trocar qual é o objeto que está compondo sem precisar criar novo objeto principal, permite que a gente possa mudar o comportamento tempo de execução. A gente vai ver que, alguns casos, isso daí vai ser bem importante. E a grande vantagem da herança, como a gente falou, qualquer método público ou protegido vira candidato a ser hook method. Por quê? Porque ele pode ser sobrescrito na subclasse e vira ponto onde você pode estar pendurando novos comportamentos. Já a composição, não. Quando você usa a composição, você chama os métodos daquela classe que está compondo pontos específicos, e você não tem o controle de adicionar novos pontos onde você pode estar adicionando o comportamento através da composição. Então, a herança tem essa vantagem de, no começo, ser pouco mais flexível e você poder deixar essas opções pouco mais abertas. Quando você utiliza a composição, você já tem que saber muito bem quais os pontos ali na sua classe que você quer poder estender o comportamento ou deixar esse comportamento flexível para alterar a utilização da composição. Então, aqui uma breve comparação entre herança e composição para a gente começar essa discussão interessante aqui dessa aula. Agora, uma coisa bacana, é que a gente não tem que exclusivamente: vou usar herança, aí é herança para todo lado. Ou vou usar composição, e é composição para todo lado. Assim como o preto e o branco. Às vezes, por exemplo, no xadrez dá muito certo, a gente pode também ter uma solução que misture a herança e a composição e também dá bastante certo. E é justamente o caso do Padrão Bridge. Ele é baseado a gente pegar quando a gente tem duas coisas que podem variar, a gente utilizar a herança para flexibilizar uma delas e utilizar a composição para a outra. Então vamos pegar o caso da última aula, da entrega e do preço, da ordem, para ver como ficaria utilizando o Padrão Bridge. Deixa eu sair aqui para vocês poderem ver o diagrama melhor. Então a gente teria ali a classe ordem, que tem ali o total, o preço, a entrega. Só que o que acontece, a entrega, ao invés dele ser método que vai ser especializado pela subclasse, é método que vai estar chamando o método entrega de uma classe que está compondo a ordem, que no caso seria o TipoEntrega. Então, de acordo com a instância que estiver dentro ali da classe ordem do TipoEntrega, ele vai chamar a entrega expressa ou a entrega normal. Da mesma forma, eu tenho ali usando a herança, a parte do preço. Então, dependendo se eu criar uma ordem de atacado ou uma ordem de varejo, eu vou ter ali o preço definido pela subclasse. O que é interessante é que eu posso estar combinando livremente. Então, por exemplo, esse lado da ponte onde eu tenho a ordem, ele utiliza a herança. E eu posso adicionar facilmente ali outros tipos de ordem. Note que, se eu criar ali uma ordem especial, eu não vou duplicar nenhum código referente a entrega. Da mesma forma, se eu for olhar para o outro lado, esse lado aí é o lado que utiliza a composição da nossa ponte. Onde eu também posso estar criando novos tipos, por exemplo, para a entrega de dia, eu crio ali uma nova implementação e posso combinar facilmente com qualquer tipo de ordem ali e eu não vou duplicar código por conta disso. Então, uma coisa interessante é que a gente percebe com essa estrutura, os dois lado ali podem variar livremente, de uma forma independente. Então eu consigo, por exemplo, pegar qualquer tipo de ordem e compor com qualquer tipo de entrega e novas ordens e novas entregas não vão causar duplicação dentro da minha estrutura. Olha aí que bacana o Padrão Bridge, combinando o poder da herança com o da composição para poder ter duas variabilidades do meu problema, podendo assumir comportamentos diferentes de forma independente. Então esse aí foi o Padrão Bridge. Espero que vocês tenham gostado, muito útil também. E que vocês possam utilizar isso aí nas soluções do dia a dia de vocês. Continue assistindo que tem mais padrões com composição nesse módulo. Até mais. [MÚSICA] [MÚSICA]