Meta-oggetto

In informatica, un meta-oggetto è un oggetto che manipola, crea, descrive o implementa altri oggetti (incluso se stesso). L'oggetto al quale il meta-oggetto appartiene è chiamato oggetto di base. Alcune informazioni che un meta-oggetto può definire sono il tipo di dato dell'oggetto di base, le sue interfacce, la classe, metodi, attributi, il suo albero di parsing e così via.

I meta-oggetti rappresentano esempi del concetto di riflessione, tale per cui un sistema ha accesso (solitamente in run time) alla sua struttura interna. La riflessione permette ad un sistema di essenzialmente riscrivere se stesso, alterando la sua struttura, durante l'esecuzione.

Protocollo per meta-oggetti

[modifica | modifica wikitesto]

Un protocollo per meta-oggetti (in inglese metaobject protocol) fornisce un vocabolario (protocollo) per accedere e manipolare le strutture ed il comportamento di un sistema di oggetti. Le tipiche funzioni di un protocollo per meta-oggetti includono:[1]

  • Creare o eliminare una classe
  • Creare una nuova proprietà o metodo
  • Far derivare una classe da un'altra classe
  • Generare o cambiare il codice che definisce i metodi di una classe

Un protocollo per meta-oggetti non obbedisce all'aspetto di chiusura previsto nel principio aperto/chiuso, secondo cui i sistemi software devono essere aperti all'estensione, ma chiusi ad eventuali modifiche. Al contrario, un protocollo per meta-oggetti espone in modo trasparente la composizione interna degli oggetti e l'intera struttura di tutti gli oggetti contenuti in un sistema.

In un linguaggio di programmazione, un protocollo per meta-oggetti fornisce strutture che possono essere impiegate per implementare la programmazione orientata agli aspetti.[2]

  1. ^ (EN) Reflective Facilities in Smalltalk-80, su laputan.org. URL consultato il 21 ottobre 2018.
  2. ^ (EN) Gregory T. Sullivan, Aspect-oriented programming using reflection and metaobject protocols, in Communications of the ACM, vol. 44, n. 10, 1º ottobre 2001, pp. 95–97, DOI:10.1145/383845.383865. URL consultato il 21 ottobre 2018.