Elementos de Programação Orientada a Objetos

A linguagem JavaScript permite o desenvolvimento de programas orientados a objetos. Ao desenvolver uma aplicação para web, portanto, é possível pensar orientado a objetos.

Os dois conceitos clássicos da Programação Orientada a Objetos são o objeto e a classe. Em muitas linguagens todo objeto pertence a alguma classe. Para ser criado é preciso que antes haja a classe. Em JavaScript, porém, é possível haver um objeto sem que haja a correspondente classe.

Observação: Estritamente falando, não existe o conceito de classe em JavaScript. Tudo são objetos. Porém, na prática, para o desenvolvedor acostumado com o conceito de classe é aceitável, e prático, pensar que classes existem.

Objetos sem Classe

Para criar um objeto sem vínculo a nenhuma classe basta declarar os seus atributos e respectivos valores.

No exemplo a seguir, o objeto p possui 3 atributos (turma, matriculados e aprovados) e 2 métodos (incrementeAprovados e getPercentualAprovacao).

const p = {
  turma: 'INE5646 Programação para Web',
  matriculados: 28,
  aprovados: 0,

  incrementeAprovados: function () {
    if (this.aprovados < this.matriculados)
       this.aprovados++;
  },

  getPercentualAprovacao: function () {
    return this.aprovados / this.matriculados;
  }
};

Para acessar os atributos e executar os métodos basta

let t = p.turma;
let m = p.matriculados;
p.incrementeAprovados();
let pa = p.getPercentualDeAprovacao();

Classes Pré-definidas

JavaScript possui algumas classes pré-definidas e estão disponíveis para uso.

Alguns exemplos destas classes são mostradas a seguir.

Date

Permite representar um instante no tempo.

let agora = new Date();
let mes = agora.getMonth(); // meses de 0 a 11

Map

Permite representar uma tabela de hash.

No exemplo a seguir a tabela de hash estados tem como chaves as siglas dos estados brasileiros (sc, sp e rs) e associa a cada chave um objeto que armazena o nome do estado e o nome da capital do estado.

A variável capitalSC armazenará a string Florianópolis.

const estados = new Map();
estados.set('sc', {nome: 'Santa Catarina', capital: 'Florianópolis'});
estados.set('sp', {nome: 'São Paulo', capital: 'São Paulo'});
estados.set('rs', {nome: 'Rio Grande do Sul', capital: 'Porto Alegre'});

let capitalSC = estados.get('sc').capital;
Leitura Sugerida
Relação completa de classes pré-definidas.
POO Baseada em Protótipos

Classes Definidas Pelo Desenvolvedor

A partir da versão ES2015, também conhecida omo ES6, ficou bem mais simples definir classes e também hierarquia de classes.

No exemplo a seguir temos as seguintes definições:

  • Classe Pessoa
    • atributos _nome e _idade. Por convenção, atributos iniciados com _ devem ser entendidos como não públicos e nunca devem ser usados fora da classe.
    • métodos:
      • get idade para retornar a idade da pessoa
      • set idade para alterar a idade de uma pessoa
      • get nome para retornar o nome da pessoa
  • Classe PessoaJuridica que é subclasse de Pessoa, ou seja, uma pessoa jurídica é um tipo de pessoa.
    • atributos nome e idade herdados de Pessoa
    • atributo cpf
    • métodos:
      • todos os métodos definidos em Pessoa
      • get cpf para retornar o CPF da pessoa jurídica
class Pessoa {
  constructor (nome, idade) {
    this._nome = nome;
    this._idade = idade;
  }

  get idade () {
    return this._idade;
  }

  set idade(idade) {
      this._idade = idade;
  }

  get nome () {
    return this._nome;
  }
}

class PessoaJuridica extends Pessoa {
  constructor(nome, idade, cpf) {
    super(nome, idade);
    this._cpf = cpf;
  }

  get cpf() {
    return this._cpf;
  }
}

O exemplo a seguir mostra como usar as classes Pessoa e PessoaJuridica.

// p1 é um objeto da classe Pessoa
let p1 = new Pessoa('Primeira Pessoa', 21);

// p2 é um objeto da classe PessoaJuridica
let p2 = new PessoaJuridica('Segunda Pessoa', 22, 102030);

// nomeP1 é o nome de p1, ou seja, 'Primeira Pessoa'
let nomeP1 = p1.nome;

// idadeP1 é a idade de p1, ou seja, 21
let idadeP1 = p1.idade;

// alterando a idade de p1 para 30
p1.idade = 30;

// agora idadeP1 vale 30
idadeP1 = p1.idade

// nomeP2 é o nome de p2, ou seja, 'Segunda Pessoa'
let nomeP2 = p2.nome;

// cpfP2 é o CPF de p2, ou seja, 102030;
let cpfP2 = p2.cpf;

results matching ""

    No results matching ""