카테고리 보관물: cstheory

cstheory

객체 지향 모델의 “객체”에 대한 수학의 공식 정의 / 카운터 파트 과학의 초보자이기 때문에 내 질문이 제대로 틀리지

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

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

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

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



답변

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

  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의 기사 ” 데이터 이해 이해, 다시 방문 ” 에서 찾을 수 있습니다 .


답변

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

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

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

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

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


답변