Uma introdução à programação orientada a objectos em 4D: Aulas

Tradução automática de Deepl

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!

Exemplo com a classe “Pessoa

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.

Vanessa Talbot
• Proprietário do produto - Vanessa Talbot entrou ao time 4D Program em Junho de 2014 como Proprietária do Produto e está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Desde sua chegada, trabalhou na definição de funcionalidades chaves em 4D. Trabalhou na maioria das novas funcionalidades multithread preemptivo e também em um tema muito complexo: a nova arquitetura para a aplicação engined. Vanessa é formada pela Telecom Saint-Etienne. Começou sua carreira no Instituto de Investigação Criminal como desenvolvedora do departamento audiovisual. Também trabalhou em meios de comunicação e no âmbito médico como especialista em assistência técnica, produção e documentação de novas funcionalidades.