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.
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]
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]