객체 지향 모델의 "객체"에 대한 수학의 공식 정의 / 카운터 파트


9

이것은 수학 SE 포럼에서 묻는 질문이며 여기에서 언급되었습니다. 여기 질문이 있습니다.

나는 공식 수학과 이론 컴퓨터 과학의 초보자이기 때문에 내 질문이 제대로 틀리지 않았다면 나와 함께하십시오. 객체 지향 모델링은 실제 세계를 시뮬레이션 할 때 복잡한 상호 작용을 정의하는 데 매우 유용합니다. 그러나 그것은 주로 프로그래밍에 사용됩니다. 우리가 수학에서 비슷한 개념을 가지고 있는지 궁금합니다. 프로그래밍을 할 때 "개체"와 "개체 지향 프로그래밍"의 개념을 이해하고 구현할 수 있습니다. 그러나 우리는 Set Theory와 관련하여 "개체"에 대한 공식적인 정의를 가지고 있습니까? 아니면 그 문제에 대해 다른 공식적인 수학적 이론?

우리는 세 가지 주요 객체 지향 모델링 개념을 구현 / 공식적으로 정의 할 수 있습니까? 1. 캡슐화 2. 상속 3. 다형성

나는 질문이 너무 광범위하다는 것을 알고 있지만 이러한 개념을 더 잘 이해할 수 있도록 몇 가지 지침을 제공 할 수 있다면 정말 감사하겠습니다.


2
내가 볼 때 실제로 두 가지 질문이 있습니다. 하나는 객체 지향 개념의 형식주의를 요구하고 있습니다. 다른 하나는 수학에서 객체 지향 개념을 요구하고 있습니다. 아마도 두 가지 별도의 질문을하는 것이 좋습니다. 첫 번째 질문에 대한 답은 많지만 두 번째 질문에는 약간만 있습니다. (그리고 아마도 내일 나는 질문에 대답 할 시간을 찾을 것이다.)
Dave Clarke

감사합니다 .. 표준 또는 "텍스트 북"으로 간주되는 객체 지향 개념의 공식화를위한 자료를 제안 해 주시겠습니까? 두 번째 질문에 대한 답변을 기다릴 것입니다 .... :)
user1260776

2
표준 서적 (몇 년 전)은 A Object of Objects 입니다. 가장 최근의 작업은 Featherweight Java 입니다. 이러한 문제를 다루는 Foundations of Object-Oriented Languages 라는 워크샵도 있습니다.
Dave Clarke

감사! 그들을 통해 갈 것입니다 ... 또한, 나는 내 질문과 밀접하게 관련된 "람다 미적분학"을 우연히 발견했습니다 ..
user1260776

답변:


9

두 가지 이유로 대답이 복잡합니다.

  1. 컴퓨터 과학의 다른 사람들은 "개체"라는 용어를 다르게 해석합니다. 하나는 객체가 함께 패키지 된 일부 데이터와 작업으로 구성되어 있다는 것입니다. 다른 하나는 객체가 전부이지만 "상태"도 가지고 있다는 것입니다. 즉, 그것은 어떤 형태의 변경 가능한 엔티티입니다.

  2. "변화"가 의미하는 것 (그리고 끊임없이 변화함에 따라 "엔티티"가 의미하는 것)과 수학적 설명이 실제로 변화 가능한 실체를 포착하는지와 관련하여 깊은 철학적 문제가 있습니다.

데이터 + 연산 의 의미에서 객체 : 그것은 수학의 표준입니다. 그룹 이론 교과서를 가져 가십시오. 그것은 어딘가에 같은 정의를 가질 것입니다hg(x)=gxg1. (이것은 활용 연산자입니다.)hg이 용어에서 "개체"입니다. 일부 데이터가 있습니다 (g) 및 작업 xgxg1. 또는 당신은 쌍을 취함으로써 그것을 더 객관적으로 만들 수 있습니다g,xgxg1 또는 트리플 g,xgxg1,xg1xg. 이러한 종류의 "객체"는 람다 추상화와 튜플을 형성 할 수있는 방법이있는 기능적 프로그래밍 언어로 구성 할 수 있습니다. Abadi와 Cardelli의 "개체 이론"은 이러한 종류의 개체를 광범위하게 처리합니다.

와 객체 상태 (또는 객체 그 변화 ) :합니까 수학은 그런 일이? 나는 그렇게 생각하지 않습니다. 나는 전문적인 삶이 아닌 변화하는 것에 대해 수학자의 이야기를 보지 못했습니다. 뉴턴 쓰기x 아마도 변화하고있는 입자의 위치에 대해 x˙변화율에 따라 수학자들은 결국 뉴턴이 말한 것이 함수라는 것을 알아 냈습니다x(t) 실수에서 벡터 공간으로 x˙ 첫 번째 파생물 인 다른 기능이었습니다. x(t) 에 관하여 t. 이로부터 많은 깊이 생각하는 수학자들이 변화가 실제로 존재하지 않으며 당신이 가진 모든 것이 시간의 함수라고 결론지었습니다. 그러나 뉴턴 역학에서 변화 한 것은 위치가 아니라 입자 였습니다. 위치는 순간적인 상태입니다. 수학 자나 물리학자는 입자가 수학적 아이디어 인 척하지 않습니다. 물리적 인 것입니다.

개체와 함께 있습니다. 그것들은 "물리적"이고 상태는 수학적 속성입니다. 이 측면에 대한 좋은 설명은 Abelson과 Sussman의 3 장 컴퓨터 프로그램구조와 해석 의 3 장을 참조하십시오 . 이것은 MIT의 교과서이며 모든 물리학 자에게 완벽하게 잘 이해하는 모든 과학자와 엔지니어들에게 가르칩니다.

입자가 수학적이지 않다고해서 수학적으로이를 처리 할 수는 없습니다. 수학자에게 2 입자 시스템을 모델링하도록 요청하면 즉시 2 개의 기능을 구성하고이를 호출합니다.x1(t)x2(t). 따라서 두 입자는 의미없는 두 지수 (1과 2)로 줄어 듭니다. 이것은 우리가 그 입자가 무엇인지 모르고 신경 쓰지 않는다고 말하는 수학자의 방법입니다. 우리가 알아야 할 것은 그들의 위치가 독립적으로 (또는 개별적으로) 진화한다는 것입니다. 그래서 우리는 두 가지 기능으로 모델링 할 것입니다.

마찬가지로 객체 지향 프로그램을 모델링하는 표준 수학적 방법은 각 객체를 상태 공간에 대한 인덱스로 취급하는 것입니다. 유일한 차이점은 객체가왔다 갔다하고 시스템의 구조가 역동적이기 때문에 각 세계가 기본적으로 인덱스 모음 인 "가능한 세계"모델로 확장해야한다는 것입니다. 객체의 할당 및 할당 해제는 한 세계에서 다른 세계로 이동하는 것을 포함합니다.

그래도 문제가 있습니다. 역학과 달리 객체 상태를 캡슐화 하려고합니다 . 그러나 객체에 대한 수학적 설명은 상태를 온전히 배치하여 캡슐화를 완전히 파괴합니다. "관계형 파라 메트릭"이라는 수학적인 트릭이 있습니다.이 기법을 사용하면 크기를 줄일 수 있습니다. 캡슐화에 대한 개념적인 설명이 아니라 수학적 기법이라는 점을 제외하고는 지금은 다루지 않겠습니다. 캡슐화를 사용 하여 수학적으로 객체를 모델링하는 두 번째 방법은 상태를 미세화하고 관찰 가능한 이벤트로 객체 동작을 설명하는 것입니다. 이 두 모델에 대한 자세한 설명을 위해 Algol-like Languages의 객체 및 클래스 라는 제목의 논문을 참조 할 수 있습니다 .


[참고 사항 추가]

객체의 수학적 토대에 대한 훌륭한 분석은 William Cook의 기사 " 데이터 이해 이해, 다시 방문 " 에서 찾을 수 있습니다 .


2
나는 여기 누군가가 대답 할 수 있다는 것을 알았습니다 ...
Andrej Bauer

시간 내 주셔서 감사하고 자세한 답변을 부탁드립니다. 이 질문을했을 때, 나는 "데이터 + 연산"이라는 의미에서만 생각하고 있었으며, 그룹 이론이 "OBJECT"를 "데이터 + 연산"으로 나타낼 수 있다는 것은 결코 나에게 일어나지 않았습니다. 또한, 귀하가 언급 한 링크도 살펴 보겠습니다.
user1260776

@AndrejBauer. 네, 아마도 배 밖으로 갔을 것입니다. OP는 아마도 학문이 아니라 공식화를위한 단어로 "수학"을 사용했을 것입니다.
Uday Reddy

@Uday, 나는 제대로 질문을하지 않았을 수도 있지만, "수학"을 의미했을 때, 나는 공식적인 수학을 분명히 의미했습니다. 내 생각은 "이론"이 수학의 기초, 집합 이론 측면에서 OO 모델링의 대상을 '설명'또는 '유도'하는 방법을 형성하는 것이라고 생각했다. first order logic) ... "귀하의 답변을 완전히 이해하지 못했지만, 귀하가 한 말에 대해"감각 "을 얻을 수 있습니다. 감사합니다 !! (내 아이디어는 완전히 조직되지 않았고, PLZ는 저를 여전히 초보자라고 용서합니다 :)
user1260776

2
@ user1260776. 이해 했어요. 그러나 나의 요점은 "공식"과 "수학"은 다른 생각이라는 것입니다. 수학으로 개념을 줄이지 않고도 개념을 공식화 할 수 있습니다. 뉴턴은 역학을 공식화했지만 "입자"를 "세트"로 줄이는 것을 귀찮게하지 않았습니다. 나는 개인적으로 뉴턴의 리드를 따르고 세트로 줄이지 않는 것을 인정합니다. 그러나 언제 줄어야할지, 안 줄어야하는지 알아야한다고 생각합니다. 물리학 자로서 훈련을 받았기 때문에 나는 그렇게하기 쉽다는 것을 알게되었습니다. 다른 많은 컴퓨터 과학자들에게는 쉽지 않을 수 있습니다.
Uday Reddy

0

abelson & sussman의 오래된 고전 저서 "컴퓨터 프로그램의 구조와 해석"[1]에있는 체계에 대한 이론적 인 설명이있다 (리프 변형). 지금 무료 온라인! 로컬 상태를 저장하는 메커니즘이있는 경우 람다 미적분학 (~ aka Lisp)에도 객체 방향 개념을 포함하는 방법을 보여줍니다. 내가 알기로, 이것은 많은 세월 동안 std MIT 교과서였습니다. 이것이 subj에 대한 최고의 심판이라고 말하지는 않습니다. 이 pt에는 다른 더 좋은 것들이 있다고 확신하십시오.

나는 이것이 들었던 곳에서 완전히 공식화되었다고 생각하지 않지만 느슨하게 말하는 객체는 기본적으로 코드 + 데이터 형식으로 구성됩니다.

  • 메소드 (매개 변수 포함)
  • 상태, 즉 인스턴스 변수

캡슐화 된 형태로 틀림없이 상속과 같은 다른 측면은 기본이 아닙니다. abelson & sussman에 언급 된 바와 같이, 그들은 "구문 설탕"이라고 부릅니다.

[1] abelson & sussman의 컴퓨터 프로그램 구조 및 해석


3
물론 객체 지향 프로그래밍 의미의 객체가 공식화되었습니다. Abadi & Cardelli, Castanga 및 Kim Bruce의 저서가 주제에 전념하고 있습니다. FOOL 시리즈에는 객체 지향 프로그래밍의 기초를 다루는 워크숍이 10 년 동안있었습니다. 회의 ECOOP와 OOPSLA는 정기적으로 OO의 기초에 관한 논문을 가지고있었습니다. 실제로, OO의 의미론에 관한 첫 번째 논문은 약 20 살입니다.
Dave Clarke

@vzn, 답변 주셔서 감사합니다. 당신이 제안한 책들을 살펴
볼게요

DC-- 나는 그 말을 잘못했다. 보다 정확하게는 정확하게 "객체"를 구성하는 것 또는 OOP의 핵심 / 기본 구성 요소에 대한 공식적인 정의가 문헌에서 크게 변하는 경향이 있다고 말하는 것이 안전하다고 생각하십시오. 정의는 아마도 시간이 지남에 따라 크게 확장되었을 것입니다. 예를 들어 상속이 나중에 추가되었다고 생각하고 원래 아이디어는 주로 캡슐화 된 형식의 코드 + 데이터 일뿐입니다.
vzn

내가 말할 수있는 것과 근본적으로 합의되지 않은 OOP 기능의 또 다른 예는 C ++에서 볼 수 있지만 인터페이스 대신에 Java에서 의도적으로 피하는 다중 상속입니다. 등
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.