이것은 수학 SE 포럼에서 묻는 질문이며 여기에서 언급되었습니다. 여기 질문이 있습니다.
나는 공식 수학과 이론 컴퓨터 과학의 초보자이기 때문에 내 질문이 제대로 틀리지 않았다면 나와 함께하십시오. 객체 지향 모델링은 실제 세계를 시뮬레이션 할 때 복잡한 상호 작용을 정의하는 데 매우 유용합니다. 그러나 그것은 주로 프로그래밍에 사용됩니다. 우리가 수학에서 비슷한 개념을 가지고 있는지 궁금합니다. 프로그래밍을 할 때 “개체”와 “개체 지향 프로그래밍”의 개념을 이해하고 구현할 수 있습니다. 그러나 우리는 Set Theory와 관련하여 “개체”에 대한 공식적인 정의를 가지고 있습니까? 아니면 그 문제에 대해 다른 공식적인 수학적 이론?
우리는 세 가지 주요 객체 지향 모델링 개념을 구현 / 공식적으로 정의 할 수 있습니까? 1. 캡슐화 2. 상속 3. 다형성
나는 질문이 너무 광범위하다는 것을 알고 있지만 이러한 개념을 더 잘 이해할 수 있도록 몇 가지 지침을 제공 할 수 있다면 정말 감사하겠습니다.
답변
두 가지 이유로 대답이 복잡합니다.
-
컴퓨터 과학의 다른 사람들은 “개체”라는 용어를 다르게 해석합니다. 하나는 객체가 함께 패키지 된 일부 데이터와 작업으로 구성되어 있다는 것입니다. 다른 하나는 객체가 전부이지만 “상태”도 가지고 있다는 것입니다. 즉, 그것은 어떤 형태의 변경 가능한 엔티티입니다.
-
“변화”가 의미하는 것 (그리고 끊임없이 변화함에 따라 “엔티티”가 의미하는 것)과 수학적 설명이 실제로 변화 가능한 실체를 포착하는지와 관련하여 깊은 철학적 문제가 있습니다.
데이터 + 연산 의 의미에서 객체 : 그것은 수학의 표준입니다. 그룹 이론 교과서를 가져 가십시오. 그것은 어딘가에 같은 정의를 가질 것입니다
. (이것은 활용 연산자입니다.)
이 용어에서 “개체”입니다. 일부 데이터가 있습니다 (
) 및 작업
. 또는 당신은 쌍을 취함으로써 그것을 더 객관적으로 만들 수 있습니다
또는 트리플
. 이러한 종류의 “객체”는 람다 추상화와 튜플을 형성 할 수있는 방법이있는 기능적 프로그래밍 언어로 구성 할 수 있습니다. Abadi와 Cardelli의 “개체 이론”은 이러한 종류의 개체를 광범위하게 처리합니다.
와 객체 상태 (또는 객체 그 변화 ) :합니까 수학은 그런 일이? 나는 그렇게 생각하지 않습니다. 나는 전문적인 삶이 아닌 변화하는 것에 대해 수학자의 이야기를 보지 못했습니다. 뉴턴 쓰기
아마도 변화하고있는 입자의 위치에 대해
변화율에 따라 수학자들은 결국 뉴턴이 말한 것이 함수라는 것을 알아 냈습니다
실수에서 벡터 공간으로
첫 번째 파생물 인 다른 기능이었습니다.
에 관하여
. 이로부터 많은 깊이 생각하는 수학자들이 변화가 실제로 존재하지 않으며 당신이 가진 모든 것이 시간의 함수라고 결론지었습니다. 그러나 뉴턴 역학에서 변화 한 것은 위치가 아니라 입자 였습니다. 위치는 순간적인 상태입니다. 수학 자나 물리학자는 입자가 수학적 아이디어 인 척하지 않습니다. 물리적 인 것입니다.
개체와 함께 있습니다. 그것들은 “물리적”이고 상태는 수학적 속성입니다. 이 측면에 대한 좋은 설명은 Abelson과 Sussman의 3 장 컴퓨터 프로그램 의 구조와 해석 의 3 장을 참조하십시오 . 이것은 MIT의 교과서이며 모든 물리학 자에게 완벽하게 잘 이해하는 모든 과학자와 엔지니어들에게 가르칩니다.
입자가 수학적이지 않다고해서 수학적으로이를 처리 할 수는 없습니다. 수학자에게 2 입자 시스템을 모델링하도록 요청하면 즉시 2 개의 기능을 구성하고이를 호출합니다.
과
. 따라서 두 입자는 의미없는 두 지수 (1과 2)로 줄어 듭니다. 이것은 우리가 그 입자가 무엇인지 모르고 신경 쓰지 않는다고 말하는 수학자의 방법입니다. 우리가 알아야 할 것은 그들의 위치가 독립적으로 (또는 개별적으로) 진화한다는 것입니다. 그래서 우리는 두 가지 기능으로 모델링 할 것입니다.
마찬가지로 객체 지향 프로그램을 모델링하는 표준 수학적 방법은 각 객체를 상태 공간에 대한 인덱스로 취급하는 것입니다. 유일한 차이점은 객체가왔다 갔다하고 시스템의 구조가 역동적이기 때문에 각 세계가 기본적으로 인덱스 모음 인 “가능한 세계”모델로 확장해야한다는 것입니다. 객체의 할당 및 할당 해제는 한 세계에서 다른 세계로 이동하는 것을 포함합니다.
그래도 문제가 있습니다. 역학과 달리 객체 상태를 캡슐화 하려고합니다 . 그러나 객체에 대한 수학적 설명은 상태를 온전히 배치하여 캡슐화를 완전히 파괴합니다. “관계형 파라 메트릭”이라는 수학적인 트릭이 있습니다.이 기법을 사용하면 크기를 줄일 수 있습니다. 캡슐화에 대한 개념적인 설명이 아니라 수학적 기법이라는 점을 제외하고는 지금은 다루지 않겠습니다. 캡슐화를 사용 하여 수학적으로 객체를 모델링하는 두 번째 방법은 상태를 미세화하고 관찰 가능한 이벤트로 객체 동작을 설명하는 것입니다. 이 두 모델에 대한 자세한 설명을 위해 Algol-like Languages의 객체 및 클래스 라는 제목의 논문을 참조 할 수 있습니다 .
[참고 사항 추가]
객체의 수학적 토대에 대한 훌륭한 분석은 William Cook의 기사 ” 데이터 이해 이해, 다시 방문 ” 에서 찾을 수 있습니다 .
답변
abelson & sussman의 오래된 고전 저서 “컴퓨터 프로그램의 구조와 해석”[1]에있는 체계에 대한 이론적 인 설명이있다 (리프 변형). 지금 무료 온라인! 로컬 상태를 저장하는 메커니즘이있는 경우 람다 미적분학 (~ aka Lisp)에도 객체 방향 개념을 포함하는 방법을 보여줍니다. 내가 알기로, 이것은 많은 세월 동안 std MIT 교과서였습니다. 이것이 subj에 대한 최고의 심판이라고 말하지는 않습니다. 이 pt에는 다른 더 좋은 것들이 있다고 확신하십시오.
나는 이것이 들었던 곳에서 완전히 공식화되었다고 생각하지 않지만 느슨하게 말하는 객체는 기본적으로 코드 + 데이터 형식으로 구성됩니다.
- 메소드 (매개 변수 포함)
- 상태, 즉 인스턴스 변수
캡슐화 된 형태로 틀림없이 상속과 같은 다른 측면은 기본이 아닙니다. abelson & sussman에 언급 된 바와 같이, 그들은 “구문 설탕”이라고 부릅니다.