Objektově orientované programování ve 4D: Správa dědičnosti tříd

Automaticky přeloženo z Deepl

V jednom z předchozích příspěvků jsme si představili velmi důležitý koncept objektově orientovaného programování: Třídy. Nyní si projdeme další klíčový koncept: Dědičnost, mechanismus, který umožňuje třídě přebírat chování jiné třídy.

Příklad databáze

Vzpomínáte si na příklad z předchozího příspěvku na blogu se třídou „Osoba“ ? Představme si školu a chceme spravovat studenty a učitele. Obě jsou osoby, ale s různými vlastnostmi. Vytvoříme tedy třídu „Učitel“ a třídu „Student“ a obě třídy zdědí vlastnosti od třídy „Osoba“.

Jak se dědí třída A od jiné třídy?

Nový Class extends K usnadnění dědění je nyní k dispozici klíčové slovo. Na našem školním příkladu vytvoříme třídu „Student“, která zdědí třídu „Osoba“.

Class Extends Person

A co konstruktor?

Pak se pro konstruktor (pokud jste pro třídu „Student“ nedefinovali konkrétní konstruktor) automaticky zavolá konstruktor třídy „Osoba“.

Můžete také přepsat konstruktor. Například v případě třídy „Student“: student má jméno, příjmení a datum narození jako osoba, ale student má také třídu a školu. V tomto případě můžete použít nový Super příkaz, který vám umožní zavolat konstruktor nadřazené třídy. V konstruktoru třídy „Student“ pak můžete přidat specifický kód pro třídu a školu.

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

A funkce?

Můžete přidat funkce specifické pro třídu „Student“, ze které můžete volat funkci nadřazené třídy („Osoba“).

V následujícím příkladu máme funkci, která vrací řetězec obsahující jméno studenta, třídu a školu. Ve třídě „Osoba“ již máme funkci, která vrací celé jméno osoby. Zavoláme tedy tuto funkci, getFullName, a přidáme informace specifické pro studenta.

Function getIdentity
C_TEXT( ) := . ()+", "+ . +" známka v "+ .$0
$0SupergetFullNameThisGradeThisSchoolName

V metodě instancujeme instanci třídy „Student“. Funkci getFullName voláme z nadřazené třídy „Osoba“. Poté zavoláme funkci getIdentity ze třídy „Student“. Jak vidíte, mezi funkcemi getFullName a getIdentity nejsou žádné rozdíly.

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

Živá ukázka pro shrnutí

Vanessa Talbot
• Product Owner • Vanessa Talbot se připojila k programovému týmu 4D v červnu 2014. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Od svého příchodu pracovala na definování klíčových prvků ve 4D. Pracovala na většině nových funkcí preemptivního multi-threadingu a také na velmi složitém tématu: nové architektuře pro enginované aplikace. Vanessa má titul z Telecom Saint-Etienne. Svou kariéru začala ve Výzkumném ústavu kriminalistickém jako vývojářka pro audiovizuální oddělení. Působila také v mediální a lékařské oblasti jako expertka na technickou podporu, produkci i dokumentaci novinek.