Javascript e Orientação a Objetos

Gosto muito de Javascript. Ponto. Há aqueles que odeiam e dizem ser uma linguagem horrível. Infelizmente, se você é um programador Web, deveria se acostumar com esta linguagem e aprender a usá-la da melhor forma possível. Ah, e documente seu código, assim como você faz em suas classes Java, C#, Python ou Ruby. Em grande parte dos projetos que trabalhei, o código em Javascript era renegado. É como se fosse algo indesejado, mas que era necessário.

Que desprezo, hein?! O coitado faz toda validação da tela para você, inclui comportamentos legais que impressionam o cliente, como um botão que muda de cor, e você ainda chama o coitado de “linguagem horrível”? Reveja seus conceitos.

Mas… meu objetivo agora é compartilhar uma nova forma que encontrei para programar em Javascript. Sempre preferi programar com orientação a objetos. É mais elegante, mais reutilizável, etc e tal. Mas Javascript tem um problema: não dá para ter métodos e atributos privados. Não dava… Eis que existe uma forma elegante de se fazer isto. Em outro post eu relatei diversas formas para se criar uma classe em Javascript. Mas faltou uma! E exatamente a que achei mais elegante. Veja o código abaixo:

 MinhaClasse = function(parametroConstrutor) {
 	// Aqui vamos colocar os métodos e atributos privados.
 	var umAtributoPrivado = "Eu Sou um Atributo Privado e Você Não me Pega!!";
 	// Um método privado.

 	function umMetodoPrivado() {
 		// Daqui você tem acesso à variável passada para o construtor da classe.
                var mensagem = "Eu Sou um Método Privado!";
                mensagem += "E o parâmetro passado para o construtor foi: ";
                mensagem += parametroConstrutor;
 		alert(mensagem);
 	}

 	// A partir daqui é tudo público!
 	return {
 	 	umAtributoPublico: "Eu Sou um Atributo Público!!!",

 	 	umMetodoPublico: function() {
                        var mensagem = "Eu Sou um Método Público!";
                        mensagem += "E o parâmetro passado para o construtor foi: "
                        mensagem += parametroConstrutor;
 			alert(mensagem);
 		},

 	 	chamarOMetodoPrivado: function() {
 			// Daqui você pode chamar os métodos privados!
 			umMetodoPrivado();
 		}
 	};
}

var teste = new MinhaClasse("Será que Vai?");

// COMENTA E DESCOMENTA LINHA A LINHA para ver passo a passo funcionando!

teste.umMetodoPrivado(); // Erro!! Diz que não acha a função.
//alert(teste.umAtributoPrivado); // Vai apresentar um alert com "undefined".
//alert(teste.umAtributoPublico); // FUNCIONOU HEIN!!!
//teste.umMetodoPublico(); // FUNCIONOU HEIN!!!
//teste.chamarOMetodoPrivado(); // FUNCIONOU HEIN!!

Viu que bacana? Você tem uma área para declarar métodos e atributos privados, assim como uma área para métodos públicos. E o código também fica bem organizado.

×