Encapsulamento

Olá pessoal, Gostaria de saber se o codigo abaixo esta certo no encapsulmento…
Valeu!

[code]

package banco;

import layout.*;

import java.sql.;
import javax.swing.
;
import java.awt.*;

public class CadastrarClientes extends JFrame{

public static String codetext;
public static String datatext;
private int codigo;
private String data;
private String nome;
private String rg;
private String cpf;
private String endereco;
private String cep;
private String bairro;
private String telefone;
private String celular;

public void setCodigo(int codigo) {
   this.codigo = codigo;
		
      }

public int getCodigo() {
   return this.codigo;
      }

public void setData(String data) {
this.data = data;
}

public String getData() {
   return this.data;
      }
	  
public void setNome(String nome) {
   this.nome = nome;
      }

public String getNome() {
   return this.nome;
      }	  

public void setRg(String rg) {
   this.rg = rg;
      }

public String getRg() {
   return this.rg;
      }
	  
public void setCpf(String cpf) {
   this.cpf = cpf;
      }

public String getCpf() {
   return this.cpf;
      }	  
	  
public void setEndereco(String endereco) {
   this.endereco = endereco;
      }

public String getEndereco() {
   return this.endereco;
      }
	  
public void setCep(String cep) {
   this.cep = cep;
      }

public String getCep() {
   return this.cep;
      }	  
	  
public void setBairro(String bairro) {
   this.bairro = bairro;
      }

public String getBairro() {
   return this.bairro;
      }

public void setTelefone(String telefone) {
   this.telefone = telefone;
      }

public String getTelefone() {
   return this.telefone;
      }

public void setCelular(String celular) {
   this.celular = celular;
      }

public String getCelular() {
   return this.celular;
      }	  

public void cadastrarClientes()
{

Connection conexao = null;
Statement comando = null;
try
{

Class.forName("com.mysql.jdbc.Driver");

conexao = DriverManager.getConnection("jdbc:mysql://127.0.0.1/locadora?user=root&password=zerocodetege");

comando = conexao.createStatement();

Statement stmt = conexao.createStatement(); 

String sql = ("insert into clientes (codigo,data,nome,rg,cpf,endereco,cep,bairro,telefone,celular) values ('"+getCodigo()+"','"+getData()+"','"+getNome()+"','"+getRg()+"','"+getCpf()+"','"+getEndereco()+"','"+getCep()+"','"+getBairro()+"','"+getTelefone()+"','"+getCelular()+"')"); 	
stmt.executeUpdate(sql);
Clientes.btnDependentes.setEnabled(true);
codetext = Integer.toString(getCodigo());	
datatext = getData();	
String texto = " Cadastro Efetuado com Sucesso!";
JOptionPane.showMessageDialog(null,texto,"Aviso:",JOptionPane.INFORMATION_MESSAGE,null);

	    
}

catch(SQLException e)
	{
		String texto = " Cliente Ja Cadastrado!";
        JOptionPane.showMessageDialog(null,texto,"Aviso:",JOptionPane.WARNING_MESSAGE,null);
		System.out.println(e.getMessage());
	}
catch(NumberFormatException e)
{

	String txt = "Insira os Dados Corretamente!";
	JOptionPane.showMessageDialog(null,txt,"Aviso:",JOptionPane.INFORMATION_MESSAGE);
}	
	
catch(ClassNotFoundException e)
	{
		System.out.println("O Drive não foi Encontrado!");
	}

finally
	{
		try
			{
							
			if (comando !=null)
			comando.close();
			
			if (conexao !=null && !conexao.isClosed())
				conexao.close();
			}	
			catch(SQLException event)
			{
			
			}
	}	
}

}
[/code]

A resposta é NÃO! seu código está tudo menos encapsulado, vc tem diversos erros de modelagem nesse exemplo:

  1. acesso a banco de dados deveria estar encapsulado em alguma classe para que pudesse ser reutilizado em outras partes do sistema.
  2. vc jamais deveria estender JFrame neste caso, porque isso está deixando vc preso a uma camada de visualizaçao especifica, neste caso Swing.
  3. Cliente deveria ser uma classe à parte.

isto parece ser um código de exemplo, JAMAIS poderia ser um código em produção.

Olhe, eu acho que você tá no caminho.
O que você tá confundindo é encapsulamento com coesão.
Encapsulamento é fazer o data hiding (os getters e setters, ou métodos acessadores e modificadores).
Coesão é o conceito de que cada classe deve fazer o que ela pretende. Portanto, juntar SQL e GUI na mesma classe não tem coesão. O correto seria fazer a ‘camada’ do banco, a da interface (GUI) e as demais (que vai depender do projeto).

Valeu amigos pelas dicas…

Entendi mais ou menos assim… :oops:

[code]

package banco;

import java.sql.*;

public class ConectarBanco implements Conexoes

{

public void conectar()
{

try
{


Class.forName("com.mysql.jdbc.Driver");

DriverManager.getConnection("jdbc:mysql://127.0.0.1/locadora?user=root&password=zerocodetege");
			    
}

catch(SQLException eSql)
	{
		System.out.println(eSql.getMessage());
	}
	
catch(ClassNotFoundException eDrive)
	{
		System.out.println("O Drive não foi Encontrado!");
	}

}

}

  [/code]

Proxima Classe:


package banco;

import inicial.*;
import telas.*;
import logico.*;

import java.sql.*;

import javax.swing.*;

public class LogarUsr {
	
	private static final long serialVersionUID = 1L;

	
	
public void logar()
{
	
	Statement comando = null;

	ConectarBanco c = new ConectarBanco();
	c.conectar();
	
	Usuarios u = new Usuarios();
	
	
	try
		{
		
	ResultSet resultado = comando.executeQuery("select * from usuarios where nome='"+u.getUsuario()+"' and senha=md5('"+u.getSenha()+"')");
			
				if(resultado.first()==false)
					{
					
					String texto =" Acesso Negado!";
					JOptionPane.showMessageDialog(null,texto,"Verifique os Dados Digitados",JOptionPane.ERROR_MESSAGE,null);	
					}	
				else
					{
					Main.login.dispose();					
					MenuPrincipal menu = new MenuPrincipal();
					menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					}	
			
	    }
	
	catch(SQLException eSql)
		{
			System.out.println(eSql.getMessage() );
		}
	

	}
}

Ainda tá bem longe.

(Consultas no banco + Swing + Lógica) na mesma classe não dá muito certo.

Dica: Tente seguir uma apostila dos cursos da Caelum, alguns deles também ensinam a como estruturar as classes e a arquitetura do projeto, refactorings e etc. Não é swing, mas por estar bem estruturado, é fácil de trocar um componente por outro.

No momento estou estudando este aqui.

estou com o que o ‘dedejava’ escreveu…

procure desitinar camada de negócios em classes especificas… usa um factory para pegar uma connection…

vc ta no caminho…