Кіріспе

Басқа объектілерді манипуляциялайтын, жасайтын, сипаттайтын және іске асыратын объект. Компьютер ғылымында метаобъект – объектілерді (оның ішінде өзін) манипуляциялайтын, жасайтын, сипаттайтын немесе іске асыратын объект. Метаобъектке қатысты объект негізгі объект деп аталады. Метаобъект анықтай алатын ақпаратқа негізгі объектінің түрі, интерфейсі, класы, әдістері, атрибуттары, синтаксистік ағаш және т.б. жатады. Метаобъектілер – компьютер ғылымының рефлексия тұжырымдамасының мысалдары, онда жүйе өзінің ішкі құрылымына (әдетте, орындалу кезінде) қол жеткізе алады. Рефлексия жүйеге өзін орындалу барысында өздігінен қайта жазуға және өз іске асырылуын өзгертуге мүмкіндік береді.

Орындау уақыты мен компиляциялау уақыты

Құрастыру орындалу кезінде қолжетімді болмаған жағдайда метаобъект протоколын іске асыруда қосымша қиындықтар туындайды. Мысалы, мұндай протоколмен типтік иерархияны өзгертуге болады, бірақ мұндай өзгерістер балама сыныптық модель бойынша құрастырылған код үшін мәселе тудыруы мүмкін. Кейбір орталар осыған байланысты жаңашыл шешімдер тапты, мысалы, құрастыру кезінде метаобъект мәселелерін шешу арқылы. OpenC++ мұның жақсы мысалы болып табылады. Семантикалық вебтің объектіге бағытталған моделі көптеген стандартты объектілік жүйелерге қарағанда динамикалық және орындалу кезіндегі метаобъект протоколдарымен үйлесімді. Мысалы, Семантикалық веб моделінде кластар бір-бірімен қарым-қатынастарын өзгертуі күтіледі және дамитын сынып модельдерін тексеруге және талдауға арналған классификатор деп аталатын арнайы қорытынды шығару механизмі бар.

Қолданылуы

Алғашқы метаобъект протоколы Xerox PARC-те жасалған Smalltalk объектіге бағытталған бағдарламалау тілінде пайда болды. Common Lisp Object System (CLOS) кейін келді және оған Smalltalk протоколымен қатар, Брайан Смиттің 3 Lisp-ті бағалаушылардың шексіз мұнарасы ретіндегі алғашқы зерттеулері де әсер етті. CLOS моделі, Smalltalk моделінен өзгеше, бір сыныпқа бірнеше суперкласс болуына мүмкіндік береді; бұл кейбір объектілерде сынып иерархиясының тегін анықтау сияқты мәселелерде қосымша қиындықтар тудырады. CLOS сонымен қатар динамикалық көпәдісті жіберуді (multimethod dispatch) қолдайды, ол Smalltalk-тің бірәдісті жіберуіндегідей (single dispatch) хабар алмасудың орнына, жалпы функциялар арқылы жүзеге асырылады. Common Lisp-тегі метаобъект протоколының семантикасы мен іске асырылуын сипаттайтын ең ықпалды кітап – Грегор Кицалес және авторлар тобының «Метаобъект протоколының өнері». Метаобъект протоколдары бағдарламалық жасақтама инженериясы саласында кеңінен қолданылады. Көптеген коммерциялық CASE, қайта инжиниринг және интеграцияланған даму орталарында дизайн артефактілерін көрсету және өңдеу үшін метаобъект протоколының әлдебір түрі қолданылады. Метаобъект протоколы – аспектіге бағытталған бағдарламалауды іске асырудың бір жолы. MOP-тың алғашқы негізін қалаушылардың көптегені, соның ішінде Грегор Кицалес, кейіннен аспектіге бағытталған бағдарламалауды жақтаушылардың басты өкілдеріне айналды. Кицалес және авторлар тобы PARC-те Java үшін AspectJ-ді жобалауға шақырылды, бұл тілде туа біткен метаобъект протоколы жоқ.