Kurzusok
/
Factor
Factor
/
Feladatok
/
Sárkányok leszármazottai
Sárkányok leszármazottai

Sárkányok leszármazottai

Tanulófeladat

Bevezetés

A tuple kiterjeszthet egy másik tuple-t. A TUPLE: child < parent slots ; egy olyan osztályt deklarál, amelynek a példányai egyben a parent példányai is: a sajátjaik mellett megkapják a szülő slotjait is, és rajtuk a szülő accessorai is működnek, pont mintha a gyermeken lettek volna definiálva.

USING: accessors ;

TUPLE: animal name age ;
TUPLE: dog < animal breed ;

"Rex" 4 "labrador" dog boa .
! => T{ dog { name "Rex" } { age 4 } { breed "labrador" } }

"Rex" 4 "labrador" dog boa name>> .   ! => "Rex"   (inherited accessor)

A boa slotjainak sorrendje

A boa konstruktor a slotokat deklarációs sorrendben, a szülőkkel kezdve várja. A fenti dog esetében:

dog boa ( name age breed -- dog )

Egy unoka, puppy < dog , amely hozzáad egy weeks slotot, így nézne ki:

puppy boa ( name age breed weeks -- puppy )

A predikátumok hierarchiája

Minden TUPLE: deklaráció létrehoz egy predikátumot (name?). Öröklés esetén a predikátumok egymásba ágyazódnak. Minden leszármazott kielégíti a felmenői predikátumait:

"Rex" 4 "labrador" dog boa
dup dog? .        ! => t
dup animal? .     ! => t

Ez viszont fordítva nem igaz: egy animal, amely nem dog, nem elégíti ki a dog? predikátumot.

Előretekintés

A generikus metódusok (M:, amelyeket a generics mutat be) szintén felfelé diszpécselnek a hierarchiában: az animal-re definiált metódus minden leszármazottnál lefut, hacsak egy konkrétabb felülírás nem élvez elsőbbséget. Ezt rögtön a feladat után a boatswains-bilge-ben látni fogod.

Utasítások

Egy természetbúvár a kaldera körül élő sárkányokat katalogizálja. Sok tulajdonságuk közös, minden sárkánynak van neve, színe és kora, mégis jellegzetes módon specializálódtak. Egy kis öröklődési fát építesz sárkányosztályokból, meg egyetlen szót, amely bármelyik leszármazottat megöregbíti.

1. A sárkánycsalád

Még az elején definiáld a teljes öröklődési fát tuple-osztályokból (a konstruktoraik a következő részfeladatokban jönnek):

  • dragon a name, color és age slotokkal.
  • fire-dragon, a dragon alosztálya, amely egy flame-temp slotot ad hozzá.
  • ice-dragon, a dragon egy másik alosztálya, amely egy chill-temp slotot ad hozzá.
  • volcano-dragon, a fire-dragon alosztálya, amely egy lava-volume slotot ad hozzá.

Ezután adj a dragon-nek egy <dragon> konstruktort.

"Falkor" "white" 100 <dragon> name>> .   ! => "Falkor"

2. A tűzlehelők

Adj a fire-dragon-nak egy <fire-dragon> konstruktort.

"Smaug" "red" 500 1200 <fire-dragon> flame-temp>> .   ! => 1200
"Smaug" "red" 500 1200 <fire-dragon> dragon? .        ! => t

3. A jéglehelők

Adj az ice-dragon-nak egy <ice-dragon> konstruktort.

"Frosty" "blue" 200 -40 <ice-dragon> chill-temp>> .   ! => -40
"Frosty" "blue" 200 -40 <ice-dragon> fire-dragon? .   ! => f   (siblings)

4. A vulkánlakók

Adj a volcano-dragon-nak egy <volcano-dragon> konstruktort.

"Vesuvius" "red" 1000 1500 99 <volcano-dragon> dragon? .       ! => t
"Vesuvius" "red" 1000 1500 99 <volcano-dragon> fire-dragon? .  ! => t

5. Bármelyik sárkány megöregbítése

Definiáld az age-dragon szót, hogy eggyel növelje bármely sárkány (vagy leszármazott) age slotját. Nem ad vissza semmit.

"Falkor" "white" 100 <dragon> dup age-dragon age>> .   ! => 101

Ugyanannak a szónak minden leszármazotton működnie kell, éppen ez a lényege a közös accessornak.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Factor Exercism

Készen állsz elkezdeni a(z) Sárkányok leszármazottai feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.