Ruby tappoġġja eredità singola (<) — klassi tirreriferi minn superclass wieħed. Meta tistednija metodu, Ruby tfittex fuq passaġġ ta' metodu definit sew (il-katina ta' antenati, inklużi moduliwi mimsugħa) biex isibu. Il-fehim ta' dan il-passaġġ jispjega kif l-eredità u l-mixins jirrisolvu l-metodi.
Eredità singola
class Animal
def initialize(name) = @name = name
def speak = "some sound"
end
class Dog < Animal # Dog inherits from Animal (single inheritance)
def speak # override
"Woof"
end
def fetch
"#{@name} fetches" # @name inherited from Animal
end
end
Dog.new("Rex").speak # "Woof" (overridden)
Dog.new("Rex").fetch # uses inherited @name
Subclass (Dog < Animal) tirreriferi l-metodi u l-varjabbli ta' stanza tal-superclass, u tista' toffrika l-metodi. super jistednija l-verżjoni tal-ġenitur.
super — istednija l-metodu tal-ġenitur
class Dog < Animal
def initialize(name, breed)
super(name) # call Animal#initialize
@breed = breed
end
def speak
super + " (woof)" # super (no parens) passes the same args; here calls Animal#speak
end
end
Il-passaġġ ta' metodu (katina ta' antenati)
# Ruby searches for a method in this ORDER (the ancestors chain):
Dog.ancestors
# => [Dog, <included modules>, Animal, <Animal's modules>, Object, Kernel, BasicObject]
# lookup: the class itself → its included MODULES (last included first) →
# the superclass → ITS modules → ... up to BasicObject
Meta tistednija metodu, Ruby jimxi fuq il-katina ta' antenati (Class.ancestors): il-klassi nnifisha, imbagħad il-moduliwi miksuba tagħha (mixins — l-aktar reċentement miksub l-ewwel), imbagħad is-superclass u l-moduliwi tiegħu, sa BasicObject. L-ewwel qbil jirbaħ. Dan il-passaġġ wieħed jispjega kif l-eredità U l-mixins jirrisolvu flimkien.
Mixins jiddaħħlu fit-tassaġġ tal-metodu
module Swimmer
def move = "swimming"
end
class Fish < Animal
include Swimmer # Swimmer is inserted into the lookup path (before Animal)
end
# Fish.ancestors → [Fish, Swimmer, Animal, ...] — a module's methods come before the superclass's
Għaliex hija importanti
Il-fehim tal-eredità u l-passaġġ ta' metodu huwa għarfien importanti Ruby kemm għad-disinni ta' gerarkiji ta' klassi kif ukoll — speċjalment — għall-fehim ta' kif Ruby jirrisolvi l-metodi meta l-eredità u l-mixins jikkombinaaw.
L-eredità singola ta' Ruby (<) tipprovdi riutiliżż ta' kodiċi permezz ta' relazzjonijiet "is-a", b'super biex tistednija implimentazzjonijiet tal-ġenitur.
Imma l-kunċett aktar distintiv u importanti huwa l-passaġġ ta' metodu (il-katina ta' antenati): meta metodu jiġi stednija, Ruby jiftex f'ordni definita sew — il-klassi nnifisha, l-moduliwi miksuba tagħha (mixins, l-aktar reċentement miksub l-ewwel), imbagħad is-superclass u l-moduliwi tiegħu, sa BasicObject — u l-ewwel qbil jirbaħ.
Il-fehim ta' dan il-passaġġ wieħed u unifikat huwa kruċjali għaliex jispjega kif l-eredità u l-mixins jirrisolvu flimkien (il-moduliwi jiġu dħulu fil-katina, il-metodi tagħhom jieħdu preċedenza fuq dawk tas-superclass), li jikkjarifikaw immonteġ altrimenti konfuż dwar liema metodu attwalment jiġi stednija meta jkollok kemm eredità kif ukoll mixins multipli.
Hadda hija speċjalment importanti f'Ruby minħabba kif ħafnagħal tuża l-mixins — l-għarfien li Class.ancestors juri l-ordni ta' lookup eżatt, u kif il-moduliwi jaddaħħlu fih, jippermettilok tifkir u debug il-riżoluzzjoni ta' metodu.
Il-fehim tal-eredità, super, u speċjalment il-passaġġ ta' metodu (kif il-katina ta' antenati tirrisolvi l-metodi flok klassi u moduliwi mimsugħa) huwa għarfien importanti u relevanti ta' ħafna drabi għax-xogħol mal-istess sistema ta' klassi ta' Ruby, debug ta' mistoqsija "liema metodu qed jiġi stednija?", u d-disinni ta' gerarkiji ta' klassi/modulu — u huwa suġġett ta' intervista komuni li jirrifletti fehim aktar profond tal-mudell tal-oġġetti ta' Ruby u l-kombinazzjoni distintiva tiegħu ta' eredità singola ma' mixins b'saħħa.
