Muitos de vós têm pedido para serem capazes de definir um tipo de objecto desde que o tipo de objecto se tornou disponível. Graças à notação de objecto, muitos de vós sonham em ter funções de objecto. Não sonhem mais e digam olá às aulas na base de dados de projectos 4D v18 R3! Neste post de blogue, estamos a introduzir um dos conceitos mais interessantes de programação orientada a objectos … juntamente com um exemplo de base de dados e um vídeo bónus!
Nota: A partir de 4D v18 R3, todas as HDIs serão alojadas no GitHub. Pode clonar o HDI ou descarregar directamente o ficheiro Zip. Consulte este parágrafo para mais detalhes.
O que é uma classe?
Uma classe é um tipo de dados definido pelo utilizador que lhe permite definir o comportamento de um objecto. Contém as suas próprias funções de membro que podem ser acedidas e utilizadas quando uma instância da classe é criada.
Como criar uma classe
Pode criar uma classe a partir do Novo menu na barra de ferramentas ou a partir do diálogo do Explorador. Agora que o editor de classes é exibido, é possível criar o construtor e as funções.
Como criar funções de classe?
Para criar uma função, deve utilizar a palavra-chave Function seguida do nome da função. Depois, pode passar parâmetros (como com os métodos).
Function methodName
( ; ) :="Olá "+ C_TEXT$0$1
$0$1
O que é a loja da classe?
Já conhece o comando ds (que lhe permite aceder à datastore). Agora, utilizando a mesma lógica, tem o comando cs que lhe devolve a loja de classes. Todas as classes que cria são visíveis e disponíveis na loja de classes.
Para criar um objecto que é uma instância de uma classe, usa o comando cs e a função de membro new.
C_OBJECT($o)
$o :=cs.myClass.new()
O que é um construtor?
Um construtor é utilizado para criar e instanciar um objecto com atributos por defeito. É chamado automaticamente quando o objecto é inicializado.
No editor, basta escrever Class constructor. Pode passar parâmetros ao seu construtor para inicializar certas variáveis, tal como pode fazer com um método usando $1, $2, etc.
Para a classe:
Class constructor
( ) . := C_LONGINT$1
Thisvariable$1
Para o método que instancia um objecto da classe, passar o parâmetro para a função de novo membro:
C_OBJECT($o)
$o :=cs.Class1.new(8)
Exemplo
Vejamos um exemplo concreto com uma classe “Pessoa”. Eu crio:
- um construtor,
- uma função getFullName,
- uma função getAge.
Aqui está o conteúdo da minha aula:
Class constructor
( ) ( ) ( ) . := . := . := ( ) := . +" "+ ( . ) ( ) :=( - . )/365.25 C_TEXT$1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate
ThisfirstName$1
ThislastName$2
Thisbirthdate$3
Function getFullName
C_TEXT$0
$0ThisfirstNameUppercaseThislastName
Function getAge
C_LONGINT$0
$0Current dateThisbirthdate
Agora, num método, crio um objecto “Pessoa”. Em seguida, leio os atributos e executo as funções.
C_OBJECT($o)
$o :=cs.Person.new("John"; "Doe";!1956-10-27!) // instantiate the object
$firstname :=$o.firstName // return John
$lastname :=$o.lastName // return Doe getFullName
$fullName :=$o. () // return John DOE
$age :=$o.getAge(
) // return 63
O que se segue?
No próximo post do blogue, discutiremos a noção de herança entre as classes.