Design Patterns Prof.  Lucas Simões Maistro [email_address] http://www.twitter.com/lucas_simoes http://blogdopiruca.wordpress.com/
Desafios da Área de Software Sistemas estão se tornando maiores e com aplicações mais complexas As empresas esperam Menos bugs Mais rapidez de desenvolvimento Diferentes técnicas podem ajudar a atingir esse objetivo Design Patterns é uma delas
Design Patterns -  Introdução Média de 50 bugs a cada 1000 linhas de código em produção (não é código beta ou em desenvolvimento é PRODUÇÃO) Microsoft conseguiu atingir 0,5 defeitos a cada 1000 linhas XP contém 40-50 milhões de linhas (entre 20 e 25mil bugs, é muita coisa) .Net usa diversos design patterns O time de Patterns & Practices trabalha com integração de design patterns www.microsoft.com/practices
Design Patterns -  Introdução Coleção de soluções Utilizadas anteriormente por especialistas em grande escala para a solução de problemas comuns  Padrões são como uma caixa de ferramentas Estudamos padrões para facilitar o dia-a-dia do desenvolvimento O padrão surge naturalmente
Design Patterns -  Introdução Origem na Engenharia Civil Criação de catálogos para Arquitetura Em 1978, Christopher lança seu livro com o nome "A Pattern Language" onde são feitas definições de padrão de projeto
Design Patterns -  Introdução A partir desta definição, profissionais da área de softwares passaram a utilizar esses princípios para a criação das primeiras documentações de padrões de projetos para ser utilizados como uma espécie de guia para novos desenvolvedores. Em 1995, Eric Gamma, Richard Helm, Ralph Johnson e John Vlissides - (gang of four - GoF), publicam o livro "Design Patterns: Elements of Reusable Object-Oriented Software", onde os autores descrevem 23 padrões baseados em suas experiências e que, ainda hoje é a principal referência no assunto.
Design Patterns -  Introdução Template de um Design Pattern Nome Padrão [Descreve a essência do padrão em um curto e expressivo nome]. Objetivo [Descreve o que o padrão faz]. Também Conhecido Como [Lista de sinônimos para o padrão]. Motivação [Fornece um exemplo de um problema e como o padrão resolve aquele problema]. Aplicabilidade [Lista as situações onde o padrão é aplicado]. Estrutura [Conjunto de diagramas de classes e objetos que descrevem o padrão].
Design Patterns -  Introdução Template de um Design Pattern – Cont. Participantes [Descreve as classes e objetos que participam do design pattern e suas responsabilidades]. Colaborações [Descreve como os participantes colaboram para cumprir com suas responsabilidades]. Conseqüências [Descreve os benefícios e os custos da utilização do padrão]
Design Patterns -  Introdução Os Design Patterns GoF estão divididos em: Padrões de Criação: relacionados ao processo de criação dos objetos Padrões de Estrutura: relacionados com a composição de objetos Padrões de Comportamento: relacionados com a forma como objetos interagem e distribuem o trabalho
Design Patterns -  Introdução Padrões de Criação (Creational Patterns) Abstract Factory  - Um método Factory é um método que fabrica objetos de um tipo particular; Um objeto Factory é um objeto que encapsula métodos Factory. Builder  - Separa a construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações. Factory Method  - É uma interface para instanciação de objetos que mantém isoladas as classes concretas usadas da requisição da criação destes objetos. Prototype  - O padrão Prototype fornece uma outra maneira de se construir objetos de tipos arbitrários. Singleton  - Garante que para uma classe específica só possa existir uma única instância, a qual é acessível de forma global e uniforme.
Design Patterns -  Introdução Padrões de Estrutura (Structural Patterns) Adapter  - Permite que dois objetos se comuniquem mesmo que tenham interfaces incompatíveis. Bridge  - Desacopla a interface da implementação; Ocultação de detalhes de implementação dos clientes. Composite - lida com uma estrutura de elementos agrupada hierarquicamente (não como meras coleções). Decorator  - Atribui responsabilidades adicionais a um objeto dinamicamente. O Decorator fornece uma alternativa flexível a subclasses para a extensão da funcionalidade. Facade  - Interface unificada para um subsistema ; Torna o subsistema mais fácil de usar. Flyweight  - Usa compartilhamento para dar suporte a vários objetos de forma eficiente. Proxy  - Fornece um objeto representante ou procurador de outro objeto para controlar o acesso ao mesmo.
Design Patterns -  Introdução Padrões de Comportamento ( Behavioural Patterns ) Chain of Responsability  - Evita dependência do remetente(cliente) de uma requisição ao seu destinatário, dando a oportunidade de mais de um objeto tratar a requisição. Command  - Associa uma ação a diferentes objetos através de uma interface conhecida. Interpreter  - Usado para ajudar uma aplicação a entender uma declaração de linguagem natural e executar a funcionalidade da declaração. Iterator  - Provê uma forma de percorrermos os elementos de uma coleção sem violar o seu encapsulamento. Mediator  - Cria um objeto que age como um mediador controlando a interação entre um conjunto de objetos. Memento  - Torna possível salvar o estado de um objeto de modo que o mesmo possa ser restaurado.
Design Patterns -  Introdução Padrões de Comportamento ( Behavioural Patterns ) Cont. Observer  - Define uma relação de dependência 1:N de forma que quando um certo objeto (assunto) tem seu estado modificado os demais (observadores) são notificados; Possibilita baixo acoplamento entre os objetos observadores e o assunto. State  - Permite objeto alterar seu comportamento quando estado interno muda. Strategy  - Permite que uma família de algoritmos seja utilizada de modo independente e seletivo. Template Method  - Define o esqueleto de um algoritmo em uma operação adiando a definição de alguns passos para a subclasse. Visitor  - Define operações independentes a serem realizadas sobre elementos de uma estrutura

Apresentação Introdução Design Patterns

  • 1.
    Design Patterns Prof. Lucas Simões Maistro [email_address] http://www.twitter.com/lucas_simoes http://blogdopiruca.wordpress.com/
  • 2.
    Desafios da Áreade Software Sistemas estão se tornando maiores e com aplicações mais complexas As empresas esperam Menos bugs Mais rapidez de desenvolvimento Diferentes técnicas podem ajudar a atingir esse objetivo Design Patterns é uma delas
  • 3.
    Design Patterns - Introdução Média de 50 bugs a cada 1000 linhas de código em produção (não é código beta ou em desenvolvimento é PRODUÇÃO) Microsoft conseguiu atingir 0,5 defeitos a cada 1000 linhas XP contém 40-50 milhões de linhas (entre 20 e 25mil bugs, é muita coisa) .Net usa diversos design patterns O time de Patterns & Practices trabalha com integração de design patterns www.microsoft.com/practices
  • 4.
    Design Patterns - Introdução Coleção de soluções Utilizadas anteriormente por especialistas em grande escala para a solução de problemas comuns Padrões são como uma caixa de ferramentas Estudamos padrões para facilitar o dia-a-dia do desenvolvimento O padrão surge naturalmente
  • 5.
    Design Patterns - Introdução Origem na Engenharia Civil Criação de catálogos para Arquitetura Em 1978, Christopher lança seu livro com o nome "A Pattern Language" onde são feitas definições de padrão de projeto
  • 6.
    Design Patterns - Introdução A partir desta definição, profissionais da área de softwares passaram a utilizar esses princípios para a criação das primeiras documentações de padrões de projetos para ser utilizados como uma espécie de guia para novos desenvolvedores. Em 1995, Eric Gamma, Richard Helm, Ralph Johnson e John Vlissides - (gang of four - GoF), publicam o livro "Design Patterns: Elements of Reusable Object-Oriented Software", onde os autores descrevem 23 padrões baseados em suas experiências e que, ainda hoje é a principal referência no assunto.
  • 7.
    Design Patterns - Introdução Template de um Design Pattern Nome Padrão [Descreve a essência do padrão em um curto e expressivo nome]. Objetivo [Descreve o que o padrão faz]. Também Conhecido Como [Lista de sinônimos para o padrão]. Motivação [Fornece um exemplo de um problema e como o padrão resolve aquele problema]. Aplicabilidade [Lista as situações onde o padrão é aplicado]. Estrutura [Conjunto de diagramas de classes e objetos que descrevem o padrão].
  • 8.
    Design Patterns - Introdução Template de um Design Pattern – Cont. Participantes [Descreve as classes e objetos que participam do design pattern e suas responsabilidades]. Colaborações [Descreve como os participantes colaboram para cumprir com suas responsabilidades]. Conseqüências [Descreve os benefícios e os custos da utilização do padrão]
  • 9.
    Design Patterns - Introdução Os Design Patterns GoF estão divididos em: Padrões de Criação: relacionados ao processo de criação dos objetos Padrões de Estrutura: relacionados com a composição de objetos Padrões de Comportamento: relacionados com a forma como objetos interagem e distribuem o trabalho
  • 10.
    Design Patterns - Introdução Padrões de Criação (Creational Patterns) Abstract Factory - Um método Factory é um método que fabrica objetos de um tipo particular; Um objeto Factory é um objeto que encapsula métodos Factory. Builder - Separa a construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações. Factory Method - É uma interface para instanciação de objetos que mantém isoladas as classes concretas usadas da requisição da criação destes objetos. Prototype - O padrão Prototype fornece uma outra maneira de se construir objetos de tipos arbitrários. Singleton - Garante que para uma classe específica só possa existir uma única instância, a qual é acessível de forma global e uniforme.
  • 11.
    Design Patterns - Introdução Padrões de Estrutura (Structural Patterns) Adapter - Permite que dois objetos se comuniquem mesmo que tenham interfaces incompatíveis. Bridge - Desacopla a interface da implementação; Ocultação de detalhes de implementação dos clientes. Composite - lida com uma estrutura de elementos agrupada hierarquicamente (não como meras coleções). Decorator - Atribui responsabilidades adicionais a um objeto dinamicamente. O Decorator fornece uma alternativa flexível a subclasses para a extensão da funcionalidade. Facade - Interface unificada para um subsistema ; Torna o subsistema mais fácil de usar. Flyweight - Usa compartilhamento para dar suporte a vários objetos de forma eficiente. Proxy - Fornece um objeto representante ou procurador de outro objeto para controlar o acesso ao mesmo.
  • 12.
    Design Patterns - Introdução Padrões de Comportamento ( Behavioural Patterns ) Chain of Responsability - Evita dependência do remetente(cliente) de uma requisição ao seu destinatário, dando a oportunidade de mais de um objeto tratar a requisição. Command - Associa uma ação a diferentes objetos através de uma interface conhecida. Interpreter - Usado para ajudar uma aplicação a entender uma declaração de linguagem natural e executar a funcionalidade da declaração. Iterator - Provê uma forma de percorrermos os elementos de uma coleção sem violar o seu encapsulamento. Mediator - Cria um objeto que age como um mediador controlando a interação entre um conjunto de objetos. Memento - Torna possível salvar o estado de um objeto de modo que o mesmo possa ser restaurado.
  • 13.
    Design Patterns - Introdução Padrões de Comportamento ( Behavioural Patterns ) Cont. Observer - Define uma relação de dependência 1:N de forma que quando um certo objeto (assunto) tem seu estado modificado os demais (observadores) são notificados; Possibilita baixo acoplamento entre os objetos observadores e o assunto. State - Permite objeto alterar seu comportamento quando estado interno muda. Strategy - Permite que uma família de algoritmos seja utilizada de modo independente e seletivo. Template Method - Define o esqueleto de um algoritmo em uma operação adiando a definição de alguns passos para a subclasse. Visitor - Define operações independentes a serem realizadas sobre elementos de uma estrutura