• Nenhum resultado encontrado

SISMO - Sistemas e Mobilidade Departamento de Informática / UFMA. Junho de 2008

N/A
N/A
Protected

Academic year: 2021

Share "SISMO - Sistemas e Mobilidade Departamento de Informática / UFMA. Junho de 2008"

Copied!
40
0
0

Texto

(1)

Introdu¸c˜ao

SISMO - Sistemas e Mobilidade http://www.sismo.deinf.ufma.br

Departamento de Inform´atica / UFMA

Junho de 2008

(2)

Padr˜oes de Software

Comp˜oem uma disciplina da Engenharia de Software voltada para a resolu¸c˜ao de problemas baseada na documenta¸c˜ao de “melhores pr´aticas” e de li¸c˜oes adquiridas com a experiˆencia

(3)

Objetivos do uso Padr˜oes de Software

Criar uma base documental para ajudar na solu¸c˜ao de problemas recorrentes em atividades de desenvolvimento Disseminar o uso de uma linguagem comum para compartilhar id´eias e experiˆencias sobre esses problemas e suas solu¸c˜oes

(4)

Qual a melhor maneira de fazer um pedido na lanchonete?

Um cheesburguer, por favor!

Uma fatia de carne bovina mo´ıda grelhada na chapa coberta com folhas de alface, uma fatia de derivado de leite s´olido, salgado e quente, tudo isso envolvido em duas fatias de p˜ao redondo coberto com sementes de gergelim (ufa!), por favor!

Figura: nhammm!!!!

(5)

Um pouco de hist´oria...

Livros do arquiteto Christopher Alexander relacionados a planejamento urbano e arquitetura de edif´ıcios (1964, 1975, 1977, 1979)

Ward Cunningham and Kent Beck – artigo apresentado no OOPSLA’87, Orlando, Florida, USA - ”Using Pattern Languages for ObjectOriented Programs”(OOPSLA -Object-Oriented Programming, Systems, Languages, and Applications)

(6)

Um pouco de hist´oria...

Jim Coplien – publica em 1991 um cat´alogo de idioms de C++ (um tipo de padr˜ao espec´ıfico de uma

linguagem),“Advanced C++ Programming Styles and Idioms” Workshops da OOPSLA relevantes para o amadurecimento dos padr˜oes de software: 1990 - 1993

1995 - Livro “Design Patterns: Elements of Reusable Object-Oriented Software”. Erich Gamma, Richard Helm, Ralph Johnson, e John Vlissides (referidos como the Gang of Four ou GoF) 2000 - “Pattern-Oriented Software

Architecture: A System of Pattern” (the POSA book). Frank Buschmann, Regine Meunier, Hans Rohnert, Peter

Sommerlad, e Michael Stal

(7)

Tipos de Padr˜oes

Padr˜oes de an´alise (Martin Fowler) Padr˜oes organizacionais

Padr˜oes arquiteturais Padr˜oes de projeto Idioms

(8)

Padr˜oes Arquiteturais

expressam uma organiza¸c˜ao estrutural fundamental ou esquema de sistemas de software

provˆeem um conjunto de subsistemas predefinidos, suas responsabilidades e regras para organiza¸c˜ao do relacionamento entre eles

Exemplo: MVC (Model, View, Controller)

(9)

Padr˜oes de Projeto

provˆeem um esquema para refinar subsistemas ou

componentes de um sistema de software, ou o relacionamento entre eles

descrevem estruturas recorrentes de componentes conectados que resolvem um problema geral de projeto dentro de um contexto particular

(10)

Idioms

um idiom ´e um padr˜ao de baixo n´ıvel espec´ıfico de uma linguagem de programa¸c˜ao

idioms descrevem como implementar aspectos espec´ıficos de componentes ou de seus relacionamentos usando

caracter´ısticas de uma determinada linguagem exemplos

interfaces, classes parametrizadas e reflex˜ao em java templates em C++

(11)

Padr˜oes n˜ao s˜ao algoritmos

algoritmos e estruturas de dados resolvem geralmente problemas computacionais de granularidade mais fina (e.g., ordena¸c˜ao e busca)

Padr˜oes s˜ao relacionados tipicamente com problemas arquiteturais mais abrangentes com efeitos em mais larga escala. Por exemplo, os padr˜oes de projeto no livro da GoF tratam problemas como manutenibilidade, reusabilidade e varia¸c˜oes de encapsulamento

(12)

Padr˜oes n˜ao s˜ao Frameworks

um arcabou¸co de software ´e um conjunto de classes

cooperantes que constituem um projeto reutiliz´avel para um tipo espec´ıfico de software

exemplo: Swing do java

(13)

Padr˜oes n˜ao s˜ao Frameworks II

um arcabou¸co pode ser vIsto como a implementa¸c˜ao de um sistema de padr˜oes de projeto

contudo, um arcabou¸co ´e software execut´avel, enquanto padr˜oes de projeto representam conhecimento e experiˆencia sobre software

(14)

Tipos de Padr˜oes de Projeto

Padr˜oes de Cria¸c˜ao - Se preocupam com o proceso de cria¸c˜ao de projetos

Padr˜oes Estruturais - Lidam com a composi¸c˜ao de classes ou de objetos

Padr˜oes Comportamentais - Caracterizam a maneira pelas quais classes ou objetos interagem e distribuem

responsabilidades

(15)

Uma pausa para respirar...

Figura: antes dos problemas...

(16)

Um Problema

A empresa do Z´e est´a desenvolvendo um jogo de combate e ele recebeu a tarefa de criar uma hierarquia de classes para os

combatentes. Suponha que ele criou a seguinte hierarquia inical de classes:

Figura: Diagrama de Classes de Combatentes

(17)

Tudo ia muito bem, mas...

A concorrˆencia n˜ao d´a moleza; e os executivos da empresa, depois de um estafante fim de semana num hotel de luxo, resolveram que o z´e tinha que adicionar novas funcionalidades ao jogo. Ai ele teve uma id´eia genial: Reutliza¸c˜ao de C´odigo via Heran¸ca - inserir os novos “poderes” na classe Combatente, que seriam herdados por todos os outros soldados

Figura: Classe Combatente revisada

(18)

Novos Problemas

“ˆo sua anta, quem j´a viu soldado mergulhar no deserto?”.

Figura: Cuidado! Chefe doido

Z´e n˜ao percebeu que nem todo soldado precisa (ou pode) mergulhar! Ele poderia sobrescrever os m´etodos mergulhar e nadar, mas e se pedirem para adicionar um combatente astronauta? Provavelmente ele ter´a que sobrescrever esses

m´etodos tamb´em...e continuar sobrescrevendo, a cada nova classe derivada de combatente. Eternamente...

(19)

O que aconteceu???

A grande id´eia do Z´e era usar heran¸ca com o prop´osito de reutilizar o c´odigo. Mas acabou criando problemas de manuten¸c˜ao. Quais as principais desvantagens no uso da heran¸ca no caso dos

combatentes?

duplica¸c˜ao de c´odigo nas subclasses

´e dif´ıcil mudar comportamento dos objetos em tempo de execu¸c˜ao

as mudan¸cas podem afetar outros combatentes de modo n˜ao intencional

(20)

Outra grande id´eia

Por´em o Z´e foi informado que novas mudan¸cas viriam a cada trimestre. A heran¸ca iria causar um pesadelo de manuten¸c˜ao. Dai, o Z´e teve outra grande id´eia...

E se eu criasse uma interface aqu´atica? Assim eu n˜ao teria combatentes nadando no deserto eheh. Eu sou muito esperto!!!

Figura: Usando interfaces

(21)

Ai ´e que est´a o “bus´ılis” (O X do problema)

De fato, n˜ao temos mais combatentes nadando no deserto... Mas em contrapartida, a reutiliza¸c˜ao do c´odigo para os m´etodos nadar e mergulhar foi pelo ralo!!!

O Z´e trocou um problema de manuten¸c˜ao por outro.

Figura: Chefe Mais Irado

O problema ´e que mudan¸cas s˜ao uma constante em softwaree precisamos desenvolver aplica¸c˜oes pensando nesse problema.

(22)

Princ´ıpio OO: Encapsulamento

“Identifique os aspectos variantes na sua aplica¸c˜ao e os encapsule. Posteriormente, vocˆe pode estender ou alterar as partes que variam sem afetar as que n˜ao o fazem”

Essa abordagem resultar´a em:

menos “surpresas” inesperadas em raz˜ao de altera¸c˜oes no c´odigo e

sistemas mais flex´ıveis e f´aceis de manter

(23)

Aplicando o princ´ıpio do Encapsulamento ao problema

Poss´ıveis novas classes de combatentes precisar˜ao nadar, mergulhar e at´e mesmo flutuar . (combatentes astronautas, por exemplo), enquanto outras n˜ao

Esse tipo de comportamento (mais vari´avel) deve ser separado da hierarquia da classe Combatente para promover

independˆencia e flexibilidade.

Esse princ´ıpio est´a na base da maioria dos padr˜oes de projeto orientados a objetos

Todo padr˜ao provˆe um meio de deixar uma das partes de um sistema variar independentemente das outras partes

(24)

Separando o que muda do que permanece

Pelo que vimos at´e agora, os m´etodos mais sens´ıveis a mudan¸cas s˜ao exatamente nadar, mergulhar e (o novo m´etodo) flutuar

A hierarquia de classes Combatente deve continuar a mesma, isto ´e, com as mesmas subclasses, mas vamos tirar dela os m´etodos que representam comportamentos mais afetados por mudan¸cas

Vamos criar novas hierarquias de classes para representar esses comportamentos

(25)

Criando hierarquia separada de comportamentos

Figura: Hierarquias de comportamentos

(26)

Implementa¸c˜ao das Interfaces de Comportamento I

Figura: Comportamento Aqu´atico

(27)

Implementa¸c˜ao das Interfaces de Comportamento II

Figura: Comportamento A´ereo

(28)

Princ´ıpio OO: Programar para Interface

“Programe para uma Interface, n˜ao para uma implementa¸c˜ao”

Podemos implementar novos comportamentos aqu´atico e a´ereo, criando novas classes que implementem essas interfaces A classe Combatentes n˜ao precisa conhecer detalhes de implementa¸c˜ao desses comportamentos

Outros objetos, al´em dos Combatentes, podem usar os comportamentos aqu´atico e a´ereo, porque eles n˜ao est˜ao “escondidos” na classe combatente

(29)

Refatorando a Classe Combatente

(30)

Refatorando subclasses

O Comportamento da classe Caveira ´e definido pelas classes que implementam as interfaces AcaoAerea e AcaoAquatica

Figura: Especializando um tipo de Combatente (Caveira)

(31)

Integrando as Hierarquias

Figura: Vis˜ao do Conjunto

(32)

Adicionando Comportamento Dinamicamente

Figura: Aplica¸c˜ao Exemplo

(33)

Princ´ıpio OO: Composi¸c˜ao

“Prefira Composi¸c˜ao em vez de Heran¸ca”

a Composi¸c˜ao permitiu encapsular comportamento (algoritmos) em seu pr´oprio conjunto de clases e permitiu mudar o comportamento dos objetos dinamicamente (em tempo de execu¸c˜ao)

(34)

Padr˜ao Strategy

Parab´ens! Vocˆe acabou de ser apresentado na pr´atica ao padr˜ao Strategy

Segundo o Livro da GoF, a inten¸c˜ao do Padr˜ao Strategy ´e:

“Definir uma fam´ılia de algoritmos, encapsular cada um deles e torn´a0los intercambi´avies. Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam”

(35)

Padr˜ao Strategy: Classifica¸c˜ao e Motiva¸c˜ao

Prop´osito: Comportamental Escopo: Objetos

Motiva¸c˜ao:

clientes que necessitam de diferentes algoritmos se tornam mais complexos se os incluirem em seu c´odigo

diferentes algoritmos s˜ao adequados em diferentes situa¸c˜oes na resolu¸c˜ao de um mesmo problema

(36)

Padr˜ao Strategy: Classifica¸c˜ao e Motiva¸c˜ao

Figura: Exemplo de Motiva¸c˜ao

(37)

Padr˜ao Strategy: Aplicabilidade

Use Strategy quando:

muitas classes relacionadas diferem somente no seu comportamento

vocˆe necessita de variantes de um algoritmo

um algoritmo usa dados sobre os quais o cliente n˜ao precisa ter conhecimento

comandos condicionais relacionados para escolher entre muitos comportamentos de uma classe podem ser movidos para sua pr´opria classe Strategy

(38)

Padr˜ao Strategy: Estrutura

Figura: Estrutra do Padr˜ao

(39)

Padr˜ao Strategy: Colabora¸c˜oes

Strategy e Context interagem para implementar o algoritmo escolhido

os clientes usualmente criam e passam um objeto ConcreteStrategy para o contexto e passam a interagir diretamente com o contexto

(40)

Padr˜ao Strategy: Consequˆencias

fam´ılias de algoritmos relacionados uma alternativa ao uso de subclasses possibilidade de escolha de implementa¸c˜oes os clientes devem conhecer diferentes estrat´egias custo de comunica¸c˜ao entre Strategy e Context aumento do n´umero de objetos

Referências

Documentos relacionados

O presente trabalho procurou mostrar que a oviposição (i.e., o acto de depositar os ovos) da mosca-das-frutas é um dos principais agentes causadores de ferimentos

O objetivo do curso foi oportunizar aos participantes, um contato direto com as plantas nativas do Cerrado para identificação de espécies com potencial

Um teste utilizando observa¸c˜ oes de fra¸c˜ ao de massa do g´ as de aglomerados de ga- l´ axias e SNe Ia foi proposto por Gon¸calves, Holanda e Alcaniz (2012)[ 41 ]. Eles

Este trabalho tem como objetivo contribuir para o estudo de espécies de Myrtaceae, com dados de anatomia e desenvolvimento floral, para fins taxonômicos, filogenéticos e

O espírito do Sistema de Gestão Ambiental (SGA) foi preservado no texto da Política Ambiental aprovado pelo Conselho Superior da UFU (CONSUN): “A UFU se compromete a agir em prol

A conceituação do que vem a ser Convenção Coletiva encontra-se no artigo 611 da CLT, (Brasil, 2017): que em síntese define ser a Convenção Coletiva de Trabalho um acordo de

MELO NETO e FROES (1999, p.81) transcreveram a opinião de um empresário sobre responsabilidade social: “Há algumas décadas, na Europa, expandiu-se seu uso para fins.. sociais,

Os gerentes precisam decidir se atribuirão apenas os custos privados, ou se todos os custos sejam atribuídos (custo total). Depois, precisam decidir usar uma abordagem por função