Module și Mixins în Ruby: Moștenire Multiplă prin include și extend în Ruby

OOP & Arhitectură Ruby 3.0+

Ghid complet pentru module în Ruby: organizarea de spații de nume (Namespaces), partajarea logicii prin Mixins, diferența critică dintre include și extend.

Sintaxă
module Logabil; def log; ...; end; end; class App; include Logabil; end

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