Title: Vendo o c
1Vendo o código como um bolo... com várias camadas!
Interface com o usuário (GUI)
Comunicação
Negócio
Dados
2Arquitetura de software
GUI
Fachada
1..
servicos()
Negócio
1..
1..
Coleção de Negócio
servicosEspecificos()
ltltInterfacegtgt
Interface Negócio-dados
inserir()
remover()
atualizar()
procurar()
existe()
Dados
Coleção de dados
inserir()
remover()
atualizar()
procurar()
existe()
0..
Básica de negócio
getDado()
3Classes 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
4Interfaces Negócio-Dados
- public interface RepositorioContas
- public void inserir(Conta conta) throws ...
- public void atualizar(Conta conta) throws ...
- public void remover(String numero) throws ...
- public Conta procurar(String numero) throws
... - public RepositorioContas procurar(Conta conta)
- throws ...
- public boolean existe(String numero) throws
... - public IteratorContas getIterator() throws ...
-
RepositorioClientes, RepositorioLivros,
RepositorioAnimais, RepositorioVeiculos
5Interface Iterator
- public interface IteratorContas
- public boolean hasNext()
- public Conta next()
IteratorClientes, IteratorLivros,
IteratorAnimais, IteratorVeiculos
6Coleção de dados iterável
- public class IteratorContasArray
- implements IteratorContas
- private Conta contas
- private int proximo ...
- public IteratorContasArray(Conta conta) ...
- public void add(Conta conta) ...
- public boolean hasNext() ...
- public Conta next() ...
7Classes Coleção de Dados
public class RepositorioContasArray
implements RepositorioContas private Conta
contas private int indice public void
inserir(Conta conta) contasindice
conta indice indice 1 ...
RepositorioContasArquivo, RepositorioContasLista
RepositorioContasBDR, RepositorioContasBDOO
8Classes Coleção de Dados
public RepositorioContas procurar(Conta conta)
RepositorioContas resposta new
RepositorioContasArray() ... while(!achou
iltindice) if (conta.match(contasi))
resposta.inserir(contasi) ...
return resposta
9Classes Coleção de Dados
public IteratorContas getIterator()
IteratorContas resposta new
IteratorContasArray(contas) return resposta
10Método match
- public class Conta
- ...
- public boolean match(Conta conta)
- Correntista corr conta.getCorrentista()
- boolean resp false
- if (numero ! null correntista ! null)
- resp numero.equals(conta.getNumero())
- correntista.match(corr)
- else if (numero ! null)
- resp numero.equals(conta.getNumero())
- else if (correntista ! null)
- resp correntista.match(corr)
- return resp
-
11Classes 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 new
... ...
CadastroClientes, CadastroLivros,
CadastroAnimais, CadastroVeiculos
12Classe Fachada
public class Banco private CadastroContas
contas private CadastroClientes clientes
... public void cadastrar(Conta conta)
throws ClienteNaoCadastradoException
Cliente c conta.getCorrentista() if
(clientes.existe(c.getCodigo())
contas.cadastrar(conta) else throw
new ClienteNaoCadastradoException()
Livraria, Zoo, Locadora