Post on 03-Mar-2021
Ricardo Massa F. Lima rmfl@cin.ufpe.br
Sérgio C. B. Soares scbs@cin.ufpe.br
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