• Nenhum resultado encontrado

5.1-DesenvolvendoemCamadas-comFrontContrller

N/A
N/A
Protected

Academic year: 2021

Share "5.1-DesenvolvendoemCamadas-comFrontContrller"

Copied!
86
0
0

Texto

(1)

Padrões de Projeto

Padrões de Projeto

Prof. Cristiano Biancardi

Prof. Cristiano Biancardi

(2)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 2 2

Introdução

Introdução

Aplicações em 2 camadas

Aplicações em 2 camadas

• Lógica de apresentação (a interface homem

máquina) e a lógica de negócio (algoritmos do

sistema – casos de uso), estão reunidos em

uma única camada.

• Modelo de Classes do Domínio do Problema

fica separado –> quando implementadas.

• Atualização eram extremamente penosas e

complexas.

(3)

Com o passar do tempo, novas restrições de tempo e custo surgiram,

Com o passar do tempo, novas restrições de tempo e custo surgiram,

além de maior concorrência.

além de maior concorrência.

Necessidade de um modelo que permitisse maior produtividade e

Necessidade de um modelo que permitisse maior produtividade e

desenvolvimento de aplicações mais confiáveis.

desenvolvimento de aplicações mais confiáveis.

Surgiram os padrões de desenvolvimento em 3 ou mais camadas.

Surgiram os padrões de desenvolvimento em 3 ou mais camadas.

Vantagens:

Vantagens:

Reusabilidade

Reusabilidade

O mesmo modelo pode ser usado com diferentes visões (ou aplicações diferentes).

O mesmo modelo pode ser usado com diferentes visões (ou aplicações diferentes).

Confiabilidade: modelo pronto e testado

Confiabilidade: modelo pronto e testado

Clareza e Modularidade de projeto.

Clareza e Modularidade de projeto.

Manutenção facilitada

Manutenção facilitada

Torna o sistema mais flexível, de modo que partes podem ser

alteradas independentemente.

• Necessário apenas a definição da interface contratual a ser usada.Necessário apenas a definição da interface contratual a ser usada.

Qualquer alteração em uma determinada camada não influi nas

demais, desde que o mecanismo de comunicação entre elas

permanece inalterado.

(4)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

4

4

Projetar software é uma tarefa difícil. A maioria dos projetistas é capaz

Projetar software é uma tarefa difícil. A maioria dos projetistas é capaz

de compreender conceitos como classes, objetos, interfaces e herança.

de compreender conceitos como classes, objetos, interfaces e herança.

O desafio reside em aplicá-los para construir software flexível e

O desafio reside em aplicá-los para construir software flexível e

reutilizável.

reutilizável.

Projetistas novatos tendem a se perder com as muitas opções

Projetistas novatos tendem a se perder com as muitas opções

disponíveis e a recorrer a técnicas não orientadas a objetos com as

disponíveis e a recorrer a técnicas não orientadas a objetos com as

quais têm certa familiaridade.

quais têm certa familiaridade.

Projetistas experientes, por sua vez, tendem a fazer bons projetos. Eles

Projetistas experientes, por sua vez, tendem a fazer bons projetos. Eles

sabem que não se deve resolver todo e qualquer problema partindo de

sabem que não se deve resolver todo e qualquer problema partindo de

princípios básicos (classes, objetos, herança, relacionamentos,

princípios básicos (classes, objetos, herança, relacionamentos,

agregação,...).

agregação,...).

Ao contrário, deve-se buscar reutilizar soluções que funcionaram no

Ao contrário, deve-se buscar reutilizar soluções que funcionaram no

passado. Esta é a motivação para o estudo de padrões de projeto, ou

passado. Esta é a motivação para o estudo de padrões de projeto, ou

design patterns

design patterns

.

.

(5)

Assim, um padrão é um par nomeado problema/solução, que pode

Assim, um padrão é um par nomeado problema/solução, que pode

ser utilizado em novos contextos, com orientações sobre com

ser utilizado em novos contextos, com orientações sobre com

utilizá-lo em novas situações.

utilizá-lo em novas situações.

Padrões são destilações de sabedoria acumulada, fornecendo

Padrões são destilações de sabedoria acumulada, fornecendo

um jargão-padrão e nomeando os conceitos que praticantes

um jargão-padrão e nomeando os conceitos que praticantes

experimentados aplicam.

experimentados aplicam.

Cada padrão sistematicamente nomeia, explica e avalia um

Cada padrão sistematicamente nomeia, explica e avalia um

importante projeto que ocorre repetidamente em sistemas OO.

importante projeto que ocorre repetidamente em sistemas OO.

O objetivo de um

O objetivo de um

design pattern

design pattern

é registrar uma experiência no projeto

é registrar uma experiência no projeto

de software OO, na forma de um padrão passível de ser efetivamente

de software OO, na forma de um padrão passível de ser efetivamente

utilizado por projetistas.

utilizado por projetistas.

Um projetista familiarizado com padrões de projeto pode aplicá-los

Um projetista familiarizado com padrões de projeto pode aplicá-los

diretamente a problemas de projeto sem ter que redescobrir

diretamente a problemas de projeto sem ter que redescobrir

abstrações e os objetos que as capturam.

(6)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

6

6

Em geral, um padrão tem quatro elementos essenciais:

Em geral, um padrão tem quatro elementos essenciais:

Nome

Nome

: identificação de uma ou duas palavras, que se possa utilizar

: identificação de uma ou duas palavras, que se possa utilizar

para descrever o problema de projeto, suas soluções e

para descrever o problema de projeto, suas soluções e

conseqüências.

conseqüências.

Problema

Problema

: descreve quando aplicar o padrão. Explica o problema

: descreve quando aplicar o padrão. Explica o problema

de projeto e seu contexto.

de projeto e seu contexto.

Solução

Solução

: descreve os elementos que compõem o projeto, seus

: descreve os elementos que compõem o projeto, seus

relacionamentos, responsabilidades e colaborações.

relacionamentos, responsabilidades e colaborações.

Não

Não

descreve

descreve

um particular projeto concreto ou implementação.

um particular projeto concreto ou implementação.

Um padrão provê uma descrição abstrata de um problema de projeto e

Um padrão provê uma descrição abstrata de um problema de projeto e

como uma organização geral de classes e objetos resolve este problema.

como uma organização geral de classes e objetos resolve este problema.

Conseqüências

Conseqüências

: são os resultados e os comprometimentos feitos

: são os resultados e os comprometimentos feitos

ao se aplicar o padrão, tais como, bibliotecas de classes necessárias,

ao se aplicar o padrão, tais como, bibliotecas de classes necessárias,

que problemas acarreta, etc.

(7)

A sigla “GoF”

A sigla “GoF”

Gang of Four”

Gang of Four”

Apelido carinhoso pela qual o quarteto Erich Gamma,

Apelido carinhoso pela qual o quarteto Erich Gamma,

Richard Helm, Ralph Johnson e John Vlissides ficou

Richard Helm, Ralph Johnson e John Vlissides ficou

conhecido quando escreveram o livro “Design

conhecido quando escreveram o livro “Design

Patterns”, no início da década de 90

Patterns”, no início da década de 90

Neste livro, os quatro dividiram um conjunto de 23

Neste livro, os quatro dividiram um conjunto de 23

padrões em 3 grupos:

padrões em 3 grupos:

Estruturais:

Estruturais:

lidam com maneiras de se compor

lidam com maneiras de se compor

objetos.

objetos.

Comportamentais:

Comportamentais:

caracterizam formas de

caracterizam formas de

interação entre objetos.

interação entre objetos.

(8)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

8

(9)

Observer

Observer

Observador

Observador

Intenção

Intenção

Definir uma dependência um-para-muitos entre objetos de

Definir uma dependência um-para-muitos entre objetos de

forma que quando um objeto muda de estado, todos seus

forma que quando um objeto muda de estado, todos seus

dependentes são notificados e atualizados automaticamente.

dependentes são notificados e atualizados automaticamente.

Aplicação

Aplicação

Mudar um objeto causando mudanças em outros objetos,

Mudar um objeto causando mudanças em outros objetos,

sendo que não se sabe a priori quantos objetos precisam ser

sendo que não se sabe a priori quantos objetos precisam ser

mudados.

mudados.

Fazer um objeto notificar outros objetos de que seu estado

Fazer um objeto notificar outros objetos de que seu estado

mudou, sem assumir nada sobre os outros objetos.

mudou, sem assumir nada sobre os outros objetos.

Exemplo:

Exemplo:

Fundos múltiplos investem em ações, de modo que quando o preço de

Fundos múltiplos investem em ações, de modo que quando o preço de

uma ação muda, todos os fundos que investem nessa açao são

uma ação muda, todos os fundos que investem nessa açao são

afetados.

(10)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

10

(11)
(12)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 12 12

MVC

MVC

Com o aumento da complexidade das aplicações

Com o aumento da complexidade das aplicações

desenvolvidas torna-se fundamental a separação entre os

desenvolvidas torna-se fundamental a separação entre os

dados (

dados (

Model

Model

) e o layout (

) e o layout (

View

View

).

).

Desta forma, alterações feitas no layout não afetam a

Desta forma, alterações feitas no layout não afetam a

manipulação de dados, e estes poderão ser reorganizados sem

manipulação de dados, e estes poderão ser reorganizados sem

alterar o layout.

alterar o layout.

Um dos primeiros padrões identificados na área de software foi

Um dos primeiros padrões identificados na área de software foi

o modelo MVC:

o modelo MVC:

Model (Modelo)

Model (Modelo)

View (Visão)

View (Visão)

(13)

Motivação:

Motivação:

(14)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

14

14

Diferença

Diferença

Separação em camadas

Separação em camadas

Relacionamento entre as camadas

Relacionamento entre as camadas

Separado em camadas, é possível

Separado em camadas, é possível

estabelecer interação.

(15)

Model:

Model:

responsável pelo armazenamento e

responsável pelo armazenamento e

manutenção dos dados utilizados pela aplicação.

manutenção dos dados utilizados pela aplicação.

Modelo de classes proveniente da fase de análise

Modelo de classes proveniente da fase de análise

View:

View:

é a camada responsável pela interface com

é a camada responsável pela interface com

o usuário.

o usuário.

Controller: t

Controller: t

rata os eventos de interação com o

rata os eventos de interação com o

usuário e, normalmente, invoca as mudanças no

usuário e, normalmente, invoca as mudanças no

modelo.

(16)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

16

16

Relação entre

Relação entre

Model, View e

Model, View e

Controller

Controller

Linhas sólidas

Linhas sólidas

indicam associação

indicam associação

direta / Chamada

direta / Chamada

de métodos

de métodos

Linhas tracejadas

Linhas tracejadas

indicam associação

indicam associação

indireta / Eventos

(17)
(18)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 18 18

Funcionamento:

Funcionamento:

A visão

A visão

Parte usada para transformar e preparar os dados do

Parte usada para transformar e preparar os dados do

modelo para que possam ser apresentados de

modelo para que possam ser apresentados de

alguma forma (HTML, swing etc).

alguma forma (HTML, swing etc).

O controlador retira os dados do modelo e os entrega

O controlador retira os dados do modelo e os entrega

para a visão (ou retira dados da interface e alimenta

para a visão (ou retira dados da interface e alimenta

o modelo).

o modelo).

Esta, por sua vez, alimenta templates com estes

Esta, por sua vez, alimenta templates com estes

dados para que possam ser apresentados ao usuário.

dados para que possam ser apresentados ao usuário.

Além disso, efetua-se algum tratamento do tipo:

Além disso, efetua-se algum tratamento do tipo:

Verificação de campos obrigatórios

Verificação de campos obrigatórios

(19)

O modelo

O modelo

Parte que encapsula os dados da aplicação.

Parte que encapsula os dados da aplicação.

Fornecer rotinas para administrar e manipular dados.

Fornecer rotinas para administrar e manipular dados.

Deve conter métodos para adicionar, eliminar e atualizar

Deve conter métodos para adicionar, eliminar e atualizar

informações dos objetos na base de dados.

informações dos objetos na base de dados.

Também deve conter métodos para obter a lista de objetos

Também deve conter métodos para obter a lista de objetos

existentes.

existentes.

De modo geral, a técnica de acesso aos dados deve ser

De modo geral, a técnica de acesso aos dados deve ser

encapsulada no modelo.

encapsulada no modelo.

Desta forma, se uma aplicação for transferida de um

Desta forma, se uma aplicação for transferida de um

sistema que usa banco de dados para um sistema que usa

sistema que usa banco de dados para um sistema que usa

arquivos texto para guardar as informações, o único

arquivos texto para guardar as informações, o único

elemento que precisa ser alterado será o modelo

elemento que precisa ser alterado será o modelo

(20)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

20

20

O controlador

O controlador

Responsável pelas respostas às ações dos

Responsável pelas respostas às ações dos

usuários.

usuários.

No caso de uma aplicação desktop, uma

No caso de uma aplicação desktop, uma

ação de usuário (geralmente) é a solicitação

ação de usuário (geralmente) é a solicitação

de uma consulta aos dados de um cliente.

de uma consulta aos dados de um cliente.

O controlador é acionado pela Visão e vai

O controlador é acionado pela Visão e vai

responder de acordo, fazendo com que o

responder de acordo, fazendo com que o

Modelo manipule os dados necessários

Modelo manipule os dados necessários

(consulta o cliente no banco e monta o

(consulta o cliente no banco e monta o

objeto que o representa).

(21)

Estrutura

Estrutura

Modelo

Visão

Controle

Eventos

Invoca os métodos públicos

Invoca os métodos públicos para

pesquisa o estado do modelo

Estimula o sistema

Acessa a base de dados

Invoca Métodos

Notifica a Visão

(22)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

22

22

(23)

Onde colocar regras de negócio?

Onde colocar regras de negócio?

A)No Controller, deixando o Model apenas como

A)No Controller, deixando o Model apenas como

representação do negócio (objetos com get e

representação do negócio (objetos com get e

set)

set)

B)Fazer com que o Model seja representação do

B)Fazer com que o Model seja representação do

negócio unido com as regras da aplicação

negócio unido com as regras da aplicação

também (por exemplo, uma lógica de venda), e

também (por exemplo, uma lógica de venda), e

o Controller fica encarregado apenas de

o Controller fica encarregado apenas de

controlar o fluxo entre as camadas.

controlar o fluxo entre as camadas.

Dica: usar B.

Dica: usar B.

(24)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

24

24

Desvantagens

Desvantagens

Complexidade adicional, só justificável

Complexidade adicional, só justificável

em aplicações de médio e grande

em aplicações de médio e grande

porte.

porte.

Não é aconselhável para pequenas

Não é aconselhável para pequenas

aplicações.

aplicações.

Requer uma quantidade maior de

Requer uma quantidade maior de

tempo para analisar e modelar o

tempo para analisar e modelar o

sistema.

sistema.

(25)

Ver códigos:

Ver códigos:

MVC1

MVC1

http://www.dsc.ufcg.edu.br/~jacques/cursos/map

http://www.dsc.ufcg.edu.br/~jacques/cursos/map

/html/arqu/mvc/mvc.htm

(26)

8.1 Transformação de

8.1 Transformação de

classes de análise em

classes de análise em

classes de projeto

classes de projeto

(27)

Especificação de classes de

Especificação de classes de

fronteira

fronteira

N

N

ão devemos atribuir a essas classes responsabilidades

ão devemos atribuir a essas classes responsabilidades

relativas à lógica do negócio.

relativas à lógica do negócio.

Classes de fronteira devem apenas servir como um ponto de

Classes de fronteira devem apenas servir como um ponto de

captação de informações, ou de apresentação de informações

captação de informações, ou de apresentação de informações

que o sistema processou.

que o sistema processou.

A única inteligência que essas classes devem ter é a que

A única inteligência que essas classes devem ter é a que

permite a elas realizarem a comunicação com o ambiente do

permite a elas realizarem a comunicação com o ambiente do

sistema.

sistema.

Há diversas razões para isso

Há diversas razões para isso

:

:

Em primeiro lugar, se o sistema tiver que ser implantado em

Em primeiro lugar, se o sistema tiver que ser implantado em

outro ambiente, as modificações resultantes sobre seu

outro ambiente, as modificações resultantes sobre seu

funcionamento propriamente dito seriam mínimas.

funcionamento propriamente dito seriam mínimas.

Além disso, o sistema pode dar suporte a diversas formas de

Além disso, o sistema pode dar suporte a diversas formas de

interação com seu ambiente (e.g., uma interface gráfica e uma

interação com seu ambiente (e.g., uma interface gráfica e uma

interface de texto).

interface de texto).

(28)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 28 28

Especificação de classes de

Especificação de classes de

fronteira

fronteira

Durante a análise, considera-se que há uma única classe de

Durante a análise, considera-se que há uma única classe de

fronteira para cada ator.

fronteira para cada ator.

No projeto, algumas dessas classes podem resultar em várias

No projeto, algumas dessas classes podem resultar em várias

outras.

outras.

Dois tipos:

Dois tipos:

Interface com

Interface com

seres humanos:

seres humanos

:

projeto da interface gráfica

projeto da interface gráfica

produz o

produz o

detalhamento das classes.

detalhamento das classes.

Outros sistemas

Outros sistemas

ou equipamentos

ou

equipamentos:

: devemos

devemos definir uma ou mais

definir uma ou mais

classes para encapsular o protocolo de comunicação.

classes para encapsular o protocolo de comunicação.

É usual a definição de um

É usual a definição de um

subsistema

subsistema

para representar a comunicação

para representar a comunicação

com outros sistemas de software ou com equipamentos.

com outros sistemas de software ou com equipamentos.

É comum nesse caso o uso do padrão Façade (mais adiante)

É comum nesse caso o uso do padrão Façade (mais adiante)

O projeto de objetos de fronteira é altamente dependente da

O projeto de objetos de fronteira é altamente dependente da

natureza do ambiente...

(29)

Especificação de classes de

Especificação de classes de

fronteira

fronteira

Clientes WEB clássicos

Clientes WEB clássicos

Classe

C

lasses

s

de fronteira são

de fronteira

são representada

representadas

s

por páginas HTML que, m

por páginas HTML

que, m

uitas

uitas

vezes,

vezes, representam

representam sites

sites dinâmic

dinâmico

os

s.

.

Clientes móveis

Clientes móveis

Classes de fronteira implement

C

lasses de fronteira implementa

am algum protocolo específico com o

m algum protocolo específico com o

ambiente.

ambiente.

Um exemplo é a WML (Wireless Markup Language).

Um exemplo é a WML (Wireless Markup Language).

Clientes stand-alone

Clientes stand-alone

Nesse caso, é recomendável que os desenvolvedores pesquisem os

Nesse caso, é recomendável que os desenvolvedores pesquisem os

recursos fornecidos pelo ambiente de programação sendo utilizado.

recursos fornecidos pelo ambiente de programação sendo utilizado.

Um exemplo disso é o Swing/JFC da linguagem Java.

Um exemplo disso é o Swing/JFC da linguagem Java.

Serviços WEB

Serviços WEB

(

(

WEB services

WEB services

)

)

Um serviço WEB é um uma forma de permitir que uma aplicação

Um serviço WEB é um uma forma de permitir que uma aplicação

forneça seus serviços (funcionalidades) através da Internet.

(30)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 30 30

Especificação de classes de

Especificação de classes de

entidade

entidade

A maioria das classes de entidade normalmente permanece na

A maioria das classes de entidade normalmente permanece na

passagem da análise ao projeto.

passagem da análise ao projeto.

Na verdade, classes de entidade são normalmente as primeiras classes

Na verdade, classes de entidade são normalmente as primeiras classes

a serem identificadas, na

a serem identificadas, na

análise de domínio

análise de domínio

.

.

Durante

Durante

o

o

projeto,

projeto,

um

um

aspecto importante a considerar sobre

aspecto importante a considerar sobre

classes de entidade é identificar quais delas geram objetos que

classes de entidade é identificar quais delas geram objetos que

devem ser

devem ser

persistentes

persistentes

.

.

Para essas classes, o seu mapeamento para algum mecanismo de

Para essas classes, o seu mapeamento para algum mecanismo de

armazenamento persistente deve ser definido

armazenamento persistente deve ser definido

(mais adiante).

(mais adiante)

.

Um aspecto importante é a forma

Um aspecto importante é a forma

de

de

representar associações,

representar associações,

agregações e composições entre objetos

agregações e composições entre objetos

de entidade

de entidade

.

.

Essa representação é função da

Essa representação é função da

navegabilidade

navegabilidade

e da multiplidade

e da

multiplidade

definidas para a associação (

(31)

Especificação de classes de

Especificação de classes de

entidade

entidade

Outro aspecto relevante

Outro aspecto relevante

para

para

classe

classe

s

s

de entidade

de entidade

é

é

modo como

modo como

podemos identificar cada um de seus objetos unicamente.

podemos identificar cada um de seus objetos unicamente.

Isso porque, principalmente em sistemas de informação, objetos de

Isso porque, principalmente em sistemas de informação, objetos de

entidade devem ser armazenados de modo

entidade devem ser armazenados de modo

persistente.

persistente

.

Por exemplo, um objeto da classe Aluno é unicamente identificado pelo

Por exemplo, um objeto da classe Aluno é unicamente identificado pelo

valor de sua matrícula (um atributo do domínio).

valor de sua matrícula (um atributo do domínio).

A manipulação dos diversos atributos identificadores possíveis em

A manipulação dos diversos atributos identificadores possíveis em

uma classes pode ser bastante trabalhosa.

uma classes pode ser bastante trabalhosa.

Para evitar isso, um

Para evitar isso, um

identificador de implementação

identificador de implementação

é criado

é criado

,

,

que não tem correspondente com atributo algum do domínio.

que não tem correspondente com atributo algum do domínio.

P

P

ossibilidade de manipular identificadores de maneira uniforme e

ossibilidade de manipular identificadores de maneira uniforme e

eficiente.

eficiente.

(32)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 32 32

Especificação de classes de

Especificação de classes de

controle

controle

Com relação às classes de controle, no projeto devemos identificar a real

Com relação às classes de controle, no projeto devemos identificar a real

utilidade das mesmas.

utilidade das mesmas.

Em casos de uso simples (e.g., manutenção de dados), classes de controle não

Em casos de uso simples (e.g., manutenção de dados), classes de controle não

são realmente necessárias.

são realmente necessárias.

Neste caso, classes de fronteira podem repassar os dados fornecidos pelos

Neste caso, classes de fronteira podem repassar os dados fornecidos pelos

atores diretamente para as classes de entidade correspondentes. (não

atores diretamente para as classes de entidade correspondentes. (não

recomendado, somente em casos extremos => eficiência!)

recomendado, somente em casos extremos => eficiência!)

Entretanto, é comum a situação em que uma classe de controle de análise

Entretanto, é comum a situação em que uma classe de controle de análise

ser transformada em duas ou mais classes no nível de projeto.

ser transformada em duas ou mais classes no nível de projeto.

Objetivo

Objetivo

: de evitar a criação de uma única classe com baixa coesão e

:

de evitar a criação de uma única classe com baixa coesão e

alto acoplamento.

alto acoplamento.

No refinamento de qualquer classe proveniente da análise, aplicar padrões

No refinamento de qualquer classe proveniente da análise, aplicar padrões

de projeto (

(33)

Especificação de classes de

Especificação de classes de

controle

controle

Um tipo comum de controlador é o

Um tipo comum de controlador é o

controlador de caso

controlador de caso

de uso

de uso

,

,

responsável pela coordenação da realização de um

responsável pela coordenação da realização de um

caso de uso.

caso de uso.

As

As

seguintes responsabilidades são esperadas de um

seguintes responsabilidades são esperadas de um

controlador de caso de uso:

controlador de caso de uso:

C

C

oordenar a realização de um caso de uso do sistema.

oordenar a realização de um caso de uso do sistema.

S

S

ervir como canal de comunicação entre objetos de fronteira e

ervir como canal de comunicação entre objetos de fronteira e

objetos de entidade.

objetos de entidade.

S

S

e comunicar com outros controladores, quando necessário.

e comunicar com outros controladores, quando necessário.

M

M

apear ações do usuário (ou atores de uma forma geral) para

apear ações do usuário (ou atores de uma forma geral) para

atualizações ou mensagens a serem enviadas a objetos de

atualizações ou mensagens a serem enviadas a objetos de

entidade.

entidade.

E

E

star apto a manipular exceções provenientes das classes de

star apto a manipular exceções provenientes das classes de

entidades.

(34)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 34 34

Especificação de classes de

Especificação de classes de

controle

controle

Alguns exemplos dos aspectos de uma aplicação

Alguns exemplos dos aspectos de uma aplicação

cuja coordenação é de responsabilidade das

cuja coordenação é de responsabilidade das

classes de controle

classes de controle

:

:

produção de valores para

produção de valores para

preenchimento de controles

preenchimento de controles

da interface gráfica,

da interface gráfica,

autenticação de usuários,

autenticação de usuários,

(35)

Especificação de outras

Especificação de outras

classes

classes

Além do refinamento de classes preexistentes, diversas

Além do refinamento de classes preexistentes, diversas

outros aspectos demanda a identificação de novas classe

outros aspectos demanda a identificação de novas classe

durante o projeto.

durante o projeto.

Persistência de objetos

Persistência de objetos

Distribuição e comunicação (e.g., RMI, CORBA, DCOM, WEB)

Distribuição e comunicação (e.g., RMI, CORBA, DCOM, WEB)

Autenticação/Autorização

Autenticação/Autorização

Logging

Logging

Configurações

Configurações

Threads

Threads

Classes para testes (

Classes para testes (

Test Driven Development

Test Driven Development

)

)

Uso de

Uso de

bibliotecas

bibliotecas

,

,

componentes

componentes

e

e

frameworks

frameworks

Conclusão: a tarefa de identificação (reuso?) de classes

Conclusão: a tarefa de identificação (reuso?) de classes

não

não

termina na análise.

(36)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 36 36

Façade

Façade

Fachada

Fachada

Provê uma interface unificada para um conjunto de classes em um

Provê uma interface unificada para um conjunto de classes em um

subsistema.

subsistema.

Define uma interface de nível mais alto para o subsistema,

Define uma interface de nível mais alto para o subsistema,

tornando-o mais fácil de ser usado.

tornando-o mais fácil de ser usado.

Facilita o trabalho em subsistemas pois são fornecidas as

Facilita o trabalho em subsistemas pois são fornecidas as

interfaces de cada subsistema.

interfaces de cada subsistema.

Facilita a utilização do sistema: Cliente só precisa conhecer a fachada.

Facilita a utilização do sistema: Cliente só precisa conhecer a fachada.

Promove acoplamento fraco:

Promove acoplamento fraco:

Pequenas mudanças no subsistema não mais afetam o cliente.

Pequenas mudanças no subsistema não mais afetam o cliente.

A manutenção também é facilitada!!!

A manutenção também é facilitada!!!

Facade serve para abstrair complexas chamadas de métodos em

Facade serve para abstrair complexas chamadas de métodos em

diversos componentes, facilitando o acesso a um conjunto

diversos componentes, facilitando o acesso a um conjunto

funcionalidades agrupadas. Ele permite que você consiga criar

funcionalidades agrupadas. Ele permite que você consiga criar

uma interface de simples acesso ao sistema, de fora pra dentro.

(37)

Problema:

Problema:

Existem circunstâncias onde é necessário

Existem circunstâncias onde é necessário

utilizar diversas classes diferentes para que

utilizar diversas classes diferentes para que

uma tarefa possa ser completada.

uma tarefa possa ser completada.

Caracteriza uma situação onde uma classe

Caracteriza uma situação onde uma classe

cliente necessita utilizar objetos de um

cliente necessita utilizar objetos de um

conjunto específico de classes utilitárias que,

conjunto específico de classes utilitárias que,

em conjunto, compõem um subsistema

em conjunto, compõem um subsistema

particular ou que representam o acesso a

particular ou que representam o acesso a

diversos subsistemas distintos.

(38)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

38

(39)

Solução

Solução

O

O

Facade

Facade

é um padrão que pode apresentar infinidades

é um padrão que pode apresentar infinidades

de formas de representá-lo.

de formas de representá-lo.

O que importa para este padrão é que o Cliente apenas

O que importa para este padrão é que o Cliente apenas

acesse objetos da classe

acesse objetos da classe

Facade

Facade

, esperando algum

, esperando algum

resultado vindo dela.

resultado vindo dela.

A classe

A classe

Facade

Facade

é que terá a responsabilidade de entrar

é que terá a responsabilidade de entrar

em contato com as diversas instâncias dentro deste

em contato com as diversas instâncias dentro deste

sistema, efetuar possíveis cálculos vindos de classes

sistema, efetuar possíveis cálculos vindos de classes

abaixo dela e retornar as respostas que o cliente pediu.

(40)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

40

(41)
(42)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

42

(43)

Implementação:

Implementação:

Implementar um

Implementar um

Facade

Facade

demanda

demanda

definir um conjunto de operações

definir um conjunto de operações

reduzidas que permita ocultar a

reduzidas que permita ocultar a

complexidade inerente à utilização de

complexidade inerente à utilização de

várias classes de um subsistema.

(44)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

44

44

Exemplo:

Exemplo:

O cliente necessita consultar várias entidades a fim de saber

O cliente necessita consultar várias entidades a fim de saber

se têm condições de receber um empréstimo. Para isso,

se têm condições de receber um empréstimo. Para isso,

normalmente, o cliente teria que conhecer toda a

normalmente, o cliente teria que conhecer toda a

complexidade envolvida com as regras de concessão de

complexidade envolvida com as regras de concessão de

empréstimos e aprende-las, no entanto, nada melhor do que

empréstimos e aprende-las, no entanto, nada melhor do que

deixar isso a cargo de quem já está no sistema, no caso o

deixar isso a cargo de quem já está no sistema, no caso o

Facade

Facade

, que irá se preocupar em colher dados das diferentes

, que irá se preocupar em colher dados das diferentes

classes que podem decidir sobre a possibilidade do

classes que podem decidir sobre a possibilidade do

empréstimo e retornará esta informação pronta para o

empréstimo e retornará esta informação pronta para o

cliente.

cliente.

FacadeApp

FacadeApp

é o cliente que busca informações que podem vir

é o cliente que busca informações que podem vir

de vários de subsistemas,

de vários de subsistemas,

Facade

Facade

é a classe responsável por

é a classe responsável por

acessar os subsistemas e trazer respostas de forma

acessar os subsistemas e trazer respostas de forma

transparente a quem esteja acessando o

transparente a quem esteja acessando o

Facade

Facade

.

.

Banco

Banco

,

,

Emprestimo

Emprestimo

,

,

Crédito

Crédito

e

e

Consumidor

Consumidor

são classes pertencentes

são classes pertencentes

aos subsistemas.

(45)
(46)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

46

(47)

/* Complex parts */ class CPU {

public void freeze() { ... }

public void jump(long position) { ... } public void execute() { ... }

}

class Memory {

public void load(long position, byte[] data) { ...

} }

class HardDrive {

public byte[] read(long lba, int size) { ...

} }

/* Facade */

class ComputerFacade {

public void startComputer() { cpu.freeze();

memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE)); cpu.jump(BOOT_ADDRESS); cpu.execute(); } } /* Client */ class You {

public static void main(String[] args) {

ComputerFacade facade = new ComputerFacade (); facade.startComputer();

} }

(48)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

48

48

Persistência em Bancos de Dados

Persistência em Bancos de Dados

Relacionais

Relacionais

Apresentação:

Apresentação:

5.2 - Mapeamento de objetos para o

5.2 - Mapeamento de objetos para o

modelo relacional - Cap12

modelo relacional - Cap12

(49)

MVC Estendido

MVC Estendido

A arquitetura MCV é um bom ponto de

A arquitetura MCV é um bom ponto de

partida.

partida.

Contudo, ela desconsidera um

Contudo, ela desconsidera um

importante componente: a gerência de

importante componente: a gerência de

dados.

dados.

Evolução do MVC:

Evolução do MVC:

(50)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

50

50

Duas formas complementares de agrupamento de classes em

pacotes:

•Pelo domínio do problema: aproveitando os

subsistemas definidos na fase de análise => Arquitetura

do Sistema

•Por estereótipos, tendo sido utilizados os estereótipos

propostos por Coad e Yourdon [Coad93].

Atendimento Cliente

Controle Acervo

Utilitario

pacote Utilitario, trata classes

reutilizáveis em outros contextos

(51)

Componente do Domínio do Problema (Model)

Componente do Domínio do Problema (Model)

:

:

corresponde aos subsistemas responsáveis por implementar

corresponde aos subsistemas responsáveis por implementar

diretamente os requisitos dos usuários; (classe de análise)

diretamente os requisitos dos usuários; (classe de análise)

Componente de Interação Humana (View)

Componente de Interação Humana (View)

:

:

corresponde aos subsistemas que implementam as interfaces

corresponde aos subsistemas que implementam as interfaces

com o usuário; (interface gráfica, texto)

com o usuário; (interface gráfica, texto)

Componente de Gerência de Tarefa (Controll)

Componente de Gerência de Tarefa (Controll)

:

:

corresponde aos subsistemas responsáveis por controlar e

corresponde aos subsistemas responsáveis por controlar e

coordenar tarefas; (casos de uso)

coordenar tarefas; (casos de uso)

Componente de Gerência de Dados

Componente de Gerência de Dados

:

:

corresponde aos subsistemas responsáveis pelo

corresponde aos subsistemas responsáveis pelo

armazenamento e recuperação de objetos (persistência dos

armazenamento e recuperação de objetos (persistência dos

objetos). (gravação em meio secundário – BD, arquivo texto)

objetos). (gravação em meio secundário – BD, arquivo texto)

(52)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi no Biancardi 52 52 DP_Controle Acervo GD_Controle Acervo IU_Controle Acervo UtilitarioPessoa (from Utilitario) GT_ControleAcervo UtilitarioInterfaceGrafica (from Utilitario)

(53)

Uso do p

Uso do p

adrão DAO

adrão DAO

O padrão DAO é uma forma de desacoplar as classes do negócio dos

O padrão DAO é uma forma de desacoplar as classes do negócio dos

aspectos relativos ao acesso e ao armazenamento persistente.

aspectos relativos ao acesso e ao armazenamento persistente.

DAO:

DAO

:

Data Access Object

Data Access Object

(Objeto de Acesso a Dados).

(Objeto de Acesso a Dados).

Nessa estratégia

Nessa estratégia

, um

, um

SSOO

SSOO

obtém acesso a objetos de negócio

obtém acesso a objetos de negócio

através de uma interface, a chamada

através de uma interface, a chamada

interface DAO

interface DAO

.

.

Classes que implementam essa interface transforma

Classes que implementam essa interface transforma

m

m

informações

informações

provenientes do mecanismo de armazenamento em objetos de negócio

provenientes do mecanismo de armazenamento em objetos de negócio

,

,

e vice-versa

e vice-versa

.

.

O SSOO

O SSOO

interage com o

interage com o

objeto DAO

objeto DAO

através de uma interface.

através de uma interface.

A implementação desse objeto simplesmente não faz diferença para a

A implementação desse objeto simplesmente não faz diferença para a

aplicação.

aplicação.

O objeto DAO isola completamente os seus clientes das particularidades

O objeto DAO isola completamente os seus clientes das particularidades

d

(54)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

54

54

Uso do p

Uso do p

adrão DAO

adrão DAO

(55)

Uso do p

Uso do p

adrão DAO

adrão DAO

public interface AlunoDAO

{

public void inserir(Aluno aluno)

throws AlunoDAOException;

public void atualizar(Aluno aluno)

throws AlunoDAOException;

public void remover(Aluno aluno)

throws AlunoDAOException;

public List<Aluno> encontrarTodos() throws AlunoDAOException;

public

Aluno

encontrarPorMatricula(String

matricula)

throws

AlunoDAOException;

public List<Aluno> encontrarPorTurma(int idTurma) throws AlunoDAOException;

Exemplo em linguagem Java de uma

Exemplo em linguagem Java de uma

InterfaceDAO

(56)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

56

(57)
(58)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

58

(59)
(60)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

60

60

(61)
(62)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

62

62

Outro exemplo de estrutura DAO:

Outro exemplo de estrutura DAO:

BaseSombra

{abstract} -expressao campos parametros camposParametros expressaoAtualiza criterio ordem tabela : String : String : String : String : String : String : String : String + + + + + + + + + + + + + + + setCriterio () setOrdem () setTabela () montaInstConsulta () montaInstConsultaQtd () montaInstAlterar () montaInstIncluir () executeInstSQLUpdate () executeInstSQLConsulta () abstract adicionaCampos () adicionaCamposCod () adicionaCamposCons () abstract adicionaParametros () abstract adicionaCamposParametros () adicionaParametrosCod () : v oid : v oid : v oid : v oid : v oid : v oid : v oid : v oid : ResultSet : v oid : v oid : v oid : v oid : v oid : v oid

Conexao

-conexao driv er nome senha url usuario : Connection : String : String : String : String : String + + + conectar () desconectar () getStatement () : v oid : v oid : Statement

(63)

<<from Uti l i tari o.Persistenci a>> BaseSombra {abstract} -expressao campos parametros camposParametros expressaoAtualiza criterio ordem tabela : String : String : String : String : String : String : String : String + + + + + + + + + + + + + + + setCriterio () setOrdem () setTabela () montaInstConsulta () montaInstConsultaQtd () montaInstAlterar () montaInstIncluir () executeInstSQLUpdate () executeInstSQLConsulta () abstract adicionaCampos () adicionaCamposCod () adicionaCamposCons () abstract adicionaParametros () abstract adicionaCamposParametros () adicionaParametrosCod () : v oid : v oid : v oid : v oid : v oid : v oid : v oid : v oid : ResultSet : v oid : v oid : v oid : v oid : v oid : v oid MDCampoGlobalSombra + inserir (CampoGlobal mdCampoGlobal) : v oid

MDTabGlobalSombra + + + + + +

inserir (MDTabGlobal mdTabGlobal) consultar (int codTalGlobal)

consulta (String nome)

alterar (MDTabelaGlobal mdTabGlobal) remov er (int codTabGlobal)

consultarTodas () : v oid : MDTabGlobal : MDTabGlobal : v oid : v oid : Array List FonteDeDadosSombra + + + + + +

inserir (FonteDeDados f onteDeDados) consultar (int codFD)

consultar (String nomeFD)

alterar (FonteDeDados f onteDeDados) remov er (int codFD)

consultarTodas () : v oid : FonteDeDados : FonteDeDados : v oid : v oid : Array List MapeamentoTabSombra + + + + +

inserir (MapeamentoTabela mapeamentoTabela) consultar (int codTabGlobal, int codFD)

consultar (int codTabLocal)

alterar (MapeamentoTabela mapeamentoTabela) remov er (int codTabLocal)

: v oid : MapeamentoTabela : MapeamentoTabela : v oid : v oid MDTabLocalSombra + + + + + +

inserir (MDTabLocal mdTabLocal) consultar (int codTalLocal)

consultar (String nome, int codFD) alterar (MDTabelaLocal mdTabLocal) remov er (int codTabLocal)

consultarTodas (int codFD)

: v oid : MDTabLocal : MDTabLocal : v oid : v oid : Array List MDCampoLocalSombra + +

inserir (MDCampoLocal mdCampoLocal) consultar (int codCampoLocal)

: v oid : MDCampoLocal MapeamentoCampoSombra + + + + +

inserir (MapeamentoTabela mapeamentoCampo) consultar (int codCampoGlobal, int codFD) consultar (int codCampoLocal)

alterar (MapeamentoCampo mapeamentoCampo) remov er (int codCampoLocal)

: v oid

: MapeamentoCampo : MapeamentoCampo : v oid

(64)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

64

64

Mostrar Exemplo:

Mostrar Exemplo:

MVC2

MVC2

http://blog.brasilacademico.com/2008/11/java-cr

http://blog.brasilacademico.com/2008/11/java-cr

iando-uma-aplicao-em-3-camadas.html

(65)

Uso de um f

Uso de um f

ramework ORM

ramework ORM

Um framework ORM é um conjunto de classes que realiza o

Um framework ORM é um conjunto de classes que realiza o

mapeamento

mapeamento

objeto-relacional de forma

objeto-relacional de forma

transparente.

transparente.

ORM

ORM

:

:

Object-Relational Mapping

Object-Relational Mapping

(mapeamento objeto-

(mapeamento

objeto-relacional).

relacional).

Os frameworks ORM tentam resolver o problema do

Os frameworks ORM tentam resolver o problema do

mapeamento objeto relacional através de

mapeamento objeto relacional através de

classes que o

classes que o

realizam de forma transparente.

realizam de forma transparente.

Normalmente

Normalmente

,

,

um framework

um framework

ORM demanda a definição d

ORM demanda a definição d

a

a

correspondência entre a

correspondência entre a

estrutura de objetos da aplicação

estrutura de objetos da aplicação

e

e

o

o

esquema relacional do banco de dados

esquema relacional do banco de dados

.

.

E

E

ssa correspondência é fornecida através de um arquivo de

ssa correspondência é fornecida através de um arquivo de

configuração, denominado

configuração, denominado

arquivo de mapeamento

arquivo de mapeamento

.

.

De posse dessa correspondência, o framework está apto a

De posse dessa correspondência, o framework está apto a

mapear qualquer requisição por uma informação armazenada

mapear qualquer requisição por uma informação armazenada

no SGBDR.

(66)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

66

66

Mostrar Exemplo:

Mostrar Exemplo:

(67)

Especificação de classes de

Especificação de classes de

controle

controle

Em aplicações WEB, é comum a prática de utilizar outro

Em aplicações WEB, é comum a prática de utilizar outro

tipo de objeto controlador chamado

tipo de objeto controlador chamado

front controller

front controller

(FC).

(FC).

Um FC é um controlador responsável por receber todas as

Um FC é um controlador responsável por receber todas as

requisições de um cliente.

requisições de um cliente.

O FC

O FC

identifica qual o controlador

identifica qual o controlador

(

(

de caso de uso)

de caso de uso)

adequado para processa

adequado para processa

r

r

a requisição

a requisição

, e a

, e a

despacha para

despacha para

ele.

ele.

Sendo assim, um FC é um ponto central de entrada para as

Sendo assim, um FC é um ponto central de entrada para as

funcionalidades do sistema.

funcionalidades do sistema.

Vantagem: m

Vantagem: m

ais fácil controlar a autenticação dos usuários.

ais fácil controlar a autenticação dos usuários.

O FC é um dos

O FC é um dos

padrões de projeto

padrões de projeto

do catálogo J2EE

do catálogo J2EE

http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontControlle

http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontControlle

r.html

(68)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

68

(69)

Mostrar Exemplo:

Mostrar Exemplo:

(70)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

70

(71)

Padrão BO

Padrão BO

Objeto de Negócios: Business Object

Objeto de Negócios: Business Object

Classe espelho do modelo que

Classe espelho do modelo que

contem somente as regras de

contem somente as regras de

negócio

negócio

Classe do modelo:

Classe do modelo:

Estrutura de informação: atributos, get,

Estrutura de informação: atributos, get,

set, construtor

(72)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

72

(73)
(74)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

74

74

Mostrar Exemplo:

Mostrar Exemplo:

(75)

Singleton

Singleton

Intenção:

Intenção:

Garantir que uma classe tenha somente

Garantir que uma classe tenha somente

uma instância e fornecer um ponto global

uma instância e fornecer um ponto global

de acesso à mesma.

de acesso à mesma.

Motivação

Motivação

Em muitas situações é necessário

Em muitas situações é necessário

garantir que algumas classes tenham

garantir que algumas classes tenham

uma e somente uma instância.

uma e somente uma instância.

Exemplo: o gerenciador de arquivos num

Exemplo: o gerenciador de arquivos num

sistema deve ser único; escalonadores;

sistema deve ser único; escalonadores;

gerenciadores de janelas.

(76)

Aplicações Desktop usando Java/NetBeans - Cristia

Aplicações Desktop usando Java/NetBeans - Cristia

no Biancardi

no Biancardi

76

76

Referências

Documentos relacionados

Na apresentação dos dados estatísticos, ficou demonstrada à todos os participantes a dimensão da pesquisa, abrangendo o setor produtivo como um todo, enfocando a produção

6.2 - Procedida à análise das Propostas, a Comissão de Seleção fará o julgamento das mesmas e comunicará o resultado aos proponentes através do Portal do Fornecedor, para que

Os Programas Integrais da Política de Assistência Estudantil do IFAM são compostos por um grupo de Programas, cujos Projetos estão voltados para as suas

No contexto de maus-tratos e negligência a idosos no âmbito intrafamiliar, existem sempre os fatores de risco, como a história de violência familiar, dependência (idoso fragilizado e

autoridades relevantes dos Estados-Membros em causa que confiram reciprocidade à medida finlandesa e que apliquem a mesma às carteiras de empréstimos hipotecários

Falla en la conexión del sensor con la solenóide Conectar el cabo solenóide al cabo del sensor El água no sale cuando el sensor es activado:. Válvula Solenóide produce

O conjunto destas características é utilizado na identificação de espécies de Trypanosoma, sendo particularmente útil na classificação de tripanossomas de

 Declaração de Cingapura sobre Integridade em Pesquisa, 2010  Código de Boas Práticas em Pesquisa da FAPESP, 2011.  Diretivas para a Integridade da Pesquisa do