JavaScript OOP #2 – Conceitos Básicos

Neste artigo relativo a JavaScript Orientado a Objectos vamos abordar a programação orientada a objectos de uma forma mais soft explicando a todos os que nunca viram POO (Programação Orientada a Objectos) em JavaScript, os conceitos básicos.

Criando Construtores

Em JavaScript, um construtor é nada mais que uma função comum, que é instanciada numa variável. Essa instância cria-se através da palavra reservada new, indicando a criação de um novo objecto.

function MyFunction() {}
var MyVar = new MyFunction();

Definir Propriedades

Propriedades, ou também conhecidas como atributos, são dados que ficam encapsulados no escopo do objecto com que são relaccionadas.

Utilizemos um exemplo mais comum  e menos abstracto como por exemplo as caracteristicas de uma pessoa.

function Individuo() { return this; }

var eu = new Individuo();
eu.nome = "João Pedro Pereira";
eu.altura = "186";

No código acima, definimos um nome e uma altura apenas ao objecto eu. Qualquer outro objecto criado a partir de Individuo não terá essa propriedade. Podemos ver a utilidade disto quando precisamos de dar caracteristicas mais restrictas ao objecto. No entanto, caso estejamos a falar de caracteristicas que serão comuns a todos os objectos ai já será mais dispendioso fazê-lo desta forma, mas felizmente existem alternativas.

Imaginemos que estamos a falar de apenas de individuos portugueses. Seguindo o método mostrado anteriormente ficaria algo do género

var eu = new Individuo();
eu.nome = "João Pedro Pereira";
eu.altura = "186";
eu.pais = "Portugal";

Mas para cada individuo criado teriamos de introduzir o país, e se é sempre o mesmo qual o interesse? Podemos antes usar outra abordagem.

function Individuo() {
this.pais = "Portugal";
}

Assim todos os individuos criados têm a propriedade (atributo) país definida como Portugal. Mas imaginemos, que afinal vão existir um ou outro individuo na nossa lista que o seu país não é Portugal. Como proceder?

var eu = new Individuo();
var outro= new Individuo();
outro.pais = "Brasil";

Se fizermos a verificação da seguinte forma:

alert(outro.pais);
alert(eu.pais);

Podemos comprovar que o objecto eu, terá a propriedade pais com o valor de Portugal e o objecto outro terá a propriedade pais com o valor Brasil. Veja o comportamento.

Existem algumas propriedades / atributos que interessam ser dados ao nosso objecto logo quando ele é criado como por exemplo o nome (nesta caso concreto). E então podemos passar essa propriedade logo quando criamos o objecto. Mas para isso a nossa função vai ter de estar preparada para receber essas propriedades quando o objecto é criado. Então teremos de construir a nossa função algo semelhante a isto:

function Individuo(meu_nome) {
this.nome = meu_nome;
}

E então quando criarmos o objecto daremos o nome ao individuo assim:

var eu = new Individuo("João Pedro Pereira");

No exemplo anterior só foi passado uma propriedade mas podem ser passadas quantas quisermos por exemplo:

function Individuo(meu_nome, meu_pais) {
this.nome = meu_nome;
this.pais = meu_pais;
}

var eu = new Individuo("João Pedro Pereira", "Portugal");

Definir Métodos

Tal como as propriedade / atributos (falados no capitulo anterior) é possível adicionar métodos a cada objecto, ou seja comportamentos (popularmente falando) e não passam de funções que são exectuadas no escopo do objecto ao qual estão atribuidos.

Vamos agora passar para um robot, vamos criar um pequeno robot.

function Robot(nome, versao) {
this.id = nome;
this.version = versao;
this.talk = function(message) {alert(message);}
}

var robot = new Robot("Basic", "2.0");
robot.talk("Olá eu sou um robot");

Visualizar comportamento.

Para quem utiliza libs como jQuery (por exemplo) começa a compreender como é que funcionam as coisas.

Só para brincar um bocadinho com isto vamos ver o comportamento com uma verificação..

function Robot(nome, versao) {
this.id = nome;
this.version = versao;
this.talk = function(message) {
if(message == "introduce") {
alert("Olá, o meu nome é " + this.id + " e estou na versão " + this.version);
} else {
alert(message);
}
}
}
var robot = new Robot("Basic", 2.0);
robot.talk("introduce");

Quem és Robot?

Espero que tenha gostado do post, qualquer sugestão é bem vinda. Têm de seguida links para complementar a leitura deste artigo. No próximo post falarei de encapsulamento (uma funcionalidade não existente no JavaScript mas é possível criar um recurso idêntico.

Leitura Complementar

3 comments

  1. Excelente artigo!
    Eficiente, coeso e sucinto.
    Vai direto ao ponto mas é ao mesmo tempo abrangente.
    Parabéns.

Leave a Reply to Anderson Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.