E aí [Música] o Olá eu sou o professor Marcelo Fantinato Essa é a disciplina de engenharia de software e nós vamos agora nessa aula falar sobre sobre padrões de projeto é um assunto que em aulas anteriores já foi mencionado já foi adiantado é está dentro do escopo de reuso de software uma das abordagens que Eu mencionei em aula anterior que nós falaríamos sobre reuso de software são os padrões de projeto E aí o que é um padrão de projeto imagina que nessa altura do campeonato depois de vocês terem acompanhado as aulas anteriores Possivelmente vocês já
saibam vai Imagine o que é um padrão de projeto né até porque vocês já viram tem um padrão de arquitetura é e eu comentei que arquitetura é uma parte do projeto bom então por inferência provavelmente vocês imaginam tem um padrão de projeto um padrão de projeto descreve um problema de projeto é um problema de projeto de software e o cerne né o núcleo da sua solução e essa solução né o problema EA solução é necessariamente em orientação a objetos essa ideia de padrões de projeto aqui do inglês a gente conhece bastante como design patterns redesign
de projeto e o pato de padrões a nasceu na área de óleo de orientação a objetos Então esse padrão de projeto se ele descreve um problema Oi e a a sua solução o núcleo não é o principal da solução de forma a ser reusado né fazendo os ajustes necessários caso a caso em geral né as coisas não podem ser reusado tal e qual precisa se fazer alguns ajustes é e como que um padrão de projeto ele é é apresentado Quais são os elementos essenciais de um padrão de projeto são quatro elementos essenciais embora vocês vão
ver no slide posterior que eles são quebrados em um conjunto maior de elementos mas os elementos essenciais é eu tenho que ter um nome do padrão um identificador né o problema a solução são os dois itens que apareciam na frase anterior né dado um problema Qual é a solução é e também as consequências tudo bem Eu tenho esse problema para esse problema eu uso essa solução mas a usar essa solução é uma consequência acontece alguma coisa tem algo que eu preciso me preocupar Lembrando que é um problema e uma solução do ponto de vista de
solução de projeto de como eu organizo é a solução de software e aí eu havia comentado que na verdade a na verdade ou o padrão ele é descrito de uma forma mais detalhada né e bem mais detalhada Vejam Só a São 13 itens que espera-se que um padrão de projeto contenha em sua descrição nome e classificação né que tipo o nome e o tipo dele e aí a gente vai ver quais são os possíveis tipos no próximo slide intenção eo objetivo né para que ele serve a nome similares né porque porque a dependendo alguém pode
escrever um padrão com o nome outro chicote inscrito de escrever o padrão com outro nome motivação Porque eu deveria querer usar aquele padrão aplicabilidade quando eu deveria aplicar esse esse padrão a estrutura é o Como é o padre eu acredito né a estrutura participantes Quais são as entidades envolvidas no padrão colaborações com quais outros padrões ele ele podem interagir consequências né que aparecia no item anterior detalhado como sendo um item essencial implementação como ele deve ser implementado exemplo tem sempre que ser acompanhado de um exemplo para facilitar o seu entendimento exemplo de código né como
ele é implementado é e usos conhecidos Quem já usou esse padrão para que fim e padrões relacionados outros padrões similares ou não similares mas que tem algum tipo de relação bom então isso é uma estrutura nós vamos ver um exemplo aqui nessa aula é como um exemplo ilustrativo de um padrão de projeto Mas é em termos de havia mencionado que nós veríamos Quais são os sobre classificação bom né Quais são os seis tipos de padrões a O autor que nós estamos mencionando seguindo aqui ele faz o seguinte classificações de padrões o padrão ele pode ser
dividido em termos de propósito ou em termos de escopo em termos de escopo é cinco padrão ele se refere a classe ou ao objeto né Lembrando que nós estamos falando especificamente em relação à orientação a objetos mas esse padrão ele é um padrão de como trabalhar com classe ou de como trabalhar com objetos que são as instâncias das classes ó E além disso Qual o propósito é um propósito é um padrão de criação um padrão estrutural com um padrão comportamental é e você então pode ter a a diferentes tipos de padrões seguindo essa classificação existe
aqui por volta de 20 padrões nesse catálogo né não são os únicos padrões que existem no mundo esse aqui é o catálogo que aparece aparece na referência que nós seguimos é a maioria são padrões de objeto né que essas essa parte aqui debaixo a maioria é de objeto EA maioria é comportamental mas também tem uma grande quantidade estrutural e uma quantidade menor padrões de criação Mas vamos dar uma olhada Então o que o que exatamente significa cada um desses tipos tão Primeiro começando por escopo nós temos por os padrões por isso que Oi Nilce por
objeto bom então os padrões que tratam de no escopo da classe eles vão envolver os relacionamentos entre as classes e as suas subclasses Ok então eu tenho uma classe e eu vou ter subclasses E aí é eu esses padrões sempre envolvem esse tipo de relacionamento ou seja relacionamento de herança certo já os padrões de projeto de no escopo do objeto eles vão tratar de relacionamentos entre objetos são padrões que tratam de problemas né então lembrando né usando frases mais longas para a gente recapitular O que são padrões né então são padrões que tratam de problemas
comuns quando eu estou lidando com um relacionamento ventre objetos poder a ver de herança um objeto herdando de um objeto maior superior na relação hierárquica mas também podem ser de relacionamento entre objetos no mesmo nível por exemplo não Exatamente no mesmo nível mas objetos que se comunicam não necessariamente numa relação de herança então no caso da classe sentem é sempre de herança E no caso de objeto pode ser liderança mas não necessariamente é os padrões é de classe ele sempre são estáticos são de problemas considerados estáticos que a eles são problemas e soluções que envolvem
a questões em tempo de compilação na como não poderia deixar de ser pela natureza do problema envolvendo classes jogos de objetos também consequentemente são problemas em soluções de questões dinâmicas em tempo de execução que quando os objetos são criados na em tempo de compilação Você não tem o objeto ainda criado você só vai ter objeto criado em tempo de execução por isso que ele é a de natureza dinâmica bom e em termos de nível de propósito finalidade Você pode ter os de criação quando uma classe um objeto é criada estruturais que são as os padrões
de relacionados a composição de classes e objetos né quando você compõe classes e objetos agrupam né a classe de objetos e os comportamentais que daí é a interação entre 4 e objetos como que as classes estão interagindo entre si u como que os objetos estão interagindo entre si certo e Esse é o provavelmente vocês já a conhecem essa ideia de O que é um algo estrutural e algo comportamental por exemplo não ml nós temos os diagramas estruturais e os diagramas comportamentais Um diagrama estrutural é o diagrama de classes em que você mostra a estrutura é
estática das classes no diagrama de estado um diagrama de sequência um diagrama de atividades onde a grama comportamental porque mostra como que o sistema vai se comportar se comportar durante a sua execução e aqui também então nós podemos ser os problemas e as soluções é um tempo estrutural ou comportamental Que bom Aí sim um exemplo é de todos esses Eventos todos esses padrões que apareciam aqui nesse catálogo bom deixa eu voltar aqui para o prato catálogo a existe o padrão adapter não é o padrão adapter né que é um padrão estrutural é Nunes no escopo
de classe e aí esse padrão ele está aparecendo aqui como um exemplo é vocês viram lá naquele slide anterior que são 13 Acho que são três itens são descritos e muitos esses itens são bem detalhados Então não é minha intenção aqui agora é passar item a item Eu apenas vou passar todos os itens para vocês terem uma uma noção né uma ideia abstrata do que é um padrão de softer a inclusive da do tamanho que que que vocês vão se e quando vocês encontrarem um padrão para entender então A ideia é né o padrão adaptar
Qual a intenção dele converter a interface de uma classe em uma outra interface esperada pelos clientes então o adapter permite que classes com interfaces incompatíveis que trabalhem em conjunto o que de forma ou de outra o que de outra forma seria impossível então é o que o próprio nome diz né adaptador Então você tem duas classes que não se comunicam porque a interface delas é diferente então esse é o problema né olha eu tenho duas classes é e EA interface delas é incompatível como eu resolvo isso muitas pessoas devem ter já já se deparado com
esse problema e criado suas próprias soluções alguém pensou numa solução e propôs como um padrão a ser seguido provavelmente essa solução já foi bem testada já foi Vale E foi discutida com outros profissionais e a maioria concordou que seria o melhor a melhor forma de resolver aquilo e aí então é proposto como um padrão então para quem é ainda não tem a melhor uma forma própria de resolver isso siga esse padrão para resolver se você tem classes com interfaces em compatíveis e que aquelas trabalha em conjunto é use esse padrão certo então Essa é a
intenção desse padrão bom Então veja que são questões práticas do dia a dia de um programador de um desenvolvedor de software Esse é apenas um exemplo veja que é no nível da classe e é do tipo estrutural a um nome ela também é conhecida como o rapper Oi e aí daí vai tá aqui eu já começo a não detalhar mais para vocês olha só a motivação então motivação porque ela deveria ser usada esse padrão deveria ser usado dessa forma em vez de você fazer a sua solução local a sua solução caseira porque você deveria seguir
essa solução que está sendo apresentado aqui existe um uma motivação aqui um texto motivando para te convencer a usar esse padrão depois ainda continuação da motivação tá não foi só aquilo temos continuação da motivação aqui inclusive com um diagrama aí de classes explicando como que é se esse problema de adaptador esse problema de imcompatibilidade acontece e há ainda continua na motivação terminamos com existe ainda uma finalização aí aí a aplicabilidade quando você deve usar esse padrão tão uso padrão adapter Quando você quiser uma usar uma classe existente mas sua interface não corresponder a interface de
que necessita você cria quiser criar uma classe reusável que coopere com classe são relacionadas ou não previstas ou seja classe que não classes que não necessariamente tem interfaces compatíveis é aplicabilidade ainda continua no com aplicabilidade vai ter mais informações tá eu não vou ler em detalhes o outro item estrutura Aqui nós temos um diagrama normalmente a estrutura né Ela é apresentado no formato de um diagrama porque é quase como se fosse o padrão propriamente dito é onde você entende realmente o padrão ele vai ser apresentado no formato de um dia e explicando como o que
é o padrão tanto que aparece aqui né olha a classe adapter aqui também a classe adapter certo então é onde você deveria realmente entender o padrão participantes aqui é a definição a descrição né de de Quais são as classes que aparecem ao cliente target adapte o adapter são os participantes Avent idades e elas vão ser descritas aqui no item participantes as colaborações é quais são as colaborações que existem entre os o as entidades lá né os clientes o adapter o adapte quem está interagindo com quem lá naquele diagrama Quais são as consequências que você tem
que se preocupar se você usar esse padrão também é um item grande que vai continuar aqui certo relativamente grande ele continua e continua e continua Olha nós temos aqui já no item 3 dentro de consequências três consequências certo at alistado aqui então três consequências nós temos a implementação que o outro e que tem bastante importante né junto com o a estrutura que era o diagrama agora implementação como você implementa o padrão propriamente dito é utilizando aqui olha utilizando operações abstratas tão item 1 e tem dois aqui vai vir o passo a passo de como você
implementar esse padrão inclusive com o diagrama com exemplo aqui do código de como você implementa esse padrão tá embora eu tenha falado com o exemplo de código existe um outro item que o exemplo para permite dito que aí é um exemplo completo o exemplo completo em que vai ser o dado um contexto com um código em que mostra a implementação daquele padrão vai ser nesse caso aqui provavelmente vai ser mostrado duas classes incompatíveis em que você consegue usar o padrão para criar uma aquela Classe A data é não só classe adapter Mas aquelas outras é
aqueles outros relacionamentos certo então com esse código aqui com esse exemplo desse código você deveria entender deveria conseguir entender ah entendi é assim que ele tá fazendo a e para resolver esse problema e eu posso sempre usar essa mesma solução sempre que eu tiver esse mesmo problema essa é a ideia e há ainda continua o exemplo de código não era só aquilo ainda tem mais né ah não é um problema super é simples de resolver não é um problema trivial com duas linhas de código e a que usa os conhecidos é em em quais lugares
que esse padrão Já foi usado Muito provavelmente que o próprio autor uso certo é a mais os conhecidos aqui e padrões relacionados ele lista que 3 padrões o padrão Bridge o padrão de cor Heitor e o padrão proxy E por que que eles são relacionados ó e aqui é finalizando já indo para finalização dessa aula aqui existe um relacionamento entre todos aqueles 20 e Poucos padrões por exemplo nós temos aqui o adaptar que não está relacionado com ninguém certo mas por exemplo é nós temos aqui a o padrão composite que é relacionado com um monte
de gente o padrão Command que usa o composto do composite o comando que evita histerese do momento então é existem relacionamentos entre aqueles padrões quase todos os padrões tem algum relacionamento com algum outro padrão um exceção justamente daqueles três padrões Olha o adapter e aqueles dois que eram relacionados a ele e tinha mais um outro que era relacionado a ele que não tá ali é mas enfim é uma forma de você ter uma visão Geral de todos os padrões que estão nesse catálogo a E aí a Existem algumas algumas dicas aqui que vai ficar direito
Dá para vocês né como você se deveria selecionar um padrão e uma vez que aquele padrão foi selecionado o que você deveria fazer para usar esse padrão certo é são algumas diretrizes para você selecionar um padrão e usar um padrão quando você tiver um problema esse essa aula também não foi feita naquela referência com base naquela referência básica usadas nas outras aulas mas sim no livro padrões de projeto soluções reutilizáveis de software orientado a objetos dos autores é Érick Gama Realm Johnson e wi-fi diz de 2.000 é uma referência bem tradicional dos padrões e é
isso obrigado a E aí E aí E aí E aí E aí [Música]