projetos de softwares; ✓Reconhecer a importância dos padrões dentro de um projetos de software Vamos pensar... QUAL É A UTILIDADE/FUNÇÃO DE SE TER PADRÕES EM UM PROJETO DE SOFTWARE? DEFINIÇÃO INICIAL ✓Padrões são maneiras testadas e documentadas de alcançar objetivos; ✓Padrões são comuns nas diversas áreas da engenharia; ✓Na Engenharia de Software temos os Padrões de Projeto – Design Patterns. DEFINIÇÃO Um padrão de projeto não é um projeto finalizado que pode ser diretamente transformado em código fonte ou de máquina, ele é uma descrição ou modelo (template) de como resolver um problema que pode ser usado em muitas situações diferentes. Padrões são melhores práticas formalizadas que o programador pode usar para resolver problemas comuns quando projetar uma aplicação ou sistema. Padrões de projeto orientados a objeto normalmente mostram relacionamentos e interações entre classes ou objetos, sem especificar as classes ou objetos da aplicação final que estão envolvidas DEFINIÇÃO - PATTERNS
“Cada padrão descreve um problema que ocorre repetidas
vezes no nosso ambiente e, então, descreve o núcleo da solução para aquele problema, de forma que você pode reutilizar a mesma solução milhões de vezes sem nunca fazê-la da mesma forma duas vezes.”
Christopher Alexander, et. al
A Pattern Language (1977) DEFINIÇÃO - PATTERNS
“Descrição de uma solução customizada para resolver um
problema genérico de projeto em um contexto específico. [...] Um padrão de projeto dá nome, abstrai e identifica os aspectos-chave de uma estrutura de projeto comum para torná-la reutilizável.”
Erich Gamma, et. al
Design Patterns, Elements of Reusable Object-Oriented Software (1994) DEFINIÇÃO - PATTERNS
• Padrões (...) são um modo de capturar experiências (…)
de modo que outras pessoas possam utilizá- las[Gamma93].
• Padrões de projeto constituem um conjunto de regras
descrevendo como realizar determinadas tarefas no desenvolvimento de software[Pree94]. DEFINIÇÃO - PATTERNS Analogia: jogo de xadrez. Diversos mestres já elaboraram jogadas geniais. Essas jogadas foram catalogadas e passaram a ser utilizadas por outros jogadores. O mesmo acontece no desenvolvimento de software. Desenvolvedores experientes criaram soluções para diversos problemas relacionados ao desenvolvimento de software. Essas “jogadas” (padrões) também foram catalogadas. Esses padrões são agora utilizados por outros desenvolvedor FORMATO DE UM PADRÃO Quatro elementos essenciais: Nome; Descrição do problema e contexto para os quais o padrão se aplica; Descrição da solução genérica proposta; Consequências da aplicação do padrão (custos e benefícios). PARA QUE SERVEM UM PADRÃO
Lembramos de patterns quando nos deparamos com algum problema
Começo de um projeto Hábito no projeto de um sistema Aumentar o reuso Abstração Melhora a documentação São muito bem documentados – possui componentes Sistema pode agregar esta documentação Facilita a documentação Muito tempo gasto na manutenção Dedicar maior tempo ao projeto – usar padrões Bem documentados POR QUE USAR OS PADRÕES Aprender com a experiência de outros: Ajudam a resolver os principais problemas dos iniciantes; Permitem que façamos bons projetos mais rapidamente. O jargão facilita a comunicação; Permitem que os desenvolvedores concentrem seus esforços nos aspectos inéditos do problema. Software de melhor qualidade: Melhores práticas em OO; Soluções bem testadas e documentadas. PADRÕES GoF
Definição segundo GoF (Gang of Four): "descriptions of
communicating objects and classes that are customized to solve a general design problem in a particular context.“
"descrições de objetos e classes comunicantes que são
customizados para resolver um problema geral de design em um determinado contexto." PADRÕES GoF Os padrões "GoF" são divididos em 24 tipos. Em função dessa grande quantidade de padrões, foi necessário classificá-los de acordo com as suas finalidades.
Segundo o seu propósito, padrões podem ser:
✓Criacionais: tratam do processo de criação de objetos ✓Estruturais: tratam da composição de classes e objetos ✓Comportamentais: tratam das interações e distribuição de Responsabilidades entre classes e objetos PADRÕES GoF Os padrões "GoF" são divididos em 24 tipos. Em função dessa grande quantidade de padrões, foi necessário classificá-los de acordo com as suas finalidades.
Segundo seu escopo, padrões podem se aplicar a:
✓Classes: propõem relacionamentos entre classes e subclasses ✓Objetos: propõem relacionamentos entre objetos PADRÕES GoF PADRÕES GoF PADRÕES GoF PADRÕES GoF POR QUE USAR OS PADRÕES
Um padrão somente deve merecer este nome depois que sua
utilidade for comprovada em um certo número de sistemas COMO SELECIONAR UM PADRÃO? • Entenda como os padrões ajudam a resolver problemas em OO; • Revise as intenções de cada padrão; • Estude como os padrões se inter relacionam; • Estude as similaridades entre os padrões de mesmo propósito; • Conheça as principais causas de retrabalho; • Considere o que você pode querer mudar em seu projeto no futuro. COMO USAR UM PADRÃO? Leia o padrão todo uma vez; Ler as seções aplicabilidade e consequências A aplicação pode ser imprópria ou gerar problemas maiores Ler as seções: Estrutura, participantes e colaboração; Estude o código fonte de exemplo – melhora o entendimento; Escolha nomes para os participantes do padrão dentro do seu contexto; Defina as novas classes e modifique classes existentes que são afetadas; Defina nomes para as operações do padrão dentro do seu contexto; Implemente as operações. '' Um framework é um conjunto FRAMEWORK cooperativo de classes que tornam um projeto reutilizável para uma classe específica de software. Um framework fornece uma orientação arquitetural através da divisão do projeto em classes abstratas e definindo as suas responsabilidades e colaborações. Um desenvolvedor irá customizar um framework para uma aplicação particular através de subclasses e compor instâncias de classes do framework. ''[GoF] FRAMEWORK X PATTERNS
Um framework é um conjunto de classes, uma espécie de mini-
arquitetura para uma determinada categoria de software. Um framework deverá ser customizado para uma aplicação específia a partir da criação de classes concretas desta aplicação que herdaram das classes abstratas do framework. Projetistas perdem um pouco de liberdade na tomada de decisão Arquitetura predefinida Pode conter Patterns na implementação FRAMEWORK X PATTERNS • Framewoks oferecem maior reuso do que Patterns • O código do framework é reutilizado • É construído em uma linguagem específica • Arquitetura já está projetada • Ciclo de desenvolvimento é menor • Ao utilizar um framework, basta desenvolver somente a parte especifica ao nosso caso. CONCLUINDO... • Desenvolver SW é difícil. • Desenvolver SW reutilizável e ainda mais difícil. • Padrões facilitam o reuso de projetos e arquiteturas de sucesso. • OOP = ferramenta. “Ter um martelo não faz de ninguém um arquiteto.” • Estudar padrões de software é uma necessidade para desenvolvedores de software que almejam qualidade em seu trabalho. FUTURO • Novas tecnologias e técnicas surgem rapidamente. • O profissional deve-se manter atualizado. • O tempo é cada vez mais curto. • Aumento da demanda por software. • Maior exigência por qualidade. • Algumas linguagens já implementam alguns patterns. • Softwares construídos com patterns possuem facilidades de manutenção. • Bem documentados. • Um exemplo: • Uma empresa com profissionais pouco experientes pode reusar o conhecimento de uma empresa mais experiente no ramo para aumentar o ganho no desenvolvimento. FIM