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.