Buscar

Padroes de projeto 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Padroes de projeto 
Ementa 
Aula 1 – Ementa e Disicussões iniciais. Revisão (classes, objetos, Diagrama de classes, doagrama de 
sequencias). 
Aula 2 – Estilos arquiteturais. Fluxo de dados (sequencial e batch), call/return (camadas/mvc, 
bibliotecas, frameworks e componentes), processos de comunicação (cliente-servidor, P2P), repositorio 
de dados (black board e SGBD) e máquinas virtuais (interpretadores e sistemas baseados em regras) 
Aula 3 – Introdução aos Padrões de projeto. Importância. Visão particular a manifestação dos catálogos 
diversos. Introdução ao padrão GOF. 
Aula 4 – Padrões de Criação (Abstract Factory, Builder, Factory Method). 
Aula 5 – Padrões de Criação (Protoype, Singleton). Padrões estruturais (Adapter, Brigde e Composite). 
Aula 6 – Padrões Estruturais (Decorator, Facade, Flyweight, Proxy). 
Aula 7 – Padrões Comportamentais (Chain of Responsibility, Command). Revisão. 
AV1 (8 pts). Entrega da lista de exercícios 1 (2 pts). 
Aula 8 – Correção da AV1. 
Aula 9 – Padrões Comportamentais (Interpreter, iterator e mediator). 
Aula 10 – Padrões Comportamentais (Memento, Observer, State) 
Aula 11 – Padrões Comportamentais (Strategy, template method e visitor) 
Aula 12 – Introdução aos Padrões Grasp. 
Aula 13 – Padrão Criador, controlador, acoplamento fraco e coesão alta. 
Aula 14 – Polimorfismo, Inversão pura. 
Aula 15 – Indireção, varições protegidas. 
AV2 (8 pts). Entrega da atividade estruturada (2 pts - individual) 
Aula 16 – Correção da AV2 
AV3 (10 pts) 
Bibliografia – Padrões de projeto Erich gamma et al. 
 
 
 
 
 
 
31/07/2013 
Revisão O.O. 
Os sistemas de implementação atuais procuram seguir um paradigma de implementação que dá ênfase 
ao encapsulamento de atributos e operações. Tais propriedades são consubstanciadas em um objeto, 
descritor de uma instância de uma classe e suas associações. 
A principal ferramenta para representação das classes e objetos se dá através da UML. A Unified 
Modeling Language (UML) permite não só a modelagem de aspectos do domínio do sistema, mas 
também de mapear um projeto sob o ponto de vista computacional. Na UML, representamos uma 
classe da seguinte maneira: 
 
 
 
 
 
 
 
 
Os atributos e operações privadas indicam que não é possível o acesso aos valores por parte de outros 
objetos. Os atributos e operações protegidas permitem o acesso aos valores se e somente se os objetos 
forem de Classes Filhas*. Por fim, os atributos e operações públicos podem ser acessados por quaisquer 
objetos. 
As classes podem ser abstratas (<<abstract>>), o que indicam que não podem ser instanciadas. São 
geralmente utilizadas em taxonomias (Heranças). 
 
 
 
 
 
 
 
Por vezes a herança restringe o uso de aplicações devido a sua necessidade de criar vínculos fortes entre 
as classes. Em uma gama de sistemas precisamos especificar contratos, consubstanciados através de 
 
<<abstract>>nome da classe 
 
nom 
- atributo privado 
# atributo protegido 
+ atributo público 
 
- operação privada 
# operação protegida 
+ operação pública 
Classe Pai 
Classe Filho 
opcional 
 
 
interfaces. As interfaces são um conjuntos de operações (métodos) necessários para adequação ou 
fornecimento de um serviço. Na UML é assim que se representa uma interface: 
 
 
 
 
 
 
Uma classe deve implementar uma interface. 
 
 
 
 
 
 
Aula 2 – 07/08/2013 
Continuação: Revisão O.O. 
Na aula passada revemos o uso de classes e interfaces, alpem de truqies estritamente ligados à 
Linguagem de Programação. Revemos as idéias de instâncias de interfaces. Façamos, agora, mais alguns 
experimentos. 
 
 
 
 
 
 
 
 
 
 
<<interface>> 
Nome da interface 
 
 
+ op 1 
+ op 2 
+ op 3 
 A 
<<interface>> I 
Op1 
Nome da interface 
 A 
+op1() 
 B 
-b1 
+op2() 
 
 C 
-c1 
+op3() 
 
<<Interface>> 
+op 
 
 
Introdução às Arquiteturas de Software 
Muitos profissionais da área de T.I. rcebem o título de arquiteto. Eles geralmente são profissionais com 
larga experiência e se utilizam de um conjunto de soluções e filosofias para construção de um projeto de 
software. 
Afinal, o que é uma arquitetura de software? Segundo Mendes, uma arquitetura de software é detimida 
como um: 
“Conjunto de componentes de sistema, seus inter-relacionamentos, princípios e diretrizes guiando o 
projeto ao longo do tempo.” 
Os benefícios de uma arquitetura de software está amplamente difundida sobre os elementos básicos 
de um ciclo de desenvolviment. O primeiro benefício se refere ao controle da complexidade, pois a 
decomposição em componentes permeite a atribuição de responsabilidades clares e simplificação no 
reuso. 
As responsabilidades e a possibilidade de reuso em arquiteturas normalmente se consubstancia em 
componentes que são nomeados de acordo com a sua granularidade (Frameworks, bibliotecas, 
subsistemas, etc.). Além disso, do ponto de vista de gerência de projetos, a decomposição decorrente 
permiteuma estrutura organizacional matricial. 
 
Aula 3 – 14/08/13 
Estilos Arquiteturais de Software 
*Grupo: Fluxo de Dados 
O grupo de fluxo de dados consiste em um conjunto de estilos que determinam de forma de 
sequencialmente dos dados no sistema. 
-Batch 
 
 
 
 
Neste estilo, os passos do processamento são independentes logicamente, mas possuem uma ordem 
explícita. Cada passo roda um por vez, de modo que a saída de uma seja a entrada para outro processo, 
exceto pelo 1º e o último passo. 
- Pipes and Filters 
 
 
VALIDAR ORDERNAR ATUALIZAR 
Fluxo de 
dados 
Pipes 
Processa 
Filter 
 
 
Neste estil, o fluxo linear de dados passa pela entrada do componente filter, submete-se ao 
processamento e é enciado para saída. Esta, por sua vez, envia o resultado por meio de uma tubulação 
(Pipe) para outro nó. 
*Grupo: Call/Return 
-MVC (Model/ View/ Controller) (ou camadas) 
Muitas aplicações necessitam que haja uma separação entre o modelo de negócio e as funções de 
interesse e de controle. 
Neste estilo, as camadas são necessariamente obrigadas a manter qualquer tipo de interface apenas 
com as suas vizinhas mais próximas. Genericamente, são chamadas de arquiteturas de camadas, mas 
tiveram seu conceito atrelado ultimamente à aplicações comerciais voltadas para internet. 
Camada 1 
Camada 2 
Camada 3 
Camada N 
 
No âmbito da internet, a idéia da separação de camadas é relativa ao baixo acoplamento entre a 
interface de visualizalçao (view), as classes de controle (controller) e as classes de domínio (Model). 
De certa forma, o MVC está presente em outros estilos arquiteturais, causando uma certa discordância 
entre a literatura. 
O estilo em camadas é um dos mais utilizados atualmente, estando presente em aplicações de diversos 
tipos, tal qual o conhecido TCP/IP. 
- Frameworks/Componentes/Bibliotecas 
Uma das grandes metas a serem alcançadas no desenvolvimento de um sistema é a REUSABILIDADE. O 
agrupamento de uma parte do software como uma caixa que possui uma entrada e uma sáida tem sido 
a maneira como elementos comuns do sustema são reaproveitados. 
As caixas que estses estilos arquiteturais se referem estão classificadas quanto ao nível de detalhamento 
que elas oferecem. 
- Caixa Branca: todo código a ser reutilizado está disponível para visualização. Geralmente necessita que 
o desenvolvedor tenha algum domínio do código a ser reutilizado. 
- Caixa Preta: todo código está oculto para o desenvolvedor. Existe apenas um conjunto de operações a 
serem realizadas dada as respostas esperadas.- Caixa Cinza: Exige algum conhecimento do desenvolvedor, mas pode ser usado de uma forma 
degradada caso necessário. 
 
 
Caixa Branca 
Código 
particular 
E Caixa Preta 
S 
S E 
Caixa Cinza S 
Código 
particular 
E 
E 
 
 
As bibliotecas são geralmente produzidas como uma caixa preta, de modo que as operações comuns 
possam ser importadas em qualquer instante por programas distintos. Os componentes diferem das 
bibliotecas em suas granularidade. Geralmente estão associados à requisitos e possuem uma ou mais 
bibliotecas inter-conectadas. Alguns componentes, principalmente os softwares-livres, são caixas 
brancas em função de seus objetivos. Os frameworks são caixas cinzas. Constituem um arcabouço básico 
para construção de sistemas, fornecendo os códigos bases que precisam de ajustes para o domínio de 
trabalho. 
Grupo: Comunicação 
- Sistema cliente-servidor 
Este estilo arquitetural define papeis de comunicação entre processos (programas). 
Se diz que um processo é cliente se este for requisições a um servidor. 
 
 
Na arquitetura cliente-servidor é estabelecido um protocolo de comunicação. Se diz que o cliente é 
gordo e um servidor é magro quando a maioria do processamento reside no cliente. No contrário, se diz 
que um servidor é gordo e o cliente é magro. 
Uma das vantagens associadas a este estilo está ao baixo acoplamento de processamento. Em contra-
partido, os gargalos decorrentes de um possível número maior de clientes incorre em falhas estruturais 
e problemas de escalabilidade. 
-P2P (peer-to-peer) 
Neste estilo cada participante possui autonomia de processamento, ** uma clara independência. Os 
serviços e requisição podem continuar operando, mesmo com uma baixa: 
 
 
 
O principal ponto negativo desta abordagem reside na manutenção de possíveis conseqüências entre os 
nós. 
Estilos Arquiteturais (continuação) 
Grupo: Máquinas Virtuais 
- Interpretadores: os interpretadores consistem em uma camada de abstração independente. São muito 
comuns em máquinas virtuais. Nesse contexto, os softwares compilados executam por meio de 
chamadas a interfaces. A camada de abstração funciona como um “meio de campo” entre o hospedeiro 
e o cliente. 
Cliente Servidor 
Nó Nó 
Nó Nó 
 
 
- Sistemas baseados em regras: Estilo arquitetural que determina um conjunto de regras, geralmente 
em uma lógica proposicional, objetivando a inferência sobre um determinado conjunto de fatos. São 
consideradas máquinas virtuais uma vez que as regras sçao independentes do software, código ou 
sistema hospedeiro. 
 
 
 
 
 
 
- Blackboard: este estilo arquitetural consiste em um repositório para gravação e consulta por software 
clientes. Não há, nesta abordagem, um sequenciamento relativo ao uso do repositório. 
 
 
 
 
 
- Banco de Dados: Também consiste em um repositório compartilhado, mas pode eventualmente 
possuir um grau de distribuição. Difere do BlackBoard pois necessita de sincronização explícita. 
 
 
 
 
 
Introdução aos Padrões de Projeto 
Padrões de projeto nada mais são que uma coletânia de soluções propostas e utilizadas por diversos 
profissionais desde a década de ’60. 
Os padrões de projeto resolvem problemas específicos, tornando, também, o projeto orientado à objeto 
mais flexível, reutilizável e escalável. 
Para Alexander, “cada padrão descreve um problema no nosso ambiente e o cerne da sua solução, de 
tal forma que você possa usar essa solução mais de um milhão de vezes, sem nunca fazê-lo da mesma 
maneira.” 
Entrada Saída 
Software 1 
interpretador 
Software N 
hospedeiro 
Regra 1 
Regra 2 
Regra 3 
Menória de 
trabalho 
Máquina de 
inferência 
 
Ap4 Ap1 
Ap2 Ap3 
Cliente 1 Cliente N 
Base de Dados 
 
 
É importante ressaltar que os Padrões GOF (Gang of Four) dos autores Gamma et al., principal objeto de 
nosso estudo, dão diretrizes de como solucionar o problema, mas não consistem em uma receita de 
bolo imutável. Em geral, um padrão de projeto tem os seguintes aspectos: nome, problema, solução e 
conseqüências. 
Apesar de adotarmos a Orientação Objeto como mecanismo de explicitação dos padrões, não há nada 
que impeça o uso em linguagens aderentes a outros paradigmas. 
Gamma et al. define que a melhor política de programação para consubstanciação dos Padrões reside 
no que ele chama de “Programação para interfaces” 
Existe um benefício claro: 
*Os clientes (objetos) não conhecem tipos específicos, apenas interfaces e classes abstratas. 
Como selecionar um padrão? 
Depois de entendido e modelado o domínio, procure destacar que arquitetura você julga ser 
pertinentes para o domínio da aplicação. 
O projetista de sistema deve estudar como os padrões se relacionam. É importante que os padrões 
sejam consideradas quanto as suas afividades. 
-Padrão Abstract Factory (Fábrica Abstrata) 
A intenção deste padrão é fornecer uma “fábrica” de objetos sem que os clientes conheçam 
efetivamente as classes concretas. 
Considere aplicar o padrão Abstract Factory quando um sistema deve ser independente de como os seus 
produtos são criados ou representados. É especialmente válido quando se deseja criar uma família de 
produtos. 
 
*void meramente ilustrativo. 
Conseqüências do Abstract Factory 
- isola classes concretas; 
- troca de família de produtos; 
 
 
- Promove harmonia entre produtos; 
- É difícil suportar novos tipos; 
Padrão de Projeto Builder 
O objetivo do padrão de projeto builder é promover o desacoplamento durante a construção de objetos 
complexos. 
O padrão builder é utilizado quando desejamos especificar um algoritmo para criação de um objeto 
complexo de forma independentes das partes que o compõe. 
 
 Director: para todos os objetos buildPart() 
Conseqüências 
- Permite variar a representação interna de um produto; 
- isola o código para construção e representação; 
- Oferece um controle mais fina sobre a construção de um produto; 
 
Padrão de Projeto Factory Method 
O principal objetivo do padrão factory method está relacionado ao fornecimento de um guia para 
postergação da criação de objetos por parte das classes filhas. 
O padrão Factory Method é comumente usado para definirmos um Framework. Desejamos que os 
clientes do Framework decidam a melhor maneira de usá-lo. Este padrão é geralmente utilizado quando 
uma classe não pode antecipar quais os objetos devem ser criados. 
As classes filhas de um cliente deverão armazenar o conhecimento sobre a construção do objeto. 
 
 
 
Conseqüências 
 Fornece ganchos para subclasses; 
 Conecta hierarquias de classes paralelas; 
Exemplo: 
 
 
Padrão de Projeto Prototype 
O objetivo do padrão Prototype é estabelecer uma maneira de produzir cópias fiéis de objetos. O 
Prototype deve ser independente de como os produtos são criados , compostos e representados. É 
também utilizado quando as classes a instanciar forem especificadas em tempo de execução. 
 
Conseqüências 
- Adiciona e remove produtos em tempo de execução; 
- Especifica novos objetos pela variação de valores; 
- Difícil implementação do clone(). 
 
 
Padrão de Projeto Singleton 
O conceito por trás do padrão de projeto Singleton reside na necessidade de se garantir a penas uma 
única instância de uma classe. Ou seja, não permitir mais de um objeto. 
A solução reside em tornar a classe responsável por manter esta unicidade. 
 
 
 
Exemplo: 
 
- Consequências: 
* Acesso controlado a instância única. 
* Espaço de nomes reduzidos. 
* Variantes para controle de vários objetivos. 
Padrão de Projeto Adapter 
A intençãode iso do padrão de projeto Adapter reside na compatibilidade de uso de frameworks e 
bibliotecas com interfaces à priori conflitantes ou mesmo imutáveis para determinados clientes. 
 
- Consequências: 
* Permite o Adapter substituir algum comportamento de adaptee 
 
 
Singleton 
Static instance()

Continue navegando