• Nenhum resultado encontrado

Construindo softwares utilizando Padrões de Projeto

N/A
N/A
Protected

Academic year: 2021

Share "Construindo softwares utilizando Padrões de Projeto"

Copied!
65
0
0

Texto

(1)

Guilherme Eiji Ichibara - 10310700

Luccas Paroni Silva - 9285227

Thiago Benine Ferreira - 10377538

Construindo softwares utilizando

Padrões de Projeto

(2)

CONTEÚDO

INTRODUÇÃO

Origem e motivação ao uso

S.O.L.I.D.

Os padrões e as boas práticas

01

03

02

04

05

06

CLASSIFICAÇÃO

Os tipos de padrões de projeto

CRIACIONAL

Padrões Abstract Factory e Builder

ESTRUTURAL

Padrões Adapter e Proxy

COMPORTAMENTAL

Padrões Event-Subscriber e Mediator

(3)

INTRODUÇÃO

01

(4)

INTRODUÇÃO

01

Origem e motivação ao tema

ORIGEM

Padrões de Projeto —

Soluções Reutilizáveis

de Software

Orientado a Objetos

MOTIVAÇÃO

Construção de software

utilizando soluções

tentadas e testadas

(5)

S.O.L.I.D.

02

(6)

S.O.L.I.D.

02

Os padrões e as boas práticas

Single Responsibility

S

O

I

L

D

Liskov Substitution

Dependency Inversion

Interface Segregation

Open/Closed

(7)

CLASSIFICAÇÃO

03

(8)

CRIACIONAL

Os padrões criacionais fornecem mecanismos de criação

de objetos

ESTRUTURAL

Os padrões estruturais explicam como montar objetos e classes

em estruturas maiores

COMPORTAMENTAL

Padrões comportamentais são

voltados a designação de responsabilidades entre objetos

CLASSIFICAÇÃO

03

(9)

CRIACIONAL

04

(10)

CRIACIONAL

04

(11)

O PROBLEMA

04

O padrão Abstract Factory

CRIACIONAL

Client

(12)

O PROBLEMA

04

O padrão Abstract Factory

CRIACIONAL

Client

Botão PopUp Input

E se quisermos adicionar temas com

funcionalidades específicas?

(13)

O PROBLEMA

04

O padrão Abstract Factory

CRIACIONAL

Client Botão Azul PopUp Azul Input Azul Botão Vermelho PopUp Vermelho Input Vermelho

(14)

A SOLUÇÃO

04

O padrão Abstract Factory

CRIACIONAL

CreateButton() CreatePopUp()

ComponentFactory

A fábrica abstrata

É conhecida pelo código cliente

(15)

A SOLUÇÃO

04

O padrão Abstract Factory

CRIACIONAL

CreateButton() CreatePopUp() IComponentFactory

A fábrica concreta

Des

conhecida pelo código cliente

Implementa os métodos de criação de elementos

Conhece apenas elementos de um tema

CreateButton() CreatePopUp()

(16)

A SOLUÇÃO

04

O padrão Abstract Factory

CRIACIONAL

A interface de componente

Conhecida pelo código cliente

BlueButton

O componente Concreto

Desconhecida pelo código cliente

(17)

A SOLUÇÃO

04

O padrão Abstract Factory

CRIACIONAL

BlueButton Button CreateButton() IComponentFactory CreateButton() BlueComponentFactory Client

(18)

CRIACIONAL

04

O padrão Abstract Factory

Button CreateButton() IComponentFactory CreateButton() BlueComponentFactory Client RedButton BlueButton CreateButton() RedComponentFactory

A SOLUÇÃO

(19)

CRIACIONAL

04

O padrão Abstract Factory

Quando usar esse padrão?

Sistema deve ser escalável

Objetos que devem ser utilizados de forma conjunta

Grande quantidade de objetos relacionados

(20)

PRÓS

Compatibilidade Desacoplamento P. da responsabilidade única P. do aberto/fechado

CONTRAS

Aumento de complexidade

CRIACIONAL

04

(21)

CRIACIONAL

04

(22)

CRIACIONAL

04

O padrão Builder

O PROBLEMA

Vehicule(wheels, motor, windows...) Vehicule

(23)

CRIACIONAL

04

O padrão Builder

A SOLUÇÃO

BuildDoors() BuildWheels() VehiculeBuilder BuildDoors() BuildWheels() CarBuilder BuildDoors() BuildWheels() BicycleBuilder Vehicule

Extraímos o código de construção para os objetos Builders

(24)

CRIACIONAL

04

O padrão Builder

A SOLUÇÃO

BuildDoors() BuildWheels() VehiculeBuilder BuildDoors() BuildWheels() CarBuilder BuildDoors() BuildWheels() BicycleBuilder Vehicule Construct() Director

Dessa forma, o código cliente

não precisa saber as

(25)

CRIACIONAL

04

O padrão Builder

Quando usar esse padrão?

Construtor telescópico

(26)

PRÓS

Reusar código de construção Construir objetos em etapas Responsabilidade única às classes de construção

CONTRAS

Aumento de complexidade

CRIACIONAL

04

O padrão Builder

(27)

ESTRUTURAL

05

(28)

ESTRUTURAL

05

(29)
(30)

O PROBLEMA

05

O padrão Adapter

ESTRUTURAL

Como fazer com que interfaces incompatíveis se

comuniquem?

(31)
(32)

A SOLUÇÃO

05

O padrão Adapter

ESTRUTURAL

O Adaptador

Converte a interface de uma classe

para outra, que o cliente espera

(33)

Quando usar esse padrão?

Possuir diversas subclasses, mas não é

prático adaptar sua interfaces

Interfaces incompatíveis

ESTRUTURAL

05

(34)

PRÓS

P. da responsabilidade única P. do aberto/fechado

CONTRAS

Aumento de complexidade

ESTRUTURAL

05

O padrão Adapter

(35)

ESTRUTURAL

05

(36)
(37)

O PROBLEMA

05

O padrão Proxy

ESTRUTURAL

Você precisa controlar o acesso de um objeto,

por questões de segurança ou possui um objeto

muito custoso de ser criado?

(38)

A SOLUÇÃO

05

O padrão Proxy

ESTRUTURAL

(39)

A SOLUÇÃO

05

O padrão Proxy

ESTRUTURAL

O Cliente

Trabalha com os serviços e proxies pela

mesma interface

O Proxy

Segue a interface para se passar

como um objeto de serviço

(40)

Quando usar esse padrão?

ESTRUTURAL

05

O padrão Proxy

Inicialização preguiçosa (Proxy Virtual)

Controle de acesso (Proxy de Proteção)

(41)

PRÓS

Controle do objeto do serviço Gerenciar ciclo de vida

O serviço não precisa estar pronto P. do aberto/fechado

CONTRAS

Aumento de complexidade A resposta pode ter delay

ESTRUTURAL

05

(42)

COMPORTAMENTAL

06

(43)

COMPORTAMENTAL

06

(44)
(45)

O PROBLEMA

Como ser mais eficiente na comunicação ?

COMPORTAMENTAL

06

(46)

A SOLUÇÃO

Os interessados se inscrevem para serem notificados

COMPORTAMENTAL

06

(47)

A SOLUÇÃO

06

O padrão Event-Subscriber

COMPORTAMENTAL

Uso de interfaces para não

acoplarmos às publicadoras

(48)
(49)
(50)
(51)
(52)
(53)

Quando usar esse padrão?

Listas de inscrição dinâmicas

Desconhecimento dos Inscritos

COMPORTAMENTAL

06

(54)

PRÓS

Relação em runtime P. do aberto/fechado

CONTRAS

Notificação em ordem aleatória

COMPORTAMENTAL

06

O padrão Event-Subscriber

(55)

COMPORTAMENTAL

06

(56)
(57)

O PROBLEMA

Como desacoplar esses componentes ?

COMPORTAMENTAL

06

(58)

A SOLUÇÃO

Restringir a comunicação direta

COMPORTAMENTAL

06

(59)
(60)
(61)
(62)

Quando usar esse padrão?

Elementos altamente acoplados

Alta dependência entre componentes

COMPORTAMENTAL

06

(63)

PRÓS

P. da responsabilidade única P. do aberto/fechado Redução de acoplamento Reutilização

CONTRAS

Mediador pode se tornar um “Objeto-Deus”

COMPORTAMENTAL

06

(64)

CREDITS: This presentation template was created by Slidesgo, including icons by Flaticon, and infographics & images by Freepik.

Please keep this slide for attribution.

Ficou com alguma dúvida ou tem algum

questionamento ?

Sinta-se à vontade para perguntar

(65)

Abaixo estão listados os materiais utilizados para construir essa apresentação

Livros

■ Design Patterns: Elements of Reusable Object-Oriented Software, by Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John and Grady Booch

■ Dive Into Design Patterns, by Alexander Shvets

Sites

■ https://www.dofactory.com/net/design-patterns ■ https://refactoring.guru/design-patterns

Referências

Documentos relacionados

Nessa mesma reunião, atribuiu-se à "partici- pação " várias características, tais como ser ati- va, consciente, responsável, deliberada, organi- zada e contínua. Para

Conhecer as peças, tabuleiro e regras do jogo de xadrez não são suficientes para definir um9.

A colisão dos continentes durante o período Permiano (cerca de 275 milhões de anos atrás) para formar uma única e gigantesca massa de terra chamada Pangéia , causou

Os conceitos e comandos básicos do MATLAB são abordados através da realização de um conjunto de exercícios de interacção com esta aplicação, indicados numa caixa à esquerda

No primeiro plano, o padrão de desenvolvimento exógeno do turismo mostra as forças dinâmicas de verticalidades que incidem na estruturação do sistema turístico de

A classe Logger usa a variável ativo para indicar se as informações podem ser exibidas, enquanto que a classe Aplicacao é a classe que utiliza dois objetos de tipo Logger..

A seguir, são apresentados os passos necessários para implementação de pool de conexões, utilizando Service Locator.. No diretório META-INF da aplicação, crie um

Na classe de testes, crie objetos Conta e invoque a persistencia da