engenharia de software alexandre vasconcelos, andré santos, augusto sampaio, hermano moura, paulo...
TRANSCRIPT
![Page 1: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/1.jpg)
Engenharia de SoftwareEngenharia de Software
Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura,
Paulo Borba
© Centro de InformáticaUniversidade Federal de Pernambuco
![Page 2: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/2.jpg)
Estruturação do Código em Estruturação do Código em CamadasCamadasPaulo Borba
Objetivo
Depois desta aula você será capaz de estruturar o seu código em camadas, de forma a obter melhor reuso e extensibilidade.
![Page 3: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/3.jpg)
Vendo o código como uma caixa Vendo o código como uma caixa preta...preta...
![Page 4: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/4.jpg)
Vendo o código como palavras Vendo o código como palavras cruzadas...cruzadas...
G D COMUNICAÇÃO I D NEGÓCIO S
![Page 5: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/5.jpg)
Vendo o código como um bolo... Vendo o código como um bolo... com várias camadas!com várias camadas!
Interface com o usuário(GUI)
Comunicação
Negócio
Dados
![Page 6: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/6.jpg)
Arquitetura em CamadasArquitetura em Camadas
Interface com o Usuário código para a apresentação da aplicação
Comunicação código para permitir acesso remoto aos serviços da
aplicação Negócio
código inerente à aplicação sendo desenvolvida Dados
código para acesso e manipulação de dados
![Page 7: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/7.jpg)
Bancoclientes : CadastroDeClientescontas : CadastroDeContas
<<Fachada>>
CadastroDeClientesclientes : ConjuntoDeClientes
<<Coleção de Negócio>>
ConjuntoDeClientes<<Interface Negócio-Dados>>
ConjuntoDeClientesPSE<<Coleção de Dados>>
ConjuntoDeClientesRelacional<<Coleção de Dados>>
Cliente<<Básica de Negócio>>
1..*1..*
armazena
Cliente<<Básica de Negócio>>
1..*1..*
armazena
Negócio
Dados
![Page 8: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/8.jpg)
Bancoclientes : CadastroDeClientescontas : CadastroDeContas
<<Fachada>>
MecanismoDePersistencia<<Interface>>
MecanismoDePersistenciaBDR
ConjuntoDeContasRelacional<<Coleção de Dados>>
ConjuntoDeClientesRelacional<<Coleção de Dados>>
Negócio
Dados
![Page 9: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/9.jpg)
IBanco<<Interface>>
Bancoclientes : CadastroDeClientescontas : CadastroDeContas
<<Fachada>>
BancoSourceRMIAdapter
BancoTargetRMIAdapter
IBancoTargetRMIAdapter<<Interface>>
Negócio
Comunicação
![Page 10: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/10.jpg)
Benefícios da Arquitetura em Benefícios da Arquitetura em CamadasCamadas
Modularidade e seus benefícios: Dividir para conquistar Separação de conceitos Reusabilidade Extensibilidade
Mudanças em uma camada não afetam as outras, desde que as interfaces sejam preservadas plug-and-play
![Page 11: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/11.jpg)
Benefícios da Arquitetura em Benefícios da Arquitetura em CamadasCamadas
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 a uma mesma aplicação
![Page 12: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/12.jpg)
Classes Básicas de NegócioClasses Básicas de Negócioclass Conta implements PersistentObject, Serializable {
private double saldo; private String numero; ... void creditar(double v) { saldo = saldo + v; } void update() {...} void access() {...}}
![Page 13: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/13.jpg)
Interfaces Negócio-DadosInterfaces Negócio-Dadosinterface ConjuntoDeContas { void inserir(Conta conta) throws RepositorioException, ContaInvalidaException; void atualizar(Conta conta) throws RepositorioException, ContaInvalidaException; void remover(String num) throws RepositorioException, ContaInvalidaException; Conta procurar(String num) throws RepositorioException; Conta getMaiorSaldo() throws RepositorioException; IteradorContas getIterador();}
![Page 14: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/14.jpg)
Classes Coleção de DadosClasses Coleção de Dados
class ConjuntoDeContasRelacional implements ConjuntoDeContas {
private MecanismoPersistencia base;
ConjuntoDeContasRelacional(MecanismoDePersistencia mp){ base = mp; }
![Page 15: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/15.jpg)
Classes Coleção de DadosClasses Coleção de Dados
void inserir(Conta c) throws RepositorioException, ContaInvalidaException { try{ if (c != null) c.update(); else throw new ContaInvalidaException(); } catch (DBRuntimeException e) { throw new RepositorioException(); }}
![Page 16: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/16.jpg)
Classes Coleção de DadosClasses Coleção de Dados
void atualizar(Conta c) throws RepositorioException, ContaInvalidaException { Conta conta1; if (c != null)
try {conta1 = this.procurar(c.getNumero());conta1.atualizar(c);conta1.update();
} catch (DBRuntimeException e) { throw new RepositorioException();
} else throw new ContaInvalidaException();
}
![Page 17: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/17.jpg)
Classes Coleção de DadosClasses Coleção de DadosConta procurar(String num) throws RepositorioException { Conta c; try { c = (Conta) Extent.all("Conta").where("numero=” + num).element(); } catch (DBRuntimeException e) { throw new RepositorioException(); } return c;
}
![Page 18: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/18.jpg)
Classes Coleção de NegócioClasses Coleção de Negócioclass CadastroDeContas { private ConjuntoDeContas contas;
void CadastroDeContas(ConjuntoDeContas cContas) {contas = cContas;
}
void creditar(String num, double val) throws ContaInvalidaException, RepositorioException { Conta c = contas.procurar(num); c.creditar(val); contas.atualizar(c); }
![Page 19: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/19.jpg)
Classes Coleção de NegócioClasses Coleção de Negócio
void cadastrar(Conta c) throws ContaJaExisteException, ContaInvalidaException, RepositorioException { if (c!=null) { if (contas.existe(c.getNumero())) throw new ContaJaExisteException(); else contas.inserir(c); } else throw new ContaInvalidaException();
}
![Page 20: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/20.jpg)
Interface Mecanismo de Interface Mecanismo de PersistênciaPersistência
interface MecanismoPersistencia { boolean conectar() throws MecanismoPersistenciaException; boolean desconectar() throws MecanismoPersistenciaException; boolean iniciarTransacao() throws MecanismoPersistenciaException; boolean confirmarTransacao() throws MecanismoPersistenciaException; boolean cancelarTransacao() throws MecanismoPersistenciaException;}
![Page 21: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/21.jpg)
Classe Mecanismo de PersistênciaClasse Mecanismo de Persistência
class MecanismoPersistenciaBDR implements MecanismoPersistencia { MecanismoPersistenciaBDR (String tipoConexao, String url, String login, String senha, String classeDoDriver) throws MecanismoPersistenciaException { bd = new Database(tipoConexao,url,login,senha); try { Class.forName(classeDoDriver); } catch(DBRuntimeException e) {
throw new MecanismoPersistenciaException(); }
![Page 22: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/22.jpg)
Classe FachadaClasse Fachadaclass Banco { private CadastroDeContas contas; private MecanismoDePersistencia bd; ... AplicacaoBancaria (CadastroDeContas cadContas, ... MecanismoDePersistencia mp) {
contas = cadContas; ...bd = mp;
}
![Page 23: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/23.jpg)
Classe FachadaClasse Fachada
void creditar(String num, double val) throws ContaInexistenteException, RepositorioException { try { bd.iniciarTransacao(); contas.creditar(num,val); bd.confirmarTransacao(); } catch(MecanismoPersistenciaException e){ System.out.println(EXC_CONEXAO); bd.cancelarTransacao(); }}
![Page 24: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/24.jpg)
Interface da FachadaInterface da Fachada
public interface IBanco {
void creditar (String nConta, double valor) throws CommunicationException, ContaInexistenteException, RepositorioException; ...}
![Page 25: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/25.jpg)
Adaptador FonteAdaptador Fonte
Isola a GUI da camada de comunicação obtém referência ao objeto remoto delega invocação ao objeto remoto troca exceções RMI por exceção genérica
![Page 26: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/26.jpg)
public class BancoSourceRMIAdapter implements IBanco { private BancoTargetRMIAdapter banco;
public BancoSourceRMIAdapter() throws CommunicationException{ try { banco = (BancoTargetRMIAdapter) Naming.lookup("//www.di.ufpe.br:2120/BankServer"); } catch (Exception e) { e.printStackTrace(); throw new CommunicationException ( ); } }
Adaptador FonteAdaptador Fonte
![Page 27: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/27.jpg)
Adaptador FonteAdaptador Fonte
public void creditar(String nConta, double valor) throws CommunicationException, ContaInexistenteException { try { banco.creditar(nConta,valor); } catch (RemoteException e){ throw new CommunicationException(); } }
![Page 28: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/28.jpg)
Interface do Adaptador DestinoInterface do Adaptador Destino
public interface IBancoTargetRMIAdapter extends Remote{
void creditar(String nConta, double valor) throws CommunicationException, ContaInexistenteException, RemoteException; ...}
![Page 29: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/29.jpg)
Adaptador DestinoAdaptador Destino
Isola a camada de negócio da camada de comunicação faz papel de objeto remoto faz papel de inicializador delega invocação de método remoto a método
de negócio
![Page 30: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/30.jpg)
Adaptador DestinoAdaptador Destinopublic class BancoTargetRMIAdapter extends UnicastRemoteObject implements IBancoTargetRMIAdapter {
private IBanco banco;
public BancoTargetRMIAdapter() throws RemoteException, InicializacaoBancoException { banco = new Banco(); }
public void creditar(String nConta, double valor) throws RemoteException, CommunicationException, ContaInexistenteException { banco.creditar(nConta, valor); }
![Page 31: Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5d1b/html5/thumbnails/31.jpg)
Engenharia de SoftwareEngenharia de Software
Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura,
Paulo Borba
© Centro de InformáticaUniversidade Federal de Pernambuco