View
250
Download
4
Category
Preview:
Citation preview
8/3/2019 MVC Aplicacoes Desktop
1/29
1
1 MVC (model-view-controller) Aplicaes Desktop
MVC (MODELO-VISO-CONTROLADOR)
Este tutorial tem como finalidade trazer os conceitos sobre MVC e mostra na prtica comofunciona em aplicaes desktop.
DefinioPadro de arquitetura de software que tem como finalidade separar a estrutura de dados
(modelo), da apresentao para o usurio (viso), das regras de negcio (controle).
FinalidadePossibilitar o reuso, facilitar a manuteno, atualizao, deteco e correo de erros.
EstruturaA estrutura do MVC se faz em trs camadas (Modelo, Viso e Controle).
MODELO
Representa o domnio da aplicao, a estrutura dos dados. Tambm pode representar a
manipulao dos dados (persistncia e consulta).
VISO
Representa a forma como os dados processados (informaes) sero apresentados ao
usurio (interface com o usurio).
CONTROLE
Representa o controle sobre o modelo e a viso, entre o usurio e a aplicao.
Encarregando-se de validar as regras de negcio.
ImplementaoVejamos na prtica como funciona.MODELO (Classe Pessoa e Cliente)
No modelo temos as classes de dados, que nos mostram a estrutura do sistema, seu domnio.Alm destas classes, alguns tambm implementam as classes de banco nesta camada, as classes DAO. Asclasses DAO so responsveis por realizarem as gravaes, atualizaes, remoes, alteraes e consultas nobanco. Neste tutorial veremos as classes DAO em um pacote separado.O exemplo abaixo mostra uma herana. Classe me (Pessoa) e classe filha (Cliente).
8/3/2019 MVC Aplicacoes Desktop
2/29
2
MVC (model-view-controller) Aplicaes Desktop
public abstract class Pessoa {
private int idPessoa;
private String nome,logradouro, bairro, numero, telefone, rg, orgaoEmissor, complemento;
public Pessoa(){ super();
// TODO Auto-generated constructor stub
}
public Pessoa(int idPessoa, String nome, String logradouro, String bairro, String numero, String telefone, String rg,
String orgaoEmissor, String complemento) {
super();
this.idPessoa = idPessoa;
this.nome = nome;
this.logradouro = logradouro;
this.bairro = bairro;
this.numero = numero;
this.telefone = telefone;
this.rg = rg;
this.orgaoEmissor = orgaoEmissor;
this.complemento = complemento;
}
public String getBairro() {
return bairro; }
public void setBairro(String bairro) {
this.bairro = bairro; }
public String getComplemento() {
return complemento; }
public void setComplemento(String complemento) {
this.complemento = complemento; }
public int getIdPessoa() {
return idPessoa; }
public void setIdPessoa(int idPessoa) {
this.idPessoa = idPessoa; }
public String getLogradouro() {
return logradouro; }
public void setLogradouro(String logradouro) {
8/3/2019 MVC Aplicacoes Desktop
3/29
3
MVC (model-view-controller) Aplicaes Desktop
this.logradouro = logradouro; }
public String getNome() {
return nome; }
public void setNome(String nome) {
this.nome = nome; }
public String getNumero() {
return numero; }
public void setNumero(String numero) {
this.numero = numero; }
public String getOrgaoEmissor() {return orgaoEmissor; }
public void setOrgaoEmissor(String orgaoEmissor) {
this.orgaoEmissor = orgaoEmissor; }
public String getRg() {
return rg; }
public void setRg(String rg) {
this.rg = rg; }
public String getTelefone() {
return telefone; }
public void setTelefone(String telefone) {
this.telefone = telefone; }
}
8/3/2019 MVC Aplicacoes Desktop
4/29
4
MVC (model-view-controller) Aplicaes Desktop
package modelo;
public class Cliente extends Pessoa{
private int codigo;
public Cliente() {super();
// TODO Auto-generated constructor stub
}
public Cliente(int idPessoa, String nome, String logradouro, String bairro, String numero, String telefone, String rg,
String orgaoEmissor, int codigo, String complemento) {
super(idPessoa, nome, logradouro, bairro, numero, telefone, rg, orgaoEmissor, complemento);
this.codigo = codigo;
}
public Cliente(int codigo) {
super();
this.codigo = codigo;
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}}
VISO (Classe TelaCliente)Nesta camada temos as classes de comunicao com o usurio, parte grfica. onde o usurio faz uma solicitao
ao sistema e ele recebe a resposta a essa solicitao. interessante notar que nesta classe se adiciona o ouvinte aocomponente da tela, que ser controlada pela classe de controle (mtodo setOuvinte(ActionListener ouvinte,WindowListener ouv, KeyListener ov)). Tambm importante notar os mtodos de envio de mensagem (mensagem(Objectp1,String p2,int p3) e mensagemOpao(Object p1, String p2,int p3,int p4, Icon p5, Object[] p6, Object p7)) que serosolicitados pela classe de controle, caso necessite avisar algo ao usurio.
package visao;
import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel;
import javax.swing.JLabel; import java.awt.Rectangle; import javax.swing.JTextField; import javax.swing.JButton;
import javax.swing.ImageIcon; import java.awt.Point; import java.awt.Dimension; import java.awt.Font;
import javax.swing.SwingConstants; import java.awt.event.ActionListener; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.WindowListener; import java.awt.ComponentOrientation;
import java.awt.Insets; import java.awt.Toolkit; import java.text.ParseException; import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter; import modelo.Cliente; import javax.swing.WindowConstants;
import formatacao.FormataTextField;
8/3/2019 MVC Aplicacoes Desktop
5/29
5
MVC (model-view-controller) Aplicaes Desktop
public class TelaCliente extends JFrame {
private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JLabel lblCodigo = null;
private JTextField txtCodigo = null; private JLabel lblNome = null; private JTextField txtNome = null;private JLabel lblLogradouro = null; private JTextField txtLogradouro = null; private JLabel lblNumero = null;
private JTextField txtNumero = null; private JLabel lblBairro = null; private JTextField txtBairro = null;
private JLabel lblTelefone = null; private JButton btnNovo = null; private JButton btnIncluir = null;
private JButton btnExcluir = null; private JButton btnAtualizar = null; private JButton btnConsultar = null;
private JButton btnCancelar = null; private JLabel lblTopo = null; private JFormattedTextField ftxtTel = null;
private JLabel lblRg = null; private JFormattedTextField ftxtRg = null; private JLabel lblOrgaoEmissor = null;
private JTextField txtOrgaoEmissor = null; private JLabel lblCodPessoa = null; private JTextField txtCodPessoa = null;
private JLabel lblComplemento = null; private JTextField txtComplemento = null;
/**
* This is the default constructor*/
public TelaCliente() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(651, 312);
this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
this.setResizable(false);
this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icones/sisfarmatitulo.png")));
this.setContentPane(getJContentPane());
this.setTitle("SISFarma - Cadastrar Cliente");
}
/*** This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
lblComplemento = new JLabel(); lblComplemento.setBounds(new Rectangle(16, 163, 90, 16));
lblComplemento.setText("Complemento:");
lblCodPessoa = new JLabel(); lblCodPessoa.setBounds(new Rectangle(228, 75, 81, 16));
lblCodPessoa.setText("Cod. Pessoa:");
lblOrgaoEmissor = new JLabel(); lblOrgaoEmissor.setBounds(new Rectangle(376, 195, 131, 15));
8/3/2019 MVC Aplicacoes Desktop
6/29
6
MVC (model-view-controller) Aplicaes Desktop
lblOrgaoEmissor.setText("Orgo Emissor do RG:");lblRg = new JLabel(); lblRg.setBounds(new Rectangle(451, 75, 37, 14));
lblRg.setText("RG:");
lblTelefone = new JLabel(); lblTelefone.setBounds(new Rectangle(15, 194, 61, 16));
lblTelefone.setText("Telefone:");lblBairro = new JLabel(); lblBairro.setBounds(new Rectangle(388, 163, 46, 16));
lblBairro.setText("Bairro:");
lblNumero = new JLabel(); lblNumero.setBounds(new Rectangle(474, 135, 61, 16));
lblNumero.setText("Nmero:");
lblLogradouro = new JLabel(); lblLogradouro.setBounds(new Rectangle(15, 135, 76, 16));
lblLogradouro.setText("Logradouro:");
lblNome = new JLabel(); lblNome.setBounds(new Rectangle(15, 105, 46, 16));
lblNome.setText("Nome:");
lblCodigo = new JLabel(); lblCodigo.setBounds(new Rectangle(15, 75, 46, 16));
lblCodigo.setText("Cdigo:");jContentPane = new JPanel(); jContentPane.setLayout(null);
jContentPane.add(lblCodigo, null); jContentPane.add(getTxtCodigo(), null);
jContentPane.add(lblNome, null); jContentPane.add(getTxtNome(), null);
jContentPane.add(lblLogradouro, null); jContentPane.add(getTxtLogradouro(), null);
jContentPane.add(lblNumero, null); jContentPane.add(getTxtNumero(), null);
jContentPane.add(lblBairro, null); jContentPane.add(getTxtBairro(), null);
jContentPane.add(lblTelefone, null); jContentPane.add(getBtnNovo(), null);
jContentPane.add(getBtnIncluir(), null); jContentPane.add(getBtnExcluir(), null);
jContentPane.add(getBtnAtualizar(), null); jContentPane.add(getBtnConsultar(), null);
jContentPane.add(getBtnCancelar(), null); jContentPane.add(getLblTopo(), null);
jContentPane.add(getFtxtTel(), null); jContentPane.add(lblRg, null);
jContentPane.add(getFtxtRg(), null); jContentPane.add(lblOrgaoEmissor, null);
jContentPane.add(getTxtOrgaoEmissor(), null); jContentPane.add(lblCodPessoa, null);
jContentPane.add(getTxtCodPessoa(), null); jContentPane.add(lblComplemento, null);
jContentPane.add(getTxtComplemento(), null);
}
return jContentPane;
}
/*** This method initializes txtCodigo
*
* @return javax.swing.JTextField
*/
private JTextField getTxtCodigo() {
if (txtCodigo == null) {
txtCodigo = new JTextField(); txtCodigo.setBounds(new Rectangle(107, 76, 113, 16));
txtCodigo.setEnabled(false);
}
return txtCodigo;
}
8/3/2019 MVC Aplicacoes Desktop
7/29
7
MVC (model-view-controller) Aplicaes Desktop
/*** This method initializes txtNome
*
* @return javax.swing.JTextField
*/private JTextField getTxtNome() {
if (txtNome == null) {
txtNome = new JTextField(); txtNome.setBounds(new Rectangle(106, 106, 522, 16));
txtNome.setToolTipText("Nome Completo do Cliente para Cadastro ou Parcial para Consulta");
txtNome.setDocument(new FormataTextField(50));
}
return txtNome;
}
/**
* This method initializes txtLogradouro*
* @return javax.swing.JTextField
*/
private JTextField getTxtLogradouro() {
if (txtLogradouro == null) {
txtLogradouro = new JTextField(); txtLogradouro.setBounds(new Rectangle(105, 134, 354, 16));
txtLogradouro.setToolTipText("Av, Rua, Beco, Travessa onde Reside o Cliente");
txtLogradouro.setDocument(new FormataTextField(25));
}
return txtLogradouro;
}
/**
* This method initializes txtNumero
*
* @return javax.swing.JTextField
*/
private JTextField getTxtNumero() {
if (txtNumero == null) {txtNumero = new JTextField(); txtNumero.setBounds(new Rectangle(561, 135, 68, 16));
txtNumero.setToolTipText("Nmero da Residncia do Cliente");
txtNumero.setDocument(new FormataTextField(6));
}
return txtNumero;
}
/**
* This method initializes txtBairro
*
* @return javax.swing.JTextField
*/
8/3/2019 MVC Aplicacoes Desktop
8/29
8/3/2019 MVC Aplicacoes Desktop
9/29
9
MVC (model-view-controller) Aplicaes Desktop
return btnIncluir;}
/**
* This method initializes btnExcluir
** @return javax.swing.JButton
*/
private JButton getBtnExcluir() {
if (btnExcluir == null) {
btnExcluir = new JButton();
btnExcluir.setIcon(new ImageIcon(getClass().getResource("/icones/excluir.png")));
btnExcluir.setLocation(new Point(223, 226)); btnExcluir.setSize(new Dimension(89, 30));
btnExcluir.setToolTipText("Excluir Cliente"); btnExcluir.setMargin(new Insets(2, 2, 2, 2));
btnExcluir.setText("Excluir");
}return btnExcluir;
}
/**
* This method initializes btnAtualizar
*
* @return javax.swing.JButton
*/
private JButton getBtnAtualizar() {
if (btnAtualizar == null) {
btnAtualizar = new JButton();
btnAtualizar.setIcon(new ImageIcon(getClass().getResource("/icones/alterar.png")));
btnAtualizar.setLocation(new Point(327, 226)); btnAtualizar.setSize(new Dimension(89, 30));
btnAtualizar.setToolTipText("Atualizar Dados do Cliente");
btnAtualizar.setMargin(new Insets(2, 2, 2, 2)); btnAtualizar.setText("Atualizar");
}
return btnAtualizar;
}
/**
* This method initializes btnConsultar*
* @return javax.swing.JButton
*/
private JButton getBtnConsultar() {
if (btnConsultar == null) {
btnConsultar = new JButton();
btnConsultar.setIcon(new ImageIcon(getClass().getResource("/icones/consultar.png")));
btnConsultar.setLocation(new Point(431, 226)); btnConsultar.setSize(new Dimension(89, 30));
btnConsultar.setToolTipText("Consultar um Cliente");
btnConsultar.setMargin(new Insets(2, 2, 2, 2));
btnConsultar.setMnemonic(KeyEvent.VK_UNDEFINED); btnConsultar.setText("Consultar");
8/3/2019 MVC Aplicacoes Desktop
10/29
10
MVC (model-view-controller) Aplicaes Desktop
}return btnConsultar;
}
/**
* This method initializes btnCancelar*
* @return javax.swing.JButton
*/
private JButton getBtnCancelar() {
if (btnCancelar == null) {
btnCancelar = new JButton();
btnCancelar.setIcon(new ImageIcon(getClass().getResource("/icones/cancelar.png")));
btnCancelar.setLocation(new Point(535, 226)); btnCancelar.setSize(new Dimension(89, 30));
btnCancelar.setToolTipText("Cancelar uma Ao"); btnCancelar.setMargin(new Insets(2, 2, 2, 2));
btnCancelar.setText("Cancelar");}
return btnCancelar;
}
/**
* This method initializes lblTopo
*
* @return javax.swing.JLabel
*/
private JLabel getLblTopo() {
if (lblTopo == null) {
lblTopo = new JLabel(); lblTopo.setText("lblTopo");
lblTopo.setIcon(new ImageIcon(getClass().getResource("/imagem/topoCliente.png")));
lblTopo.setBounds(new Rectangle(0, -2, 645, 62));
}
return lblTopo;
}
/**
* This method initializes ftxtTel
** @return javax.swing.JFormattedTextField
*/
private JFormattedTextField getFtxtTel() {
if (ftxtTel == null) {
try {
ftxtTel = new JFormattedTextField(new MaskFormatter("(##)####-####"));
ftxtTel.setLocation(new Point(104, 195)); ftxtTel.setSize(new Dimension(106, 16));
ftxtTel.setToolTipText("Telefone de Contato do Cliente. (XX) XXXX-XXXX");
ftxtTel.setFocusLostBehavior(JFormattedTextField.COMMIT);
} catch (ParseException e) {
// TODO Auto-generated catch block
8/3/2019 MVC Aplicacoes Desktop
11/29
11
MVC (model-view-controller) Aplicaes Desktop
this.mensagem("Erro ao Informar o Telefone","Aviso",JOptionPane.WARNING_MESSAGE);}
}
return ftxtTel;
}
public void limparTela()
{
txtCodPessoa.setText(""); txtCodigo.setText("") ; txtNome.setText("") ; txtLogradouro.setText("") ;
txtNumero.setText("") ; txtBairro.setText("") ; ftxtTel.setText("") ; ftxtRg.setText("");
txtOrgaoEmissor.setText(""); txtComplemento.setText(""); txtNome.requestFocus() ;
}
public void modoInicial(){
btnNovo.setEnabled(true) ; btnIncluir.setEnabled(false) ;
btnExcluir.setEnabled(false) ; btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(true) ;
btnCancelar.setEnabled(false) ; txtCodigo.setEnabled(false) ; txtNome.setEnabled(true);
txtLogradouro.setEnabled(false) ; txtNumero.setEnabled(false) ; txtBairro.setEnabled(false) ;
ftxtTel.setEnabled(false) ; ftxtRg.setEnabled(false); txtOrgaoEmissor.setEnabled(false);
txtComplemento.setEnabled(false); txtNome.requestFocus();
}
public void modoConsultaPessoa()
{
ftxtRg.requestFocus(true); btnNovo.setEnabled(false) ; btnIncluir.setEnabled(false) ;
btnExcluir.setEnabled(false) ; btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ;
btnCancelar.setEnabled(true) ; txtCodigo.setEnabled(false) ; txtNome.setEnabled(false);
txtLogradouro.setEnabled(false) ; txtNumero.setEnabled(false) ; txtBairro.setEnabled(false) ;
ftxtTel.setEnabled(false) ; ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(false);
txtComplemento.setEnabled(false);
}
public void modoNovo()
{btnNovo.setEnabled(false) ; btnIncluir.setEnabled(true) ; btnExcluir.setEnabled(false) ;
btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(true) ;
txtCodigo.setEnabled(false) ; txtNome.setEnabled(true); txtLogradouro.setEnabled(true) ;
txtNumero.setEnabled(true) ; txtBairro.setEnabled(true) ; ftxtTel.setEnabled(true) ;
ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(true); txtComplemento.setEnabled(true);
txtNome.requestFocus();
}
public void modoVenda()
{
btnNovo.setEnabled(false) ; btnIncluir.setEnabled(true) ; btnExcluir.setEnabled(false) ;
btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(false) ;
8/3/2019 MVC Aplicacoes Desktop
12/29
12
MVC (model-view-controller) Aplicaes Desktop
txtCodigo.setEnabled(false) ; txtNome.setEnabled(true); txtLogradouro.setEnabled(true) ;txtNumero.setEnabled(true) ; txtBairro.setEnabled(true) ;
ftxtTel.setEnabled(true) ; ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(true);
txtComplemento.setEnabled(true); txtNome.requestFocus();
}public void modoConsulta()
{
btnNovo.setEnabled(false) ; btnIncluir.setEnabled(false) ; btnExcluir.setEnabled(true) ;
btnAtualizar.setEnabled(true) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(true) ;
txtCodigo.setEnabled(false) ; txtNome.setEnabled(true); txtLogradouro.setEnabled(true) ;
txtNumero.setEnabled(true) ; txtBairro.setEnabled(true) ; ftxtTel.setEnabled(true) ;
ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(true); txtComplemento.setEnabled(true);
txtNome.requestFocus();
}
public void modoPessoa(){
btnNovo.setEnabled(false) ; btnIncluir.setEnabled(true) ; btnExcluir.setEnabled(false) ;
btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(true) ;
txtCodigo.setEnabled(false) ; txtNome.setEnabled(false); txtLogradouro.setEnabled(false) ;
txtNumero.setEnabled(false) ; txtBairro.setEnabled(false) ; ftxtTel.setEnabled(false) ;
ftxtRg.setEnabled(false); txtOrgaoEmissor.setEnabled(false); txtComplemento.setEnabled(false);
}
public void modoNome()
{
txtNome.setText(""); txtNome.requestFocus();
}
public void modoLogradouro()
{
txtLogradouro.setText(""); txtLogradouro.requestFocus();
}
public void modoNumero()
{
txtNumero.setText(""); txtNumero.requestFocus();
}public void modoBairro()
{
txtBairro.setText(""); txtBairro.requestFocus();
}
public void modoTelefone()
{
ftxtTel.setText(""); ftxtTel.requestFocus();
}
public void modoRg()
{
ftxtRg.setText(""); ftxtRg.requestFocus();
8/3/2019 MVC Aplicacoes Desktop
13/29
13
MVC (model-view-controller) Aplicaes Desktop
}public void modoBloquearRg()
{
ftxtRg.setEnabled(false);
}public void modoOrgaoEmissor()
{
txtOrgaoEmissor.setText(""); txtOrgaoEmissor.requestFocus();
}
public void setOuvinte(ActionListener ouvinte, WindowListener ouv, KeyListener ov)
{
btnNovo.addActionListener(ouvinte) ; btnIncluir.addActionListener(ouvinte) ;
btnExcluir.addActionListener(ouvinte) ; btnAtualizar.addActionListener(ouvinte) ;
btnConsultar.addActionListener(ouvinte) ; btnCancelar.addActionListener(ouvinte) ;
this.addWindowListener(ouv); ftxtRg.addKeyListener(ov);}
public void escreverCliente(Cliente c)
{
txtCodPessoa.setText(String.valueOf(c.getIdPessoa())); txtCodigo.setText(String.valueOf(c.getCodigo()));
txtNome.setText(c.getNome()); txtLogradouro.setText(c.getLogradouro());
txtNumero.setText(c.getNumero()); txtBairro.setText(c.getBairro());
ftxtTel.setText(c.getTelefone()); ftxtRg.setText(c.getRg());
txtOrgaoEmissor.setText(c.getOrgaoEmissor()); txtComplemento.setText(c.getComplemento());
}
public void escreverPessoa(Cliente cl)
{
txtCodPessoa.setText(String.valueOf(cl.getIdPessoa())); txtNome.setText(cl.getNome());
txtLogradouro.setText(cl.getLogradouro()); txtNumero.setText(cl.getNumero());
txtBairro.setText(cl.getBairro()); ftxtTel.setText(cl.getTelefone());
ftxtRg.setText(cl.getRg()); txtOrgaoEmissor.setText(cl.getOrgaoEmissor());
txtComplemento.setText(cl.getComplemento());
}
public Cliente lerCliente()
{Cliente c = new Cliente();
try
{
String nome = txtNome.getText(); String logradouro = txtLogradouro.getText();
String numero = txtNumero.getText(); String bairro = txtBairro.getText();
String telefone = ftxtTel.getText(); String cod = txtCodigo.getText();
String rg = ftxtRg.getText(); String oe = txtOrgaoEmissor.getText();
String codP = txtCodPessoa.getText(); String complemento = txtComplemento.getText();
int codigo; int codigoP;
if(cod.equals("") || cod == null)
8/3/2019 MVC Aplicacoes Desktop
14/29
14
MVC (model-view-controller) Aplicaes Desktop
codigo = 0;else
codigo = Integer.parseInt(cod);
if(codP.equals("") || codP == null)codigoP = 0;
else
codigoP = Integer.parseInt(codP);
telefone = telefone.replaceAll("\\(" , "").replaceAll("\\)", "").replaceAll("-", "").replaceAll(" ", "");
rg = rg.replaceAll("[-.]" , "").replaceAll(" ", "");
c.setIdPessoa(codigoP); c.setCodigo(codigo); c.setNome(nome); c.setLogradouro(logradouro);
c.setNumero(numero); c.setBairro(bairro); c.setTelefone(telefone); c.setRg(rg);
c.setOrgaoEmissor(oe); c.setComplemento(complemento);} // fim do try
catch(NumberFormatException e)
{this.mensagem("Tipo de Dado Invlido","Aviso",JOptionPane.ERROR_MESSAGE) ;}
catch(NullPointerException e)
{this.mensagem("Erro ao Criar o Objeto","Aviso",JOptionPane.ERROR_MESSAGE) ;}
catch(Exception e)
{this.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;}
return c ;
}
public String lerRg()
{
String rg = ftxtRg.getText();
rg = rg.replaceAll("[-.]" , "").replaceAll(" ", "");
return rg;
}
public void mensagem(Object p1,String p2,int p3)
{
JOptionPane.showMessageDialog(null, p1,p2,p3);}
public int mensagemOpao(Object p1, String p2,int p3,int p4, Icon p5, Object[] p6, Object p7)
{
return JOptionPane.showOptionDialog(null, p1, p2, p3, p4, p5, p6, p7);
}
/**
* This method initializes ftxtRg
*
* @return javax.swing.JFormattedTextField
*/
8/3/2019 MVC Aplicacoes Desktop
15/29
15
MVC (model-view-controller) Aplicaes Desktop
private JFormattedTextField getFtxtRg() {if (ftxtRg == null) {
try {
ftxtRg = new JFormattedTextField(new MaskFormatter("##.###.###-#"));
ftxtRg.setBounds(new Rectangle(493, 75, 137, 15));ftxtRg.setSize(new Dimension(92, 16));
ftxtRg.setToolTipText("Regitro Geral do Cliente. Pressione Enter para Continuar o Cadastro");
ftxtRg.setFocusLostBehavior(JFormattedTextField.COMMIT);
} catch (ParseException e) {
this.mensagem("Erro ao Informar o RG","Aviso",JOptionPane.WARNING_MESSAGE);
}
}
return ftxtRg;
}
/*** This method initializes txtOrgaoEmissor
*
* @return javax.swing.JTextField
*/
private JTextField getTxtOrgaoEmissor() {
if (txtOrgaoEmissor == null) {
txtOrgaoEmissor = new JTextField(); txtOrgaoEmissor.setBounds(new Rectangle(508, 195, 122, 16));
txtOrgaoEmissor.setToolTipText("rgo Emissor do Registro Geral do Cliente");
txtOrgaoEmissor.setDocument(new FormataTextField(6));
}
return txtOrgaoEmissor;
}
/**
* This method initializes txtCodPessoa
*
* @return javax.swing.JTextField
*/
private JTextField getTxtCodPessoa() {
if (txtCodPessoa == null) {txtCodPessoa = new JTextField(); txtCodPessoa.setLocation(new Point(310, 75));
txtCodPessoa.setEnabled(false); txtCodPessoa.setSize(new Dimension(113, 16));
}
return txtCodPessoa;
}
/**
* This method initializes txtComplemento
*
* @return javax.swing.JTextField
*/
private JTextField getTxtComplemento() {
8/3/2019 MVC Aplicacoes Desktop
16/29
16
MVC (model-view-controller) Aplicaes Desktop
if (txtComplemento == null) {txtComplemento = new JTextField(); txtComplemento.setLocation(new Point(104, 164));
txtComplemento.setSize(new Dimension(275, 16));
txtComplemento.setToolTipText("Complemento do Endereo do Cliente");
txtComplemento.setDocument(new FormataTextField(25));}
return txtComplemento;
}
} // @jve:decl-index=0:visual-constraint="10,10"
CONTROLE (Classe ControleCliente)Todo o controle fica nas classes desta camada. Interessante que cada tela tenha uma classe que a controla, pois
fica mais fcil de identificar um problema e resolv-lo. Pois caso faa um classe de controle para todo o sistema, ela ficar
enorme. Reparem, que logo no construtor ele j seta o mtodo setOuvinte() da viso e passa this como parmetro,ndicando que ele est tomando conta de qualquer solicitao que o usurio fizer na tela (tela.setOuvinte(this, this,this)).Podemos tambm notar que no mtodo actionPerformed(ActionEvent e), ele faz toda a validao, aplicando as regras denegcio, por exemplo, o cliente obrigatoriamente precisa informar o RG para ser cadastrado.f(cl.getRg().equals("") || cl.getRg() == null || cl.getRg().length() > 0 && cl.getRg().length() < 9 || cl.getRg().equals("000000000"))
{tela.mensagem("Informe o RG", "Mensagem", JOptionPane.WARNING_MESSAGE);tela.modoRg();}
Reparem que o controle solicita que a viso exiba uma mensagem (tela.mensagem("Informe o RG", "Mensagem",OptionPane.WARNING_MESSAGE)) e que o DAO inclua os dados do cliente no banco (dao.gravarCliente(cl)).
package controle;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;
import java.sql.SQLException; import java.util.ArrayList; import javax.swing.JOptionPane; import modelo.Cliente;
import dao.DaoCliente; import visao.TelaCliente; import visao.TelaPesquisa;
public class ControleCliente extends WindowAdapter implements ActionListener, KeyListener{
private TelaCliente tela = null ; private DaoCliente dao = null ; private Cliente cl = null;
private ControleVenda cv = null; private ArrayList lista = null; private boolean venda = false;
private ControleTelaFarmacia cf = null; private boolean fechar = true;
public ControleCliente(TelaCliente tela, ControleVenda cv,boolean v) {
super(); this.tela = tela ; this.cv = cv; venda = v; tela.setOuvinte(this, this,this); tela.modoVenda();
try {
dao = new DaoCliente() ;
}
catch (ClassNotFoundException e) {
tela.mensagem("Erro ao carregar o driver","Aviso",JOptionPane.ERROR_MESSAGE);}
8/3/2019 MVC Aplicacoes Desktop
17/29
17
MVC (model-view-controller) Aplicaes Desktop
catch (SQLException e) {tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE);
}
}
public ControleCliente(TelaCliente tela) {super(); this.tela = tela ; tela.modoInicial(); tela.setOuvinte(this,this,this);
try {
dao = new DaoCliente() ;
}
catch (ClassNotFoundException e) {
tela.mensagem("Erro ao carregar o driver","Aviso",JOptionPane.ERROR_MESSAGE);
}
catch (SQLException e) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE);
}}
public ControleCliente(TelaCliente tela, ControleTelaFarmacia c) {
super(); this.tela = tela ; cf = c; tela.modoInicial(); tela.setOuvinte(this,this,this);
try {
dao = new DaoCliente() ;
}
catch (ClassNotFoundException e) {
tela.mensagem("Erro ao carregar o driver","Aviso",JOptionPane.ERROR_MESSAGE);
}
catch (SQLException e) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE);
}
}
public void actionPerformed(ActionEvent e) {
String comando = e.getActionCommand();
if (comando.equals("Novo")){
tela.limparTela();
tela.modoConsultaPessoa();}
else
if(comando.equals("Incluir"))
incluirCliente();
else
if(comando.equals("Cancelar"))
{tela.limparTela();
tela.modoInicial();}
else
8/3/2019 MVC Aplicacoes Desktop
18/29
18
MVC (model-view-controller) Aplicaes Desktop
if(comando.equals("Atualizar"))alterarCliente();
else
if(comando.equals("Excluir"))
excluirCliente();else
if(comando.equals("Consultar"))
consultarCliente();
}
public void incluirCliente() {
cl = tela.lerCliente(); int autoNumeracao = 0;
if(cl != null)if(cl.getNome().equals("") || cl.getNome() == null)
{tela.mensagem("Informe o Nome", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoNome();}
else
if(cl.getLogradouro().equals("") || cl.getLogradouro() == null)
{tela.mensagem("Informe o Logradouro", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoLogradouro();}
else
if(cl.getNumero().equals("") || cl.getNumero() == null)
{tela.mensagem("Informe o Nmero", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoNumero();}
else
if(cl.getBairro().equals("") || cl.getBairro() == null)
{tela.mensagem("Informe o Bairro", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoBairro();}
else
if(cl.getTelefone().length() > 0 && cl.getTelefone().length() < 10 || cl.getTelefone().equals("0000000000"))
{tela.mensagem("Telefone Incorreto", "Mensagem", JOptionPane.WARNING_MESSAGE);tela.modoTelefone();}
else
if(cl.getRg().equals("") || cl.getRg() == null || cl.getRg().length() > 0 && cl.getRg().length() < 9 ||
cl.getRg().equals("000000000") )
{tela.mensagem("Informe o RG", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoRg();}
else
if(cl.getOrgaoEmissor().equals("") || cl.getOrgaoEmissor() == null)
{tela.mensagem("Informe o Orgo Emissor", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoOrgaoEmissor();}
else
8/3/2019 MVC Aplicacoes Desktop
19/29
19
MVC (model-view-controller) Aplicaes Desktop
try {if(dao.buscarCliente(cl.getIdPessoa()))
{tela.mensagem("Cliente j Cadastrado", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.limparTela();
tela.modoConsultaPessoa();}else
try{
{autoNumeracao = dao.obterIdCliente() + 1;
cl.setCodigo(autoNumeracao);
Object[] opcoes = {"Sim", "No" } ;
int resp = tela.mensagemOpao("Confirma os Dados?", "Confirmao",
JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);
if (resp==0)
{ if(cl.getIdPessoa() == 0)
{autoNumeracao = dao.obterIdPessoa() + 1;cl.setIdPessoa(autoNumeracao);
dao.gravarPessoa(cl);}
dao.gravarCliente(cl);
tela.mensagem("Cliente " + cl.getNome() + " foi Includo com
Sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE) ;
if(venda)
{cv.inserirCliente(cl);
tela.dispose(); }
else
{ tela.limparTela();
tela.modoInicial();}
}// fim da pergunta
}// fim do else
}// fim do try
catch (SQLException e) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial(); }
catch (Exception e) {tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial(); }
} catch (SQLException e) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial();}
catch (Exception e) {
tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial();}
8/3/2019 MVC Aplicacoes Desktop
20/29
20
MVC (model-view-controller) Aplicaes Desktop
else{tela.mensagem("Operao no realizada", "Mensagem", JOptionPane.INFORMATION_MESSAGE);
tela.limparTela();
tela.modoInicial();
}}
public void alterarCliente() {
cl = tela.lerCliente();
if(cl != null && cl.getCodigo() != 0)
if(cl.getNome().equals("") || cl.getNome() == null)
{tela.mensagem("Informe o Nome", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoNome();}
else
if(cl.getLogradouro().equals("") || cl.getLogradouro() == null)
{tela.mensagem("Informe o Logradouro", "Mensagem", JOptionPane.WARNING_MESSAGE);tela.modoLogradouro();}
else
if(cl.getNumero().equals("") || cl.getNumero() == null)
{tela.mensagem("Informe o Nmero", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoNumero();}
else
if(cl.getBairro().equals("") || cl.getBairro() == null)
{tela.mensagem("Informe o Bairro", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoBairro();}
else
if(cl.getTelefone().length() > 0 && cl.getTelefone().length() < 10 || cl.getTelefone().equals("0000000000"))
{tela.mensagem("Telefone Incorreto", "Mensagem", JOptionPane.WARNING_MESSAGE);
tela.modoTelefone();}
else
try {
{
Object[] opcoes = {"Sim", "No" } ;
int resp = tela.mensagemOpao("Confirma os Dados?", "Confirmao", JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);if (resp==0)
{
dao.alterarCliente(cl);
tela.mensagem("Cliente " + cl.getNome() + " foi Alterado com
Sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE) ;
tela.limparTela();
tela.modoInicial();
}// fim da pegunta
}
} // fim do try
catch (SQLException e) {
8/3/2019 MVC Aplicacoes Desktop
21/29
21
MVC (model-view-controller) Aplicaes Desktop
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ;tela.limparTela();
tela.modoInicial();
}
catch (Exception e) {tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial();
}
else
{tela.mensagem("Operao no realizada", "Mensagem", JOptionPane.INFORMATION_MESSAGE);
tela.limparTela();
tela.modoInicial();
}
}
public void excluirCliente() {
cl = tela.lerCliente();
if(cl != null && cl.getCodigo() != 0)
{
Object[] opcoes = {"Sim", "No" } ;
int resp = tela.mensagemOpao("Confirma a excluso?", "Excluir", JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);
if (resp==0)
{
try {
dao.excluirCliente(cl);
}
catch (SQLException e) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial();}
catch (Exception e) {
tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial();
}
tela.mensagem("Cliente " + cl.getNome() + " foi Excludo com
Sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE) ;
tela.limparTela();
tela.modoInicial();
8/3/2019 MVC Aplicacoes Desktop
22/29
22
MVC (model-view-controller) Aplicaes Desktop
}
}
else
tela.mensagem("Operao no realizada", "Mensagem", JOptionPane.INFORMATION_MESSAGE);}
public void consultarCliente() {
cl = tela.lerCliente();
if(cl != null)
//if(cl.getNome().equals("") || cl.getNome() == null)
//{tela.mensagem("Informe o Nome do Cliente para a Pesquisa", "Mensagem",
JOptionPane.WARNING_MESSAGE);
//tela.modoInicial();}//else
{try {
//lista = new ArrayList();
lista = new ArrayList();
//lista = dao.consultarCliente(cl);
lista = dao.consultarCliente(cl);
}
catch (SQLException e) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial();
}
catch (Exception e) {
tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;
tela.limparTela();
tela.modoInicial();
}if (lista.size() == 1)
{tela.mensagem("Cliente Encontrado", "Mensagem",
JOptionPane.INFORMATION_MESSAGE);
tela.escreverCliente(lista.get(0));
tela.modoConsulta();
}
else
if(lista.size() == 0)
{tela.mensagem("Cliente no Encontrado", "Mensagem",
JOptionPane.INFORMATION_MESSAGE);
tela.limparTela();
8/3/2019 MVC Aplicacoes Desktop
23/29
23
MVC (model-view-controller) Aplicaes Desktop
tela.modoInicial();}
else
if(lista.size()>1 || cl.getNome().equals(""))
{TelaPesquisa janela = new TelaPesquisa();new ControlePesquisa(janela, this, lista, null, "Cliente") ;
janela.setLocationRelativeTo(null);
janela.setVisible(true);
fechar = false;
}
}
}
public void escreverCliente(Cliente cl){
tela.escreverCliente(cl);
tela.modoConsulta();
}
public void windowClosing(WindowEvent e){
if(venda == false)// janela do menu cadastro
{
if(fechar)
{tela.dispose();
cf.desbloquearMenu();
}
}
else
{cv.setCliente(false);
tela.dispose();
}
try {
dao.finalize();} catch (SQLException e1) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ;
}
}
public void setFechar(boolean f)
{
fechar = f;
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_ENTER)
8/3/2019 MVC Aplicacoes Desktop
24/29
24
MVC (model-view-controller) Aplicaes Desktop
{consultarPessoa();
}
}public void consultarPessoa() {
try {
cl = new Cliente();
cl = dao.buscarPessoa(tela.lerRg());
if(cl != null) // pessoa cadastrada
{
tela.escreverPessoa(cl);
tela.modoPessoa();
}
else{
tela.modoNovo();
tela.modoBloquearRg();
}
} catch (SQLException e1) {
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ;
} catch (Exception e1) {
tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;
}
}
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}// fim do controle
DAO (Classe DAOCliente)Aqui temos a classe responsvel por manipular os dados com o banco. Incluso, alterao, excluso, consultar.
package dao;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;
import java.sql.SQLException; import java.util.ArrayList; import modelo.Cliente;
public class DaoCliente {private Connection c; private PreparedStatement ps = null; private ResultSet r = null;
8/3/2019 MVC Aplicacoes Desktop
25/29
25
MVC (model-view-controller) Aplicaes Desktop
public DaoCliente() throws ClassNotFoundException, SQLException {
super();
c = Conexao.getConexao();
}public int obterIdPessoa() throws SQLException, Exception
{int i = 0;
ps = c.prepareStatement("select max(idpessoa) from pessoa");
r = ps.executeQuery();
if(r.next())
i = r.getInt(1);
return i ;}
public int obterIdCliente() throws SQLException, Exception
{int i = 0;
ps = c.prepareStatement("select max(codigo) from cliente");
r = ps.executeQuery();
if(r.next())
i = r.getInt(1);
return i ;
}
public void gravarPessoa(Cliente cl) throws SQLException, Exception
{
ps = c.prepareStatement("insert into pessoa values (?,?,?,?,?,?,?,?,?)");
ps.setInt(1, cl.getIdPessoa());
ps.setString(2, cl.getNome());
ps.setString(3, cl.getLogradouro());
ps.setString(4, cl.getNumero());
ps.setString(5, cl.getBairro());ps.setString(6, cl.getTelefone());
ps.setString(7, cl.getRg());
ps.setString(8, cl.getOrgaoEmissor());
ps.setString(9, cl.getComplemento());
ps.executeUpdate();
}
public void gravarCliente(Cliente cl) throws SQLException, Exception
{
ps = c.prepareStatement("insert into cliente values (?,?)");
ps.setInt(1, cl.getCodigo());
ps.setInt(2, cl.getIdPessoa());
8/3/2019 MVC Aplicacoes Desktop
26/29
26
MVC (model-view-controller) Aplicaes Desktop
ps.executeUpdate();}
public void alterarCliente(Cliente cl) throws SQLException, Exception
{
ps = c.prepareStatement("update pessoa set nome=?,logradouro=?,numero=?,bairro=?,telefone=?, rg=?,
orgaoemissor=?, complemento=? where idpessoa in (select idpessoa from cliente where codigo = ?)");
ps.setString(1, cl.getNome());
ps.setString(2, cl.getLogradouro());
ps.setString(3, cl.getNumero());
ps.setString(4, cl.getBairro());
ps.setString(5, cl.getTelefone());
ps.setString(6, cl.getRg());
ps.setString(7, cl.getOrgaoEmissor());
ps.setString(8, cl.getComplemento());ps.setInt(9, cl.getCodigo());
ps.executeUpdate();
/*
ps = c.prepareStatement("update cliente set rg=?,orgaoemissor=? where idcliente=?");
//ps.setString(1, cl.getRg());
//ps.setString(2, cl.getOrgaoEmissor());
ps.setInt(3, cl.getCodigo());
ps.executeUpdate();
*/
}
public void excluirCliente(Cliente cl) throws SQLException, Exception
{
ps = c.prepareStatement("delete from cliente where codigo=?");
ps.setInt(1, cl.getCodigo());
ps.executeUpdate();
}public ArrayList consultarCliente(Cliente cl) throws SQLException, Exception
{ //ArrayList lista = new ArrayList();
ArrayList lista = new ArrayList();
ps = c.prepareStatement("select cliente.codigo, pessoa.* from cliente, pessoa where cliente.idpessoa =
pessoa.idpessoa and cliente.idpessoa in (select idpessoa from pessoa where nome ilike ?)order by nome");
ps.setString(1, cl.getNome()+ "%");
r = ps.executeQuery();
while (r.next())
{
8/3/2019 MVC Aplicacoes Desktop
27/29
27
MVC (model-view-controller) Aplicaes Desktop
cl = new Cliente();
cl.setIdPessoa(r.getInt("idpessoa"));
cl.setCodigo(r.getInt("codigo"));cl.setNome(r.getString("nome"));
cl.setLogradouro(r.getString("logradouro"));
cl.setNumero(r.getString("numero"));
cl.setBairro(r.getString("bairro"));
cl.setTelefone(r.getString("telefone"));
cl.setRg(r.getString("rg"));
cl.setOrgaoEmissor(r.getString("orgaoemissor"));
cl.setComplemento(r.getString("complemento"));
lista.add(cl);}
return lista;
}
public Cliente buscarPessoa(String rg) throws SQLException, Exception
{
Cliente cl = null;
ps = c.prepareStatement("select * from pessoa where rg=? ");
ps.setString(1, rg);
r = ps.executeQuery();
if(r.next())
{
cl = new Cliente();
cl.setIdPessoa(r.getInt("idpessoa"));
cl.setNome(r.getString("nome"));cl.setLogradouro(r.getString("logradouro"));
cl.setNumero(r.getString("numero"));
cl.setBairro(r.getString("bairro"));
cl.setTelefone(r.getString("telefone"));
cl.setRg(r.getString("rg"));
cl.setOrgaoEmissor(r.getString("orgaoemissor"));
cl.setComplemento(r.getString("complemento"));
}
return cl;
}
public boolean buscarCliente(int codP) throws SQLException, Exception
8/3/2019 MVC Aplicacoes Desktop
28/29
28
MVC (model-view-controller) Aplicaes Desktop
{boolean resultado = false;
ps = c.prepareStatement("select codigo from cliente where idpessoa=? ");
ps.setInt(1, codP);
r = ps.executeQuery();
if(r.next())
{
resultado = true;
}
return resultado;
}
public void desfazerBanco() throws SQLException, Exception
{c.rollback();
}
public void finalize() throws SQLException
{ if(r != null)
{
r.close() ;
ps.close();
}
c.close();
}
}// fim do dao
8/3/2019 MVC Aplicacoes Desktop
29/29
29 MVC (model-view-controller) Aplicaes Desktop
ConclusoO MVC funciona como um corpo humano. O controle o crebro, que faz todo o controle docorpo. Recebe requisies e dispara estmulos a reas especficas do corpo para atender as
requisies. Nossas caractersticas fsicas, bem como nossa personalidade, seria o modelo, aestrutura. J nossos sentidos, como audio, viso, fala, olfato, tato e paladar seriam a viso,pois funciona como a entrada e sada de informaes (observar uma imagem, sorrir, chorar,comer).
Recommended