-
Notifications
You must be signed in to change notification settings - Fork 21
Orientação a objetos
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()
.
A linguagem Delégua suporta orientação a objetos nativamente.
Uma classe é criada com a palavra reservada classe
:
classe Teste {}
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 é 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 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á"
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();
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>"
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();
}
}