Programación orientada a objetos en 4D: Gestionar la herencia de clases

Traducido automáticamente de Deepl

En una entrada anterior del blog, introdujimos un concepto muy importante en la programación orientada a objetos: Las clases. Ahora repasaremos otro concepto fundamental: La herencia, el mecanismo que permite a una clase adquirir el comportamiento de otra clase.

Ejemplo de base de datos

¿Recuerdas el ejemplo de la entrada anterior con la clase «Persona»? Imaginemos un colegio y queremos gestionar alumnos y profesores. Ambos son personas, pero con características diferentes. Así que creamos una clase «Profesor» y una clase «Alumno», y ambas clases heredan características de la clase «Persona».

¿Cómo se hereda una clase de otra?

Una nueva Class extends para facilitar la herencia. Utilizando nuestro ejemplo de la escuela, creamos una clase «Estudiante» que hereda la clase «Persona».

Class Extends Person

¿Y el constructor?

Pues para el constructor (si no has definido un constructor específico para la clase «Alumno»), se llama automáticamente al constructor de la clase «Persona».

También se puede anular un constructor. Por ejemplo, en el caso de «Estudiante»: un estudiante tiene un nombre, apellido y fecha de nacimiento como una persona, pero un estudiante también tiene un grado y una escuela. En este caso, puede utilizar el comando new Super que permite llamar al constructor de la clase padre. Luego, en el constructor «Estudiante», puede añadir el código específico para el grado y la escuela.

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
ThisGrade$5

¿Y las funciones?

Se pueden añadir funciones propias de la clase «Alumno» desde las que se puede llamar a una función de la clase padre («Persona»).

En el siguiente ejemplo, tenemos una función que devuelve una cadena que contiene el nombre, el grado y la escuela del estudiante. En la clase «Persona», ya tenemos una función que devuelve el nombre completo de una persona. Así que llamamos a esta función, getFullName, y añadimos la información específica de un estudiante.

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

En un método, instanciamos una instancia de la clase «Estudiante». Llamamos a la función getFullName de la clase padre, «Persona». Luego, llamamos a la función getIdentity desde la clase «Alumno». Como puedes ver, no hay diferencias entre las funciones getFullName y getIdentity.

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

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

Una demostración en vivo para resumir

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.