Construção de Ambientes Virtuais
de Aprendizagem
Aula 02 – Estruturação de
Sistemas em Camadas
Separação de Preocupações
Sistemas com Misturas de Aspectos
Arquitetura em Camadas
Estruturação de Sistemas em Camadas
Separação de Preocupações
A base para a
estruturação de um
sistema em
Separação de Preocupações
A SEPARAÇÃO DE PREOCUPAÇÕES é
extremamente importante para o
desenvolvimento de sistemas, de forma geral
Precisamos, então, saber:
O seu conceito
O impacto que ela tem no desenvolvimento de
sistemas
A utilização do seu conceito no desenvolvimento
de sistemas
Código de NEGÓCIO
Código de GUI
Separação de Preocupações
04/08/2010 Construção de Ambientes Virtuais de
5
•
Consiste no processo de
quebrar a solução de um
problema em partes bem
definidas, as mais
independentes possíveis, de
modo a facilitar o
desenvolvimento da solução
•
Pode-se focar em cada
parte do problema
Separação de Preocupações
•
Para superar a
complexidade de um
sistema, deve-se
resolver uma questão –
PREOCUPAÇÃO –
importante por vez
Separação de Preocupações
Uma PREOCUPAÇÃO (concern) é uma parte do
problema que queremos tratar como uma
unidade conceitual única na solução do
software
Uma preocupação não deve ser nem mais nem
menos do que deveria ser
Cada preocupação deve ser logicamente bem
delimitada
Deve conter apenas atributos e comportamentos
Separação de Preocupações
Impactos – Fatores de Qualidade
MODULARIDADE
Preocupações podem ser tratadas nos módulos
(classes, pacotes, etc.)
Preocupações independentes permitem
desenvolvimento paralelo
Separação de Preocupações
Impactos – Fatores de Qualidade
REUSABILIDADE e EXTENSIBILIDADE
Módulos bem delimitados e com nenhuma ou
poucas dependências com outros módulos podem
ser facilmente reutilizados e estendidos
FACILIDADE DE ENTENDIMENTO
(LEGIBILIDADE)
Módulo com um propósito bem definido ajuda no
seu entendimento
FACILIDADE DE MANUTENÇÃO
Melhora a reusabilidade e extensibilidade
Facilita a detecção de módulos com bugs
Separação de Preocupações
Identificação e separação de preocupações pode ser
uma tarefa difícil dependendo da complexidade do
sistema
O conceito de preocupação é relativo a um
determinado problema
O que é uma preocupação em um sistema pode não ser
para outro
Nem sempre conseguimos separar a solução em
preocupações independentes (cross-cutting
concerns)
Novas técnicas tentam lidar com cross-cutting concerns
Separação de Preocupações
Deve-se separar as diferentes preocupações
Criar classes separadas para cada preocupação
Classes da GUI cuida do comportamento da
interface gráfica que, por sua vez, fazem
chamadas a objetos das classes de negócio
Classes de negócio cuida das regras do sistema,
das suas funcionalidades que, por sua vez, fazem
chamadas a objetos das classes de dados
Classes de dados cuidam do gerenciamento e
Sistemas com Mistura de Aspectos
Se quisermos
desenvolver aplicações
com qualidade,
precisamos aprender a
melhor estruturá-las
Arquitetura em Camadas
Os vários tipos de
código devem ser
escritos separadamente,
em classes e camadas
Arquitetura em Camadas
Interface com o usuário
Código para a APRESENTAÇÃO da aplicação
(entrada e saída de dados)
Comunicação
Código para permitir ACESSO REMOTO aos
serviços da aplicação
Negócio
Código INERENTE À APLICAÇÃO (funcionalidades,
regras do negócio
Dados
Arquitetura em Camadas
Benefícios
Modularidade (e seus benefícios)
Dividir para conquistar
Separação de preocupações (conceitos)
Reusabilidade e Extensibilidade
Mudanças em uma camada não afetam as outras,
desde que as interfaces sejam preservadas
Funcionalidade plug-and-play
Uma mesma versão de uma camada trabalhando com
diferentes versões de outra camada
Várias GUIs para a mesma aplicação
Vários mecanismos de persistência suportados pela mesma
aplicação
Várias plataformas de distribuição para acesso à mesma
Estruturação de Sistemas em Camadas
04/08/2010 Construção de Ambientes Virtuais de
35