Ruby suportă moștenire simplă de clasă (o clasă poate moșteni un singur părinte direct prin class Copil < Parinte). Pentru a evita problemele complexe ale moștenirii multiple tradiționale din C++, Ruby rezolvă partajarea codului prin Module folosite ca Mixins.
| Comandă mixin | Unde injectează metodele modulului | Cum se apelează metoda |
|---|---|---|
include Modul |
Ca metode de instanță pe obiectul creat. | instanta.metoda |
extend Modul |
Ca metode de clasă (statice) direct pe clasă. | NumeClasa.metoda |
Mixins în acțiune: Modulul SerializabilJSON
module SerializabilJSON
def la_json_formatat
"{\"tip\": \"#{self.class.name}\", \"obiect_id\": #{self.object_id}}"
end
end
class ProdusMagazin
include SerializabilJSON # Injectează metoda la_json_formatat în toate instanțele!
attr_accessor :titlu, :pret
def initialize(titlu, pret)
@titlu = titlu
@pret = pret
end
end
produs = ProdusMagazin.new("Monitor 4K", 1850)
puts produs.la_json_formatat