Organização do sistema em camadas Projeto -...

14
Ricardo Massa F. Lima [email protected] Sérgio C. B. Soares [email protected] Organização do sistema em camadas Projeto Introdução a Programação – IF669 http://www.cin.ufpe.br/~if669

Transcript of Organização do sistema em camadas Projeto -...

Ricardo Massa F. Lima [email protected]

Sérgio C. B. Soares [email protected]

Organização do sistema em camadas

Projeto

Introdução a Programação – IF669 http://www.cin.ufpe.br/~if669

Separação de Preocupações n  Separação de preocupações consiste em quebrar a

solução de um problema em independentes de modo a facilitar o desenvolvimento da solução –  focar em cada parte do problema individualmente

n  Princípio: para superar a complexidade de um sistema, deve-se resolver uma questão (ou preocupação) importante por vez

3

Dicas de bons sistemas O.O.

n  Modularizando o sistema

GUI Modelo Persistência

Entendimento Modular

Mudanças Modular

Desenvolvimento em Paralelo

4

Dicas de bons sistemas O.O.

n  Modularidade OK!

Persistência Modelo

GUI

Vendo o código como um bolo... com várias camadas!

Interface com o usuário (GUI)

Comunicação

Negócio

Dados

Arquitetura em camadas

n  Interface com o usuário –  código para apresentação da aplicação

n  Comunicação –  código de acesso remoto a aplicação

n  Negócio –  código inerente à aplicação sendo desenvolvida

n  Dados –  código para acesso e manipulação de dados

Benefícios da Arquitetura em Camadas

n  Modularidade e seus benefícios –  dividir para conquistar –  separação de interesses (separation of concerns) –  reusabilidade –  extensibilidade

n  Mudanças em uma camada não afetam as outras –  plug-and-play

Benefícios da Arquitetura em Camadas

n  Uma mesma versão de uma camada trabalhando com diferentes versões de outra camada: –  diferentes GUIs para a mesma aplicação –  diferentes mecanismos de persistência suportados

pela mesma aplicação –  diferentes plataformas de distribuição para acesso a

uma mesma aplicação –  combinações destes

§  GUIs diferentes usando plataformas de distribuição diferentes numa mesma aplicaçao

Classes Básicas de Negócio

public class Conta { private double saldo; private String numero; private Cliente correntista; ... public void creditar(double valor) { saldo = saldo + valor; } }

Cliente, Livro, Animal, Veiculo

public interface RepositorioContas { public void inserir(Conta conta); public void atualizar(Conta conta) throws ContaNaoEncontradaException; public void remover(String numero) throws ContaNaoEncontradaException; public Conta procurar(String numero) throws ContaNaoEncontradaException; public boolean existe(String numero); }

Interface Negócio-Dados

RepositorioClientes, RepositorioLivros RepositorioAnimais, RepositorioVeiculos

Classes Coleção de Dados

public class RepositorioContasArray implements RepositorioContas { private Conta[] contas; private int indice; public RepositorioContasArray(int tam) { contas = new Conta[tam]; ... } public void inserir(Conta conta) { contas[indice] = conta; indice = indice + 1; } ... } RepositorioContasLista, RepositorioContasBD,

RepositorioContasArquivo, RepositorioContasBDOO

Classes Coleção de Negócio

public class CadastroContas { private RepositorioContas contas; public CadastroContas(RepositorioContas rep) { contas = rep; } public void cadastrar(Conta conta) throws ContaJaCadastradaException { if (!contas.existe(conta.getNumero())) { contas.inserir(conta); } else throw ... } ... }

CadastroClientes, CadastroLivros, CadastroAnimais, CadastroVeiculos

Classe Fachada public class Banco { private CadastroContas contas; private CadastroClientes clientes; ... public void cadastrar(Conta conta) throws ClienteInvalidoException{ Cliente c = conta.getCorrentista(); if (clientes.existe(c.getCodigo()) { contas.cadastrar(conta); } else throw new Cliente... } ... }

Livraria, Zoo, Locadora

Requisitos do projeto

n  Equipe com 3-5 participantes n  Escolher temas na planilha que está na página da

disciplina n  Cada integrante deve fazer:

–  1 classe básica –  1 interface negócio-dados –  2 implementações da interface (array e lista) –  1 coleção de negócio (cadastro)

n  Junta tudo em uma fachada n  Testa a fachada em uma classe Programa com main

(testes fixos) n  Mais detalhes na página da disciplina