Programação orientada a objectos em 4D: Gerir herança de classe

Tradução automática de Deepl

Num post de blog anterior, introduzimos um conceito muito importante na programação orientada para objectos: Aulas. Agora vamos passar por outro conceito central: Herança, o mecanismo que permite a uma classe adquirir o comportamento de outra classe.

Exemplo de base de dados

Lembra-se do exemplo no post anterior do blogue com a classe “Pessoa” ? Imaginemos uma escola e queremos gerir alunos e professores. Ambos são pessoas, mas com características diferentes. Assim, criamos uma classe “Professor” e uma classe “Estudante”, e ambas as classes herdam características da classe “Pessoa”.

Como se herda uma classe de outra?

Uma nova Class extends A palavra-chave está agora disponível para facilitar a herança. Usando o nosso exemplo escolar, criamos uma classe “Estudante” que herda a classe “Pessoa”.

Class Extends Person

E o construtor?

Então para o construtor (se não tiver definido um construtor específico para a classe “Estudante”), o construtor da classe “Pessoa” é automaticamente chamado.

Também se pode substituir um construtor. Por exemplo no caso de “Estudante”: um estudante tem um nome, apelido, e data de nascimento como pessoa, mas um estudante também tem uma nota e uma escola. Neste caso, pode utilizar o novo Super o que lhe permite chamar o construtor da classe mãe. Depois, no construtor “Estudante”, pode adicionar o código específico da classe e da escola.

Class constructor
C_TEXT( ) ( ) ( ) ( ) ( ) ( ; ; ) $1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate
C_TEXT$4 // SchoolName
C_TEXT$5 // Grade
Super$1$2$3 // Call the "Person" constructor
This
.SchoolName:= $4
This . :=Grade$5

E as funções?

Pode adicionar funções específicas à classe “Estudante” a partir da qual pode chamar uma função da classe mãe (“Pessoa”).

No exemplo seguinte, temos uma função que devolve uma string contendo o nome do aluno, a nota, e a escola. Na turma “Pessoa”, já temos uma função que devolve o nome completo de uma pessoa. Assim, chamamos a esta função, getFullName, e acrescentamos a informação específica de um aluno.

Function getIdentity
C_TEXT( ) := . ()+", "+ . +" nota em "+ .$0
$0SupergetFullNameThisGradeThisSchoolName

Num método, instanciamos uma instância da classe “Estudante”. Chamamos à função getFullName da turma “Pessoa” da classe “Pais”. Depois, chamamos à função getIdentity da turma “Estudante”. Como se pode ver, não há diferenças entre as funções getFullName e getIdentity.

C_OBJECT($s)
$s :=cs.Student.new("Joe"; "Doe";!2002-02-20!; "Waco High School"; "10")

$name :=$s.getFullName() //return John Doe
$identity :=$s.getIdentity() //return Joe DOE, 10th grade in Waco High School

Uma demonstração ao vivo para resumir

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.