Skip to content

Orientação a objetos

Leonel Sanches da Silva edited this page Jan 9, 2024 · 6 revisions

Delégua tenta ser uma linguagem puramente orientada a objetos, embora ainda não seja.

Para estruturas de dados como texto, alguns métodos são implementados por padrão. Por exemplo:

var t = "TUDO EM MAIÚSCULO"
escreva(t.minusculo()) // Imprimirá "tudo em maiúsculo"

Na atribuição acima, Delégua tenta inferir o tipo da variável. Como o lado direito contém um literal de texto, Delégua infere a variável como sendo do tipo texto, sendo assim possível chamar o método .maiusculo().

Classes

A linguagem Delégua suporta orientação a objetos nativamente.

Criando uma classe

Uma classe é criada com a palavra reservada classe:

classe Teste {}

Instanciando um objeto de uma classe

A instância de uma classe, ou seja, um objeto, é criada a partir da chamada do construtor de uma classe, ou seja, uma função cujo nome é o nome da classe:

classe Teste {}

var teste = Teste();
escreva(teste); // escreve "<Teste instância>"

Construtor

Construtor é um método-padrão que é automaticamente chamado ao instanciar uma classe. Em Delégua, esse método tem a palavra reservada construtor seguida de parênteses com argumentos.

classe Teste {
  construtor() {
    escreva("começou");
  }
}

var teste = Teste(); // escreve "começou"

Como qualquer outra função, um construtor pode ter ou não argumentos.

Métodos

Métodos são funções de uma classe. Diferentemente de funções, são criados sem a palavra-chave de função.

classe Teste {
  testeFuncao() {
    escreva("olá");
  }
}

Esses métodos podem ser acessados por meio da instância com ..

classe Teste {
  testeFuncao() {
    escreva("olá");
  }
}

var teste = Teste();
teste.testeFuncao(); // escreve "olá"

Propriedades

Uma propriedade (ou estado, em Égua) é uma variável dentro de uma classe. Toda propriedade usada por uma classe precisa ser declarada com algum tipo (especialmente a partir da versão 0.29.0), podendo ser um tipo elementar de Delégua ou uma outra classe previamente declarada no seu código.

classe Teste {
  a: número
}

O acesso a propriedades (ler e definir) pode ser feito usando a palavra reservada isto.

classe Teste {
  a: número

  testeFuncao() {
    isto.a = 100
    escreva(isto.a) // escreve "100"
  }
}

var teste = Teste();
teste.testeFuncao();

Isto

Dentro de cada instância de método, existe a palavra reservada isto, que representa a própria instância da classe, ou o objeto propriamente dito.

classe Teste {
  construtor() {
    escreva(isto);
  }
}

var teste = Teste(); // escreve "<Teste instância>"

Herança

Em Delégua, é possível criar uma classe descendente a partir de uma classe ancestral, mantendo as suas características iniciais e permitindo a inclusão de novos elementos de classe, como propriedades, construtores e métodos.

classe Animal {}

classe Cachorro herda Animal {}
classe Animal {
  corre() {
    escreva("correndo");
  }
}

classe Cachorro herda Animal {}

var thor = Cachorro();

thor.corre();

É possível também fazer a chamada de um método pertencente a uma classe ancestral na classe descendente usando a declaração super.

classe A {
  data(data) {
    escreva(data);
  }
}

classe B herda A {
  construtor(data) {
    super.data(data);
  }
}

var a = B("13/12/1981");

A partir da versão 0.27.0, para chamar o construtor da classe ancestral, use:

classe B herda A {
  construtor() {
    super();
  }
}