Padrões de projeto,
ferramentas e métodos
ágeis
Professor André Costa
PITÁGORAS
Padrões de Projeto
Correção de Exercício
Inspiração Cristopher Alexander
Documentou em 1977 padrões de projetos em
construções e cidades.
Com esses padrões, podemos resolver problemas
específicos de maneiras padronizadas, seguros,
reutilizáveis e de fácil manutenção.
Gangue dos Quatro (GoF)
Nos anos 80, engenheiros de Software, como Kent Back e Ward
Cunningham, se interessaram nas qualidades dos padrões de
projetos e decidiram aplicar esse paradigma no desenvolvimento.
1995: Erich Gamma, Richard Helm, Ralph Johnson e John
Vlissides (conhecido como Gangue dos Quatro, Gang of Four, GoF)
lançaram um livro com catalogando 23 padrões de projetos.
Estes padrões de projetos se baseiam em programação orientada
a objetos, utilizando suas diversas funcionalidades.
Algumas vantagens
- Soluções testadas, validades e aprovadas
- Facilidade de manutenção do sistema
- Soluções com alta coesão e baixo acoplamento
- Facilita comunicação entre programadores
- Melhora o entendimento do sistema
O Formato de um padrão
● Nome
● Problema / Objetivo / Intenção / Motivação
● Solução
● Consequências / Forças
Categorias de padrões GoF
● Criação:
○ Criação de objetos
● Estrutural:
○ Composição de classes e objetos
● Comportamental:
○ Interação e divisão de responsabilidades entre
objetos e classes
Princípios
básicos
Programar para interface (pode
ser classe abstrata) e não para
implementação.
Favorecimento de composição
sobre herança.
Encapsular o que varia.
Conhecimento mínimo.
Exemplo: RPG
Considere que fomos contratados para desenvolver um jogo
de RPG.
No primeiro momento, foi considerado que todos os
personagens fossem guerreiros.
Você cria a classe Guerreiro e faz o desenvolvimento do seu
jogo.
Exemplo: RPG
No entanto, requisitos mudaram. Solicitaram para que todos
os personagens fossem Gladiadores.
Você, então, cria e desenvolve a classe Gladiador e muda
todas as instanciações de Guerreiro para Gladiador.
Você percebe que isso foi muito trabalhoso e, conversando
com seu cliente, compreende que novas mudanças nos
requisitos podem ocorrer, envolvendo a mudança do tipo de
personagem e, também a possibilidade de usar múltiplos
personagens.
Programando para uma interface
Para diminuir o acoplamento entre os códigos, você
decide criar uma classe abstrata Personagem.
Agora, a programação em outras classes não se dá para
uma classe específica de personagem.
Além disso, possibilita que a definição seja feita em
tempo de execução sem tantos ifs.
Programando para uma interface
Favorecimento de composição
Foi solicitado que possam existir múltiplos personagens no
jogo além dos já ditos:
● Mago
○ De Espada
○ De Cajado
● Bruxo
○ De cajado
Como fazer essa implementação? Devemos usar herança?
Solução baseada em herança
Solução baseada em composição
Alguns exemplos:
Atributos de um produto
Conexão com SGBD
Singleton
Tradução literal: Único de um tipo
Significado em java:
Classe com uma única instância.
Por que?
Como?
Como posso evitar que um objeto da classe seja
instanciado?
Como?
Como posso evitar que um objeto da classe seja
instanciado?
Podemos tornar o construtor dessa classe private!
Mas… precisamos de uma instância dessa classe.
Como?
Como posso evitar que um objeto da classe seja
instanciado?
Podemos tornar o construtor dessa classe private!
Mas… precisamos de uma instância dessa classe.
Sendo o construtor privado, ele pode ser acessado de
dentro da classe!
Como?
Podemos tornar o construtor dessa classe private!
E definir um atributo que seja do tipo da própria classe.
Como queremos apenas uma instância, fazê-lo estático.
Cria-se um método para retornar esse objeto.
Como? Preguiçoso X Ansioso
Lazy X Eager
No modo eager (ansioso), chamamos o construtor na
classe no momento de iniciar a aplicação. O new
Classe(); se encontra fora de um método.
No modo lazy, o método para obter o objeto cria-o, caso
ele não exista. Assim, o objeto da classe só é criado
quando (se) for utilizado.
Singleton
Atividade:
Criar uma classe AviaoPorta() que deve monitorar e
comandar a porta de um avião.
Deve conter um atributo booleano portaAberta.
Deve conter um método operaPorta() que muda o
status de portaAberta e imprime a mudança
realizada.
Faça desta classe um singleton eager.
Se terminar, tente a implementação lazy.
Polêmico!
Anti-padrão?
Demoníaco?
Mentiroso compulsivo?
Singletonite?
- Dificulta testagens unitárias.
- Esconde relações de classes.
- Questões com muitos
acessos / threads
Facade
Tradução do inglês: Fachada
Imagine que temos um conjunto de classes em uma
subcamada de um programa, que são comummente utilizadas
em conjunto.
Para realizar uma operação, por exemplo, processar uma
venda, uma outra classe pode precisar instanciar e usar essas
diversas classes.
Isso cria um problema de acoplamento alto
Facade
Atividade
Consequencias Facade
- Diminuição do acoplamento
- Isolamento de complexidade
- Mau uso:
- Acúmulo de funções
- (Possível solução: mais facades)
- Classe Deus do subsistema:
- Conversa com todas as classes
- Alto acoplamento
Template method
Podemos precisar de um método que, apesar de manter
grande parte das suas funcionalidades constantes,
apresenta outras partes cuja implementação varia.
Para isso, usamos o template method!
Template method
Neste padrão de projetos, temos uma classe abstrata,
em que temos um método concreto.
Este método concreto contém em si as instruções que
não variam.
Para partes que variam, ele chama métodos abstratos,
que são definidos nas suas especificações.
Template method
https:/
/refactoring.guru/
pt-br/design-patterns
Tarefa
Pesquise sobre um design pattern abaixo e explique seu problema, sua
solução e suas consequências:
- Factory Method
- Adapter
- Strategy
Alguns outros padrões interessantes e bem utilizados:
Builder, Chain of Responsibility, Observer
Dúvidas?
Pode entrar em contato comigo
em:
andre.m.costa@kroton.com.br

POO2-Pre-32-PadroesProjetos_.pdf

  • 1.
    Padrões de projeto, ferramentase métodos ágeis Professor André Costa PITÁGORAS Padrões de Projeto
  • 2.
  • 3.
    Inspiração Cristopher Alexander Documentouem 1977 padrões de projetos em construções e cidades. Com esses padrões, podemos resolver problemas específicos de maneiras padronizadas, seguros, reutilizáveis e de fácil manutenção.
  • 4.
    Gangue dos Quatro(GoF) Nos anos 80, engenheiros de Software, como Kent Back e Ward Cunningham, se interessaram nas qualidades dos padrões de projetos e decidiram aplicar esse paradigma no desenvolvimento. 1995: Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides (conhecido como Gangue dos Quatro, Gang of Four, GoF) lançaram um livro com catalogando 23 padrões de projetos. Estes padrões de projetos se baseiam em programação orientada a objetos, utilizando suas diversas funcionalidades.
  • 5.
    Algumas vantagens - Soluçõestestadas, validades e aprovadas - Facilidade de manutenção do sistema - Soluções com alta coesão e baixo acoplamento - Facilita comunicação entre programadores - Melhora o entendimento do sistema
  • 6.
    O Formato deum padrão ● Nome ● Problema / Objetivo / Intenção / Motivação ● Solução ● Consequências / Forças
  • 7.
    Categorias de padrõesGoF ● Criação: ○ Criação de objetos ● Estrutural: ○ Composição de classes e objetos ● Comportamental: ○ Interação e divisão de responsabilidades entre objetos e classes
  • 9.
    Princípios básicos Programar para interface(pode ser classe abstrata) e não para implementação. Favorecimento de composição sobre herança. Encapsular o que varia. Conhecimento mínimo.
  • 10.
    Exemplo: RPG Considere quefomos contratados para desenvolver um jogo de RPG. No primeiro momento, foi considerado que todos os personagens fossem guerreiros. Você cria a classe Guerreiro e faz o desenvolvimento do seu jogo.
  • 11.
    Exemplo: RPG No entanto,requisitos mudaram. Solicitaram para que todos os personagens fossem Gladiadores. Você, então, cria e desenvolve a classe Gladiador e muda todas as instanciações de Guerreiro para Gladiador. Você percebe que isso foi muito trabalhoso e, conversando com seu cliente, compreende que novas mudanças nos requisitos podem ocorrer, envolvendo a mudança do tipo de personagem e, também a possibilidade de usar múltiplos personagens.
  • 12.
    Programando para umainterface Para diminuir o acoplamento entre os códigos, você decide criar uma classe abstrata Personagem. Agora, a programação em outras classes não se dá para uma classe específica de personagem. Além disso, possibilita que a definição seja feita em tempo de execução sem tantos ifs.
  • 13.
  • 14.
    Favorecimento de composição Foisolicitado que possam existir múltiplos personagens no jogo além dos já ditos: ● Mago ○ De Espada ○ De Cajado ● Bruxo ○ De cajado Como fazer essa implementação? Devemos usar herança?
  • 15.
  • 16.
  • 17.
    Alguns exemplos: Atributos deum produto Conexão com SGBD
  • 18.
    Singleton Tradução literal: Únicode um tipo Significado em java: Classe com uma única instância. Por que?
  • 19.
    Como? Como posso evitarque um objeto da classe seja instanciado?
  • 20.
    Como? Como posso evitarque um objeto da classe seja instanciado? Podemos tornar o construtor dessa classe private! Mas… precisamos de uma instância dessa classe.
  • 21.
    Como? Como posso evitarque um objeto da classe seja instanciado? Podemos tornar o construtor dessa classe private! Mas… precisamos de uma instância dessa classe. Sendo o construtor privado, ele pode ser acessado de dentro da classe!
  • 22.
    Como? Podemos tornar oconstrutor dessa classe private! E definir um atributo que seja do tipo da própria classe. Como queremos apenas uma instância, fazê-lo estático. Cria-se um método para retornar esse objeto.
  • 23.
    Como? Preguiçoso XAnsioso Lazy X Eager No modo eager (ansioso), chamamos o construtor na classe no momento de iniciar a aplicação. O new Classe(); se encontra fora de um método. No modo lazy, o método para obter o objeto cria-o, caso ele não exista. Assim, o objeto da classe só é criado quando (se) for utilizado.
  • 24.
  • 25.
    Atividade: Criar uma classeAviaoPorta() que deve monitorar e comandar a porta de um avião. Deve conter um atributo booleano portaAberta. Deve conter um método operaPorta() que muda o status de portaAberta e imprime a mudança realizada. Faça desta classe um singleton eager. Se terminar, tente a implementação lazy.
  • 26.
    Polêmico! Anti-padrão? Demoníaco? Mentiroso compulsivo? Singletonite? - Dificultatestagens unitárias. - Esconde relações de classes. - Questões com muitos acessos / threads
  • 27.
    Facade Tradução do inglês:Fachada Imagine que temos um conjunto de classes em uma subcamada de um programa, que são comummente utilizadas em conjunto. Para realizar uma operação, por exemplo, processar uma venda, uma outra classe pode precisar instanciar e usar essas diversas classes. Isso cria um problema de acoplamento alto
  • 28.
  • 29.
  • 30.
    Consequencias Facade - Diminuiçãodo acoplamento - Isolamento de complexidade - Mau uso: - Acúmulo de funções - (Possível solução: mais facades) - Classe Deus do subsistema: - Conversa com todas as classes - Alto acoplamento
  • 31.
    Template method Podemos precisarde um método que, apesar de manter grande parte das suas funcionalidades constantes, apresenta outras partes cuja implementação varia. Para isso, usamos o template method!
  • 32.
    Template method Neste padrãode projetos, temos uma classe abstrata, em que temos um método concreto. Este método concreto contém em si as instruções que não variam. Para partes que variam, ele chama métodos abstratos, que são definidos nas suas especificações.
  • 33.
  • 34.
  • 35.
    Tarefa Pesquise sobre umdesign pattern abaixo e explique seu problema, sua solução e suas consequências: - Factory Method - Adapter - Strategy Alguns outros padrões interessantes e bem utilizados: Builder, Chain of Responsibility, Observer
  • 36.
    Dúvidas? Pode entrar emcontato comigo em: andre.m.costa@kroton.com.br