Objektoj kiel agoj

Mi ofte rimarkas dum la pasintaj jaroj la traktado de objektoj kiel ujoj por agoj aŭ alivorte objektoj kiel funkcioj. Tiel la konstruilo agordas la aktorojn por la objekto kiel parametraj listoj faris por funkcioj. Tiel ene de la funkcio oni povas pludisigi la funkciadon de la objekto en multajn funkcojn. La avantaĝoj estas ke vi kreas pli da malgrandaj funkcioj por plenumi la ago, sed ankaŭ vi havas kunteksto kiu povas esti pli komplika ol tio kion oni volas enmeti en sola funkcio.

Sed por mi la plej interesa afero estas ke vi povas superprogrami la agon multe pli ol antaŭe. La agobjekto povas filigi de alia agobjekto kaj do heredi iom da funkciado de la patra agobjekto. Ekzemplo

class SendiRetpoŝto
  def call
    Retpoŝtilo.sendi(al: 'zam@hoff.com', subjekto: 'Venu al mia kunveno')
  end
end

class KonservuInviton < SendiRetpoŝto
  def call(invito)
    invito.konservu!
    super
  end
end

Aldone oni povas krei modulon kun iom da kodo kaj include ĝin en via agobjekto.

La Scala programlingvo utilas ĉi tion multe kaj por la programisto kaj por la tradukilo.

La modelo memorigas min de la superprogramaj povoj en la CLOS sistemo de LISP, kie oni povas enmeti kodon en la diversajn partojn de la vivciklo de objekto. Ĉi tie oni povas enmeti kodon en la partojn de la funkcivoko.