OOP 뒤에 이론 / 추억이 있습니까?


13

함수형 프로그래밍은 매우 우아한 Lambda Calculus와 그 변형을 백업 이론으로 사용합니다. OOP에 그런 것이 있습니까? 객체 지향 모델에 대한 추상화 란 무엇입니까?


5
로드 및로드 Google을 사용해 보셨습니까? 예를 들어, 1993 년부터 운영되는 객체 지향 언어 기초에 전념하는 FOOL이라는 워크샵 시리즈가 있습니다.
Dave Clarke

@DaveClarke. 동의하지 않습니다. Lambda 미적분학은 매우 정확한 의미에서 함수형 프로그래밍의 기초입니다. 예를 들어, Haskell 보고서에 따르면 전체 Haskell 언어는 입력 된 람다 미적분과 동등한 핵심 언어에 대한 구문 설탕으로 만 간주 될 수 있습니다. 미적분학과 관련하여 비슷한 주장을하는 객체 지향 언어를 모르겠습니다. 따라서 "로드"가있는 것이 맞습니다. 그러나 그 어느 것도 옳지 않습니다.
Uday Reddy

@UdayReddy : 이것은 객체 지향 언어가 풍부하기 때문일 수 있습니다.
Dave Clarke

1
@DaveClarke 주제의 풍부함은 (1) 좋은 유행어, (2) 합의를 구축하기에 충분한 주제를 실제로 이해하지 못함, (3) 거의 직교하는 여러 문제를 혼합하고 있음을 의미합니다. . 나는 OO 프로그래밍에 대한 (최근의) 문헌을 면밀히 따르지 않았지만 항상 그것에 대해 명시 적으로 언급하지 않고 믹싱 문제라고 생각했습니다 (물론 이것은 이론적 작업보다 언어에 더 적용됩니다). 이러한 문제에는 입력, 추상화, 상태 저장, 병렬 처리, 코드 재사용이 포함됩니다. (하나의) 이론이 모든 변형을 설명하지는 않습니다.
babou

답변:


15

네 가지 주요 접근 방식이 있지만 사용 가능한 대상의 표면 만 긁습니다.

  • 람다 및 레코드를 통해 :보다 전통적인 구조로 객체, 클래스 및 메서드를 인코딩하는 것이 아이디어입니다. 90 년대 중반 벤자민 피어스의 작품 은이 접근법을 대표합니다.
  • Abadi와 Cardelli의 객체 계산 (Abadi and Cardelli의 저서 A The Objects of Objects 참조) : 주요 추상화는 메소드의 기록이며, 접근 방식은 프로토 타입 기반의 객체 지향 프로그래밍 구현에 더 가깝지만 클래스와 상속은 더 원시적 인 요소의 용어.
  • Castagna의 다중 방법 미적분학 (Castagna의 저서 Object-Oriented Programming A Unified Foundation 참조 ) : 그의 접근 방식은 다중 방법이 핵심적인 추상화입니다.
  • 클래스 기반 미적분학 (예 : Kim Bruce 's Foundations of Object-Oriented Languages ​​: Types and Semantics 또는 Featherweight Java ) : 이러한 접근 방식은 클래스 기반 프로그래밍의 본질을 포착하고 클래스와 상속에 중점을 둡니다.

12

객체 모델 코어와 집합 이론 간의 연결은 다음 문서에 설명되어 있습니다.

이 문서는 객체의 인스턴스 구조와 상속 관계를 나타냅니다. 이러한 구조는 가능한 가장 높은 OOP 추상화로 간주 될 수 있습니다. 구조가 특정 프로그래밍 언어 (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) 및 온톨로지 언어 (RDF 스키마 및 OWL 2 Full)에 어떻게 적용되는지 보여줍니다.

이 문서에서 클래스는 객체 접근 방식을 취해 코어 구조가 단일 정렬됩니다. 기본 형식에서 구조는 (O, ϵ , ≤, .ec) 로 표현 될 수 있습니다 .

  • O객체 집합입니다 .
  • ϵ는 (객체) 회원 관계, 인스턴스 관계 개선,
  • ≤는 IS 상속 관계 , 그리고
  • .ecclass 의 구별되고 비어 있는 하위 관계인 powerclass 맵 입니다.

Ruby 오브젝트 모델에 따른 샘플 코어 구조는 다음 다이어그램에 표시되어 있습니다. 에서 블루 링크 - 녹색 링크는 재귀 전이 감소 상속 관계, 파란색 링크는 "포섭 감소"의 회원 관계를 보여 보여 X의 최소한의 컨테이너 점 X를 . 파워 클래스 맵 .ec 은 파란색 가로 링크로 구성됩니다. 이지도 이미지의 개체는 파워 클래스 (회색)입니다. 루비에서는 그것들을 고유 클래스 또는 싱글 톤 클래스 라고 합니다 (후자의 용어는 더 이상 사용되지 않습니다). 개체 S , UV는 (핑크)이다 단말기나머지 객체는 상속 루트 r의 자손입니다 .

  r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end

위의 모든 언어의 객체 모델의 핵심 부분은 추가 구성 요소가 없거나 몇 가지만있는 구조의 특수화로 볼 수 있습니다. 이론적으로 볼 때 추가 구성 요소의 가장 중요한 경우는 Dylan이 도입 한 싱글 톤 맵 ( .ɛϲ )입니다. 이로 인해 Dylan은 위에서 언급 한 유일한 프로그래밍 언어로 구성 기호 ○가 왼쪽에서 오른쪽으로 해석되는 단 조성 조건 (≤) ○ (ϵ) ⊆ (ϵ)이 적용되지 않습니다.

x.ec 또는 x.ɛϲ 를 고려할 수 있기 때문에 객체 모델 코어와 집합 이론 사이의 연결을 공식화하는 한 가지 방법 은 참조 문서에서 메타 오브젝트 구조 라고 하는 구조 군 (O, ≤, r, .ec, .ɛϲ)을 이용하는 것입니다. x의 메타 객체로 . 이러한 구조에서 x.ec 은 모든 객체 x에 대해 정의 되고 x.ɛϲ 는 모든 경계 ( "작은") 객체 x에 대해 정의됩니다 . 구조는 아래의 9 가지 공리를 따릅니다. 공리 화는 처음 8 개의 공리에 대해 매우 간단한 정의 확장을 사용합니다 ( T자손되지 않은 것들 - 단자 객체 집합이고 , R.ec *가 재귀 전이 폐쇄이다 .ec ) 아니라 마지막 공리를위한 참여.

  1. 상속 은 부분 순서입니다.
  2. 파워 클래스 맵 .ec(O, ≤) 의 순서 임베딩입니다 .
  3. 에서 객체 T.ec *은 최소이다.
  4. 모든 powerclass는 r 의 자손입니다 .
  5. 세트 r.ec *는 더 바인딩하지 하한있다.
  6. 싱글 톤 맵 .ɛϲ 은 주입 형입니다.
  7. 에서 객체 O.ɛς.ec *은 최소이다.
  8. 각 개체를 들어 X , Y 되도록 x.ɛς가 정의된다 x.ɛς ≤ y.ec ↔ X ≤ Y .
  9. 모든 객체 x 에 대해 x.ɛϲ 는 ↔ xd <ϖ로 정의됩니다 .

마지막 공리에서 ϖ 는 고정 한계 서수이고 .d 는 정의 확장에 의해 도출 된 순위 함수입니다. 객체 멤버십 관계 ϵ는 (( .ɛϲ ) ∪ ( .ec )) ○ (≤)으로 구합니다 . 마지막 공리에 따르면 경계 객체 집합에 대한 ϵ의 도메인 제한은 ( .ɛϲ ) ○ (≤) 와 같습니다 . 참고 문헌에서이 관계를 경계 멤버쉽 이라고 하며 ∊로 표시합니다. 중요한 특성으로,이 관계는 잘 정립되어 있습니다. 이것은 r ϵ r 이후에 기본이 아닌 ϵ와 대조적입니다.. 객체 기술 (핵심 기술)과 설정 이론의 주요 대응 관계는 다음과 같이 표현 될 수 있습니다

∊ ↔ ∈

즉, 제한된 멤버쉽은 잘 설정된 세트 간의 멤버쉽에 해당합니다. 특별한 경우로, 등급 ϖ + 1 의 부분적 폰 뉴만 우주는 정의 적 확장에 의한 메타 객체 구조이다. 일반적으로 모든 초록 ( ϖ + 1 )- 상부 구조 (O,)완전한 메타 오브젝트 구조 와 정의상 동일합니다 . 모든 메타 오브젝트 구조는 완전한 메타 오브젝트 구조에 충실하게 포함될 수 있으며, 그 결과 폰 노이만 우주에 충실하게 임베드 될 수 있습니다.

기본 구조 라는 용어 는 메타 오브젝트 구조의 일반화에 사용됩니다. 이 일반화에서 .ec.ɛϲ 는 (임의로) 부분적으로, 비어있을 수 있습니다. 특히, 최소 기본 구조는 상속 루트 r 만 포함하는 유한 기본 구조가 가능합니다 . 모든 기본 구조는 파워 클래스 완성과 싱글 톤 완성에 의해 메타 오브젝트 구조로 확장되어 기본 구조를 폰 노이만 우주에 충실하게 포함시킬 수 있습니다.


@Raphael 훨씬 낫습니다-고마워요.
David Richerby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.