Código Tosco

Iai pessual, blz?

estava vendo um material q meu professor da facu postou sobre beans e jsp, e ele fez um código totalmente ridiculo. Oq mais me incomoda é que ele é professor, e está ensinando várias pessoas a trampar desse jeito…O código segue abaixo…comentem a opinião de vcs ai, sobre essa má qualidade de professores q existe…ja tiveram professores assim??

flw, um abraço!

Segue o bean:

[code]package meuBean;

import java.sql.*;
public class Cliente {
private String nome;
private String data_nasc;
private String cpf;
private String rg;
private String endereco;
private String tel1;
private String tel2;
private String email;

public Cliente() {
}

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

public void setData_nasc(String data_nasc ){
	this.data_nasc = data_nasc;
}

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

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

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

public void setTel1(String tel1){
	this.tel1 = tel1;
}

public void setTel2(String tel2){
	this.tel2 = tel2;
}

public void setEmail(String email){
	this.email = email;
}

public String getNome(){
	return nome;
}

public String getData_nasc(){
	return data_nasc;
}

public String getCpf(){
	return cpf;
}

public String getRg(){
	return rg;
}

public String getEndereco(){
	return endereco;
}

public String getTel1(){
	return tel1;
}

public String getTel2(){
	return tel2;
}

public String getEmail(){
	return email;
}

public boolean incluir() {
    try {
        // Carregar Driver do MySQL
        Class.forName("com.mysql.jdbc.Driver");
        //Fazer a conexão
        //Verifique se o usuário root e a senha 123 são iguais na máquina de teste
        //caso contrário, altere na linha abaixo.
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ecommerce", "root", "123");
		//Criar o fluxo para mandar comando sql o banco
        Statement stmt = con.createStatement();
		
        String sql = "insert into clientes (nome, data_nasc, cpf, rg, endereco, tel1, tel2, email) VALUES (" +
                "'"+ getNome()+"',"+
                "'"+ getData_nasc()+"',"+
                "'"+ getCpf()+"',"+
                "'"+ getRg()+"',"+
                "'"+ getEndereco()+"',"+
                "'"+ getTel1()+"',"+
                "'"+ getTel2()+"',"+
                "'"+ getEmail()+"')";

        // Executa o comando SQL
        stmt.executeUpdate(sql);
		//Fecha a conexão
        con.close();
        //Fecha o fluxo 
        stmt.close();
        
    } catch (Exception ex) {
        return(false);
    } 
    return(true);
}

public boolean alterar(int id){
	 try {
        // Carregar Driver do MySQL
        Class.forName("com.mysql.jdbc.Driver");
        //Fazer a conexão
        //Verifique se o usuário root e a senha 123 são iguais na máquina de teste
        //caso contrário, altere na linha abaixo.
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ecommerce", "root", "123");
		//Criar o fluxo para mandar comando sql o banco
        Statement stmt = con.createStatement();
		
        String sql = "UPDATE clientes set "+
        	    "nome='"+ getNome()+"',"+
                "data_nasc='"+ getData_nasc()+"',"+
                "cpf='"+ getCpf()+"',"+
                "rg='"+ getRg()+"',"+
                "endereco='"+ getEndereco()+"',"+
                "tel1='"+ getTel1()+"',"+
                "tel2='"+ getTel2()+"',"+
                "email='"+ getEmail()+"' WHERE id = "+id;

        // Executa o comando SQL
        stmt.executeUpdate(sql);
		//Fecha a conexão
        con.close();
        //Fecha o fluxo 
        stmt.close();
        
    } catch (Exception ex) {
        return(false);
    } 
    return(true);
}

public boolean excluir(int id){
	 try {
        // Carregar Driver do MySQL
        Class.forName("com.mysql.jdbc.Driver");
        //Fazer a conexão
        //Verifique se o usuário root e a senha 123 são iguais na máquina de teste
        //caso contrário, altere na linha abaixo.
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ecommerce", "root", "123");
		//Criar o fluxo para mandar comando sql o banco
        Statement stmt = con.createStatement();
		
        String sql = "DELETE FROM clientes WHERE id = "+id;

        // Executa o comando SQL
        stmt.executeUpdate(sql);
		//Fecha a conexão
        con.close();
        //Fecha o fluxo 
        stmt.close();
        
    } catch (Exception ex) {        	
        return(false);
    } 
    return(true);
}

public ResultSet consultar(String sql){
	ResultSet resultado;
	try {
        // Carregar Driver do MySQL
        Class.forName("com.mysql.jdbc.Driver");
        //Fazer a conexão
        //Verifique se o usuário root e a senha 123 são iguais na máquina de teste
        //caso contrário, altere na linha abaixo.
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ecommerce", "root", "123");
		//Criar o fluxo para mandar comando sql o banco
        Statement stmt = con.createStatement(); 			
        // Executa o comando SQL
        resultado = stmt.executeQuery(sql);
        
        return resultado;			
        
    } catch (Exception ex) {
        return null;
    } 
     
    	   	
}

}[/code]

Olha eu não sei direito qual é conhecimento do seu professor, mas o ensino de java e de boas práticas tem quer ser de forma gradual.

É bom começar desse jeito e depois mais tarde evoluir o código e mostrar as diferenças.

Flw!

[quote=SanjuanRJ]Olha eu não sei direito qual é conhecimento do seu professor, mas o ensino de java e de boas práticas tem quer ser de forma gradual.

É bom começar desse jeito e depois mais tarde evoluir o código e mostrar as diferenças.

Flw!

[/quote]

+1

E se você olhar os exemplos que volta e meia dou aqui, vai ver várias coisas que não são boas práticas, mas que uso de propósito para ser mais didático:

  • eu crio classes sem “package” e cujo método “main” é declarado com “throws Exception”;
  • não uso nenhum design pattern;
  • não faço nenhum tratamento decente de exceção;
    etc.

ahuahuahauha…q bom seria se isso ocorre-se, esse código ai ja é a parte avançada da aula…depois disso encerrou jsp…

É meio óbvio que Design patterns nao faz parte de Java. Entao, vá reclamar disso com o prof. de engenharia de software, oras.

vlw pela dica…hj quando chegar la, vou chorar no ombro do prof de eng de sw… :twisted:

Imagina esse mesmo código usando um generic dao e usando hibernate…

ou até mesmo se ele tirasse o sql e colocasse em .properties…

Isso com certeza enrolaria os alunos e comprometeria o ensino.

Depende, se o cara deixou claro que essa forma é apenas para aprender o conceito e que tem vários problemas e tal, e está ciente disso, então beleza.

Mas se ele disse que é assim que se faz e assim que tem que ser feito, então, sinto muito.

Se estiver ensinando a programar, pra mim é válido.
Mas se estiver ensinando a usar a forma “Java” de programar, deveria mostrar esse exemplo e depois ir “enfiando goela abaixo” os padrões existentes. Se não fizer assim, ao meu ver, o aluno aprende e “vicia” no código errado.
Tem que tomar cuidado com o que está aprendendo e da forma como está aprendendo. Mas se ele alertou que é apenas para ser didático, acredito que está certo, afinal, nunca dei aula de programação e não sei ao certo as dificuldades que um iniciante deve possuir (ou vários iniciantes), sem contar a dor de cabeça de ensinar da melhor forma várias cabeças que pensam de formas distintas.

Bom, deixa eu explicar então…

oq acontece é q ja tenho aula com esse professor a uns 4 semestres…quem só ve java na facu, se lasca…e todo mundo reclama, não é de hj q temos problemas com o conteudo…pra começar ele explicou threads em 20 minutos…nunca explicou conceitos OO como polimorfismo, uso de interface, encapsulamento…entre outros…

Postei esse código pq achei bastante ruim como ele fez…no meu ver assim complica mais o entendimento…não precisa usar 30 design patterns, nem arquivos de configurações…para pelo menos separar classe de conexão e acesso ao bd da classe Cliente (ai do exemplo), e tb, na classe de conexão criar um método de conexão para ser usado (no exemplo ele abre uma conexão em todos os métodos de acesso ao bd)…

Imagina um cara sai da sala de aula achando q essa é a forma correta e vai fazer um teste em uma empresa, fazendo tudo desse jeito…será q ele seria contratado?..talvez sim, talvez ñ…mas acredito q como seja uma faculdade, melhor ensinar do jeito correto…

OBS: na aula q ele usou essa classe, não foi o primeiro contato com banco de dados com java, logo já poderia ser feito de outra forma…

Ele fez um ActiveVO :lol:

Se bem que ensinar JDBC com problema de injeção de SQL é motivo para ir para a cadeira elétrica.

Quando eu dei aula de java, já passei JDBC direto no PreparedStatement. É verdade que nenhum aluno aprendeu o negócio (e eu também tenho minha parcela de culpa nisso), mas passar via concatenação de Strings, jamais!

E também não fecha os Statements, ResultSets e Connections em um finally!

O método consultar ou deveria ser privado (e talvez estático) ou simplesmente não pertencer a esta classe.

O campo data_nasc não segue a forma de nomenclatura da Sun.

Coesão e divisão de responsabilidades zero!

É, você está certo, mas eu já me conformei com esse tipo de coisa na minha faculdade.

Não adianta, tem que ser auto didata mesmo.

Faculdade é um tremendo tempo perdido na maioria dos casos.

[quote=SanjuanRJ]É, você está certo, mas eu já me conformei com esse tipo de coisa na minha faculdade.

Não adianta, tem que ser auto didata mesmo.

Faculdade é um tremendo tempo perdido na maioria dos casos.[/quote]

Olha só… Reclamar que esse seu professor é ruim, eu até entendo. Mas dizer que faculdade é perda de tempo, vai depender do que você quer da vida.

Se quer ficar a vida inteira trabalhando como Code Monkey, faculdade é mesmo perda de tempo. Se quer crescer na carreira, faculdade é um passo necessário e se vai ser perda de tempo ou um período de aprendizado, depende MUITO MAIS de VOCÊ que de seus professores, bons ou ruins. essa estória de que o cara é bom demais pra fazer faculdade, pra mim, é papo de profissional arrogante e auto-suficiente. Se é tão bom assim, pq não faz então? Por que não faz mestrado, doutorado, cria alguma coisa nova, abre uma empresa e muda o mundo?

Acredito que esse não seja seu caso, então, aproveita que tem tempo e não entra nessa onda de que estudar e obter titulação é perda de tempo. Jamais encontrei um doutor ou pós doutor arrependido de ter conseguido suas titulações… Já profissionais que deixaram a faculdade e se arrependeram anos depois… Minha lista é bem grande… rssrsr

[quote=josenaldo][quote=SanjuanRJ]É, você está certo, mas eu já me conformei com esse tipo de coisa na minha faculdade.

Não adianta, tem que ser auto didata mesmo.

Faculdade é um tremendo tempo perdido na maioria dos casos.[/quote]

Olha só… Reclamar que esse seu professor é ruim, eu até entendo. Mas dizer que faculdade é perda de tempo, vai depender do que você quer da vida.

Se quer ficar a vida inteira trabalhando como Code Monkey, faculdade é mesmo perda de tempo. Se quer crescer na carreira, faculdade é um passo necessário e se vai ser perda de tempo ou um período de aprendizado, depende MUITO MAIS de VOCÊ que de seus professores, bons ou ruins. essa estória de que o cara é bom demais pra fazer faculdade, pra mim, é papo de profissional arrogante e auto-suficiente. Se é tão bom assim, pq não faz então? Por que não faz mestrado, doutorado, cria alguma coisa nova, abre uma empresa e muda o mundo?

Acredito que esse não seja seu caso, então, aproveita que tem tempo e não entra nessa onda de que estudar e obter titulação é perda de tempo. Jamais encontrei um doutor ou pós doutor arrependido de ter conseguido suas titulações… Já profissionais que deixaram a faculdade e se arrependeram anos depois… Minha lista é bem grande… rssrsr

[/quote]

Você tem toda razão. Faço Sistemas de Informação na UPE, e tenho muitos problemas com o aprendizado inicial de algum conceito de OO. Isso se deu até em polimorfismo, que didaticamente falando, é fácil. Mas tudo isso não é motivo pra dizer que uma graduação não é necessária. Isso até ajuda a desenvolver a cognição do cara. Você ter um título faz muita diferença no mercado. E você ter um título, e ainda saber se virar sozinho vai te dar mais crédito ainda.

Então, aproveite todas as oportunidades que tiver. Tire delas o que for de bom ou de melhor, e siga em frente. Sempre evoluindo paralelamente. Em títulos e em cognição. 8)

Essa é minha opinião!

Isso eh uma coisa que eu nao entendo porque eh TAO simples PreparedStatement, eu fazia “PreparedStatement” quando eu era programador Perl e 1000 anos atras hehehe

Voltando ao topico…
Eu concordo com o que a galera falou acima, eu acho que pra um inicio eh bem mais facil ensinar de uma maneira (que nem sempre eh a mais correta e bonita) pra facilitar o entendimento. Todo mundo sabe que tem pessoas de diferente niveis nas universidades, tem gente que ja eh experiente, gente que mal sabe ligar o computador e gente que nao sabe nada mas que pega rapido as coisas.
Acho que o professor tem que dar uma aula que vai ser aproveitada por todos, do que adianta o professor passar um monte de coisas mais complexas e metade da sala nao entender nada e reprovar?

Mas eh sempre assim, lembro que na minha facul era cheio de espertalhao que ficava toda hora metendo o pau nos professores de materias relacionadas com informatica. E nos outros assuntos (por exemplo matematica) ficavam reclamando que a professora tava pegando muito pesado (mesmo sem ser tao dificil assim).

Fora que eu acho que nao importa se o seu professor eh bom ou ruim, facul boa ou ruim… quando vc sai da facul e vai trabalhar provavelmente vc nao usa muito as coisas que vc aprendeu.

//Daniel

Ainda bem que na faculdade, pelo menos nas matérias de programação, tive professores muito bons. Dei sorte que a maioria deles não eram apenas professores de programação, ao contrário, tiravam um ou dois dias na semana a noite para dar a aula e realmente passavam o dia trabalhando com isso em outras empresas (inclusive públicas) na área de desenvolvimento.

[quote=victorwss]Se bem que ensinar JDBC com problema de injeção de SQL é motivo para ir para a cadeira elétrica.

Quando eu dei aula de java, já passei JDBC direto no PreparedStatement. É verdade que nenhum aluno aprendeu o negócio (e eu também tenho minha parcela de culpa nisso), mas passar via concatenação de Strings, jamais!

E também não fecha os Statements, ResultSets e Connections em um finally!

O método consultar ou deveria ser privado (e talvez estático) ou simplesmente não pertencer a esta classe.

O campo data_nasc não segue a forma de nomenclatura da Sun.

Coesão e divisão de responsabilidades zero![/quote]

justamente…isso q eu quis dizer postando aki…tem mta coisa estranha nesse código…e poderia ser melhor explicado, e com certeza não ficaria extremamente complicado…como por exemplo, entender um automato finito…hierarquia de Chonsky… :shock: …

Mas com relação a faculdade em geral…considero de extrema importancia sim…e sem um diploma de graduação, fica mto dificil se especializar e até arrumar trabalho…o problema é pegar uns professores ruins assim…mas no geral é da hora… :smiley: