Javascript: classes e objetos
Afluentes: Desenvolvimento Front-end I, Usabilidade, desenvolvimento web, mobile e jogos.
Objetos
Os objetos são tipos especiais que possuem atributos e métidos. No Javascript, temos o nome do objeto e um atributo ou método separado por ponto.
Para criar um objeto do tipo animal:
var animal = { tipo:"gato", cor:"preto" }
Para usar um atributo:
animal.cor = "branco";
document.write(animal.tipo);
É possível adicionar um novo atributo dinâmicamente:
animal.nome = "Kuroneko";
Classe
No javascript não existe exatamente o conceito orientação a objetos, mas é possível construir classes por meio da prototipação. Podemos construir variáveis e simular o comportamento de uma classe.
<!DOCTYPE html>
<html>
<head>
<title>Animal</title>
</head>
<body>
<script>
class Animal {
static cores = ["Branco", "Preto", "Malhado"];
constructor(tipo, cor, idade) {
// Atributos
this.tipo = tipo;
this.cor = cor;
this.idade = idade;
}
//Métodos
mudaIdade(novaIdade) {
this.idade = novaIdade;
}
// Método estático
static getCoresJson() {
return JSON.stringify(Animal.cores);
}
}
// Cria um objeto do tipo Animal
let gato = new Animal("gato", "Preto", 2);
let cachorro = new Animal("cão", "Branco", 1);
let gecko = new Animal("gecko", "Verde", 4);
// Imprime os atributos na página. Veja que estamos vendo o
// Objeto como um JSON e transformamos ele em string.
document.write(JSON.stringify(gato) + "<br>");
document.write(JSON.stringify(cachorro) + "<br>");
document.write(JSON.stringify(gecko) + "<br>");
document.write(JSON.stringify(Animal.cores) + "<br>");
document.write(Animal.getCoresJson());
</script>
</body>
</html>
Herança
A orientação a objetos possui um recurso de reutilização de código em que herdamos código de outra classe. Nesse caso, a classe filha pode herdar atributos (variáveis) e métodos (funções) de uma classe pai. Isso é chamado de herança.
No exemplo abaixo, criamos a classe Animal
com dois atributos (tipo
e nome
) e o método getInfo()
. Vejam que a classe Pet
herda a classe Animal com a palavra chave extends
. Então, um objeto instanciado a partir de Pet, também tem os atributos e métodos da classe Animal.
<!DOCTYPE html>
<html>
<body>
<script>
class Animal {
constructor(tipo, nome) {
this.tipo = tipo;
this.nome = nome;
}
getInfo() {
return 'Eu sou um ' + this.tipo + ' e me chamo ' + this.nome;
}
}
class Pet extends Animal {
constructor(tipo, nome, idade) {
super(tipo, nome);
this.idade = idade;
}
show() {
document.write(this.getInfo() + ' e tenho ' + this.idade + ' anos<br>');
}
}
var a1 = new Animal("vaca", "Joaninha");
var p1 = new Pet("cão", "Leon", 2);
var p2 = new Pet("gato", "Kuroneko", 3);
document.write(a1.getInfo() + "<br>");
p1.show();
p2.show();
</script>
</body>
</html>
Atividade
Crie um formulário com informações para serem envidadas à um servidor (por exemplo: nome, cpf, idade, telefone, data de nascimento, e-mail, senha e campo para redigitar a senha com um botão de apagar tudo e outro botão para enviar). Mas pensem em uma aplicação específica e com um objetivo certo. Aqui só coloquei uma ideia bastante genérica.
Quando clicar no botão enviar, usando JavaScript, valide o formulário, ou seja, todos os campos do formulário. Todas as questões devem ser obrigatórias. Caso um ou mais campos não esteja ok, mostre onde estão os erros.
Caso o formulário tenha sido validado, mostre, em um campo textarea
não editável os dados no formato de string JSON.
Usar HTML, CSS e JavaScript (pode usar Bootstrap também). Trabalhe com classes, objetos e eventos.