Inheritance and Modules
Modules and Mixins
A module can be included in a class to share reusable methods.
mixin
A mixin is a module included into a class so its methods act like instance methods.
Modules and Mixins
modules_mixins.rb
Replay: real traced execution (multi-file project)
module Trackable
def tracking_label
"tracking #{tracking_id}"
end
end
class Shipment
include Trackable
def initialize(tracking_id)
@tracking_id = tracking_id
end
def tracking_id
@tracking_id
end
end
tracking_id = 100
shipment = Shipment.new(tracking_id)
puts shipment.tracking_label
module Trackable
def tracking_label
"tracking #{tracking_id}"
end
end
class Shipment
include Trackable
def initialize(tracking_id)
@tracking_id = tracking_id
end
def tracking_id
@tracking_id
end
end
tracking_id = 205
shipment = Shipment.new(tracking_id)
puts shipment.tracking_label
module Trackable
def tracking_label
"tracking #{tracking_id}"
end
end
class Shipment
include Trackable
def initialize(tracking_id)
@tracking_id = tracking_id
end
def tracking_id
@tracking_id
end
end
tracking_id = 310
shipment = Shipment.new(tracking_id)
puts shipment.tracking_label
tracking_id ← 100
7class Shipment8 include TrackableTrackable910 def initialize(tracking_id)11 @tracking_id = tracking_id12 end1314 def tracking_id15 @tracking_id16 end17end1819tracking_id→ 100 = 100 #@tracking_id=205, 31020shipment = Shipment.new(tracking_id100)@tracking_id ← 100
10def initialize(tracking_id100)11 @tracking_id→ 100 = tracking_id10012endshipment ← ⟨Shipment A @tracking_id=100⟩
19tracking_id = 100 #@tracking_id=205, 31020shipment→ ⟨Shipment A @tracking_id=100⟩ = Shipment.new(tracking_id100)2122puts shipment.tracking_labeltracking 100def tracking_id
14def tracking_id15 @tracking_id10016endputs shipment.tracking_label
22puts shipment.tracking_labeltracking 100outputtracking 100
tracking_id ← 205
7class Shipment8 include TrackableTrackable910 def initialize(tracking_id)11 @tracking_id = tracking_id12 end1314 def tracking_id15 @tracking_id16 end17end1819tracking_id→ 205 = 20520shipment = Shipment.new(tracking_id205)@tracking_id ← 205
10def initialize(tracking_id205)11 @tracking_id→ 205 = tracking_id20512endshipment ← ⟨Shipment A @tracking_id=205⟩
19tracking_id = 20520shipment→ ⟨Shipment A @tracking_id=205⟩ = Shipment.new(tracking_id205)2122puts shipment.tracking_labeltracking 205def tracking_id
14def tracking_id15 @tracking_id20516endputs shipment.tracking_label
22puts shipment.tracking_labeltracking 205outputtracking 205
tracking_id ← 310
7class Shipment8 include TrackableTrackable910 def initialize(tracking_id)11 @tracking_id = tracking_id12 end1314 def tracking_id15 @tracking_id16 end17end1819tracking_id→ 310 = 31020shipment = Shipment.new(tracking_id310)@tracking_id ← 310
10def initialize(tracking_id310)11 @tracking_id→ 310 = tracking_id31012endshipment ← ⟨Shipment A @tracking_id=310⟩
19tracking_id = 31020shipment→ ⟨Shipment A @tracking_id=310⟩ = Shipment.new(tracking_id310)2122puts shipment.tracking_labeltracking 310def tracking_id
14def tracking_id15 @tracking_id31016endputs shipment.tracking_label
22puts shipment.tracking_labeltracking 310outputtracking 310