메타 오브젝트

Metaobject

컴퓨터 과학에서 메타 객체는 객체(자체 포함)를 조작, 생성, 기술 또는 구현하는 객체다. 메타 객체가 관련된 객체를 기본 객체라고 한다. 메타 객체가 정의할 수 있는 일부 정보에는 기본 객체의 유형, 인터페이스, 클래스, 메서드, 속성, 구문 분석 트리 등이 포함된다. 메타 오브젝트는 시스템이 자신의 내부 구조에 접근(보통 런타임에)할 수 있는 반사의 컴퓨터 과학 개념의 예다. 반성은 시스템이 본질적으로 즉석에서 다시 쓰일 수 있게 하고, 실행될 때 자신의 구현을 변경할 수 있게 한다.[1]

메타객체 프로토콜

메타 오브젝트 프로토콜(MOP)은 오브젝트 시스템의 구조와 행동에 접근하고 조작할 수 있는 어휘(프로토콜)를 제공한다. 메타 오브젝트 프로토콜의 대표적인 기능은 다음과 같다.[2]

  • 새 클래스 만들기 또는 삭제
  • 새 속성 또는 메서드 생성
  • 클래스가 다른 클래스에서 상속되도록 함("클래스 구조 변경")
  • 클래스 메서드를 정의하는 코드 생성 또는 변경

메타 오브젝트 프로토콜은 소프트웨어 오브젝트 시스템은 확장을 위해 개방되어야 하지만 수정을 위해 폐쇄되어야 한다는 베르트랑 마이어개방/폐쇄 원칙에 반한다. 이 원칙은 효과적으로 사물을 추가함으로써 사물을 확장하는 것과 사물을 재정의하는 것으로 사물을 수정하는 것 사이에 구별을 끌어내어 전자가 바람직한 품질("사물은 미래 사용 사례의 요건을 충족하도록 확장 가능해야 한다")이라고 제안하는 반면 후자는 바람직하지 않다("사물은 대상이 아닌 안정된 인터페이스를 제공해야 한다)고 제안한다. "요약 개정"). 이와는 대조적으로 메타객체 프로토콜은 시스템 자체의 관점에서 사물의 내부 구성과 전체 객체 시스템을 투명하게 공개한다. 실제로, 이것은 프로그래머들이 그들 자신을 재정의하기 위해 사물을 사용할 수 있다는 것을 의미하는데, 아마도 꽤 복잡한 방법으로 말이다.

더욱이 메타객체 프로토콜은 단순히 "언더딩" 구현에 대한 인터페이스가 아니라, 메타객체 프로토콜을 통해 객체 시스템이 메타객체 시스템의 관점에서 재귀적으로 구현되는데, 이는 이론적으로 메타객체 시스템의 관점에서 구현되는 것이며, 임의의 기본 사례(일관적인 상태 o)까지 구현된다.f 오브젝트 시스템)을 결정하며, 프로토콜은 이러한 구현 수준 사이의 재귀적 기능 관계가 된다.

그러한 방식으로 객체 시스템을 구현하면 급진적인 재량 재설계 가능성이 열려 깊은 유연성을 제공하지만 복잡하거나 이해하기 어려운 측정 가능성 문제를 도입할 수 있다(예를 들어, 객체 시스템은 자체의 메타 객체 프로토콜인 내부 자기표현(self-resparation)을 파괴적으로 업데이트하지 않고 잠재력을 발휘해야 한다).원하는 수정이 전파되는 재귀적 깊이에 따라 일부 업데이트의 일체 파괴력은 예측하기 어렵고 추론하기도 어려울 수 있다.[3] 이러한 이유로, 메타 오브젝트 프로토콜은 언어에 있을 때, 예를 들어 역 엔지니어링과 같이 정교한 방법으로 다른 소프트웨어나 그 자체를 변환하는 소프트웨어와 같은 전문화된 목적을 위해 보통 예비적으로 사용된다.[4]

런타임 및 컴파일 시간

런타임에 컴파일을 이용할 수 없는 경우, 메타 오브젝트 프로토콜의 구현을 위한 추가적인 복잡성이 있다. 예를 들어, 그러한 프로토콜로 유형 계층 구조를 변경할 수 있지만 그렇게 하면 대체 클래스 모델 정의로 컴파일된 코드에 문제가 발생할 수 있다. 일부 환경은 예를 들어 컴파일 시간에 메타 오브젝트 문제를 처리함으로써 이를 위한 혁신적인 솔루션을 찾아냈다. 이것의 좋은 예는 OpenC++[5]이다. 시맨틱 웹 객체 지향 모델은 대부분의 표준 객체 시스템보다 동적이며 런타임 메타 객체 프로토콜과 일치한다. 예를 들어, 시멘틱 웹 모델 클래스에서 서로 관계가 변경될 것으로 예상되며, 진화하는 클래스 모델을 검증하고 분석할 수 있는 분류기로 알려진 특별한 추론 엔진이 있다.[6]

사용법

첫 번째 메타 객체 프로토콜은 제록스 PARC에서 개발스몰토크 객체 지향 프로그래밍 언어에 있었다. CLOS(Common Lisp Object System)는 나중에 와서 Brian C뿐만 아니라 Smalltalk 프로토콜의 영향을 받았다. 3-Lisp에 대한 스미스의 독창적인 연구는 평가자의 무한한 탑이다.[7] CLOST 모델은 Smalltalk 모델과 달리 클래스가 둘 이상의 슈퍼클래스를 가질 수 있게 한다. 이는 클래스 계층의 계통을 일부 객체 인스턴스에서 해결하는 것과 같은 이슈에서 추가적인 복잡성을 야기한다. CLOST는 또한 스몰토크의 단일 디스패치처럼 메시지를 전달하기 보다는 일반적인 기능을 통해 처리되는 동적 멀티모드 디스패치를 허용한다.[8] Common Lisp에서 메타객체 프로토콜의 의미론과 구현을 기술하는 가장 영향력 있는 책은 그레고르 키잘레스 외 연구진에 의한 메타객체 프로토콜예술이다.[9]

메타 오브젝트 프로토콜은 소프트웨어 엔지니어링 애플리케이션에서도 광범위하게 사용된다. 사실상 모든 상업적 CASE, 재엔지니어링 및 통합 개발 환경에는 설계 유물을 표현하고 조작하는 어떤 형태의 메타 객체 프로토콜이 있다.[10][11][12]

메타 오브젝트 프로토콜은 측면 지향 프로그래밍을 구현하는 한 방법이다. Gregor Kiczales를 포함한 MOPs의 초기 설립자들 중 다수는 그 이후 양면 위주의 프로그래밍의 주요 옹호자로 자리를 옮겼다. PARC의 Kiczales 외 연구진은 네이티브 메타 오브젝트 프로토콜을 보유하지 않는 언어인 자바에 대한 SideJ를 설계하기 위해 고용되었다.

참고 항목

참조

  1. ^ Smith, Brian C (1982-01-01). "Procedural Reflection In Programming Languages". MIT Technical Report (MIT-LCS-TR-272). Archived from the original on 13 December 2015. Retrieved 16 December 2013.
  2. ^ Foote, Brian; Ralph Johnson (1–6 October 1989). "Reflective Facilities in Smalltalk-80". Oopsla '89: 327–335. doi:10.1145/74877.74911. ISBN 0897913337. Retrieved 16 December 2013.
  3. ^ Metaobject Protocol의 기술, 부록 C — 순환성을 가진 생활
  4. ^ Favre, Lilliana; Liliana Martinez; Claudia Pereira (2009). MDA-Based Reverse Engineering of Object Oriented Code. Springer. doi:10.1007/978-3-642-01862-6_21. ISBN 978-3-642-01861-9.
  5. ^ Chiba, Shigeru (1995). "A Metaobject Protocol for C++". Oopsla '95: 285–299. doi:10.1145/217838.217868. ISBN 978-0897917032. Retrieved 27 December 2013.
  6. ^ Knublauch, Holger; Oberle, Daniel; Tetlow, Phil; Wallace, Evan (2006-03-09). "A Semantic Web Primer for Object-Oriented Software Developers". W3C. Retrieved 2008-07-30.
  7. ^ Daniel P. Friedman; Mitchell Wand (1988). "The mystery of the tower revealed". The mystery of the tower revealed: A non-reflective description of the reflective tower. pp. 298–307. doi:10.1145/319838.319871. ISBN 978-0897912006.
  8. ^ "Integrating Object-Oriented and Functional Programming" (PDF). Retrieved 7 July 2016.
  9. ^ Kiczales, Gregor; Jim des Rivieres; Daniel G. Bobrow (July 30, 1991). The Art of the Metaobject Protocol. The MIT Press. ISBN 978-0262610742.
  10. ^ Johnson, Lewis; David R. Harris; Kevin M. Benner; Martin S. Feather (October 1992). "Aries: The Requirements/Specification Facet for KBSA". Rome Laboratory Final Technical Report. RL-TR-92-248.
  11. ^ "The Origin of Refine" (PDF). www.metaware.fr. Metaware White Paper. Archived from the original (PDF) on 7 January 2014. Retrieved 6 January 2014.
  12. ^ "OMG's MetaObject Facility". omg.org. Object Management Group. Retrieved 7 January 2014.

외부 링크