답변:
실제로 Alan Kay 는 "객체 지향 프로그래밍"이라는 용어를 만들 때 스몰 토크를 염두에 두지 않았습니다 .
11 월 66 일 유타에서 Sketchpad, Simula, ARPAnet, Burroughs B5000의 디자인, 생물학 및 수학 배경에 영향을 받았을 때 나는 프로그래밍을위한 아키텍처를 생각했습니다. 1967 년에 누군가 내가 무엇을하고 있는지 물었을 때 아마도 "개체 지향 프로그래밍"이라고 말했다.
그것의 원래 개념은 다음과 같은 부분을 가졌습니다.
- 나는 객체가 네트워크의 생물학적 세포 및 / 또는 개별 컴퓨터와 같고 메시지와 만 통신 할 수 있다고 생각했습니다. (메시징은 처음에 시작되었습니다. 유용한).
- 나는 데이터를 제거하고 싶었다. B5000은 거의 믿을 수없는 HW 아키텍처를 통해 거의이 작업을 수행했습니다. 셀 / 전체 컴퓨터 메타포가 데이터를 제거하고 "<-"는 또 다른 메시지 토큰 일 뿐이라는 것을 깨달았습니다. 기능과 절차.
- 나의 수학 배경은 각 물체가 그것에 관련된 대수학을 가질 수 있다는 것을 깨달았고, 이것들의 패밀리가있을 수 있으며, 그것들은 매우 유용 할 것입니다. "다형성 (polymorphism)"이라는 용어는 훨씬 나중에 부과되었고 (피터 웨 그너 (Peter Wegner)에 의해 생각됩니다) 그것은 실제로 함수의 명명법에서 비롯된 것이므로 함수보다 더 많은 것을 원했습니다. 나는 일반적인 대수를 준 대수 형태로 다루기 위해 "일반성"이라는 용어를 만들었습니다.
- 나는 Simula I 또는 Simula 67이 상속을받는 방식이 마음에 들지 않았습니다 (Nygaard와 Dahl이 엄청난 사상가와 디자이너라고 생각했지만). 따라서 상속을 더 잘 이해할 때까지 상속을 기본 제공 기능으로 사용하지 않기로 결정했습니다.
스몰 토크는이 개념의 결과로, Simula의 "객체"와 "클래스"개념을 빌려 확장 한 결과, Simula는 Kristen Nygaard와 Ole-Johan의 "Simula 언어 개발"에 설명 된대로 ALGOL에서 상속되었습니다. 달 (1978, 253 쪽) :
ALGOL에서 블록 (프로 시저 포함)은 외부 적으로 일반화 된 작업으로 간주됩니다. 유사 병렬 시퀀싱을위한 메커니즘을 도입함으로써 본질적으로 동일한 구성이 프로세스의 역할을 병렬로 수행 할 수 있으며 블록 인스턴스의 이름을 지정하고 그 내용에 액세스하는 메커니즘을 통해 일반화 된 데이터 객체로 작동 할 수 있습니다. 단일 구성에서 데이터와 작업을 결합 할 때 얻을 수있는 본질적인 이점은 이미 살펴 보았습니다.
이 탐색의 결과는 "프로 시저 속성"이 유용 할 수 있다는 발견이었습니다. "추상적 인"자동차 객체 클래스의 다음 예는 언어 정의 문서 (Dahl and Nygaard 1965), sect에서 인용됩니다. 5.3.
특히 서브 클래 싱에 대한 추가 영감은 CAR Hoare의 레코드 클래스 (258 페이지) 였습니다 .
Hoare (68)의 서브 클래스 아이디어는 자연스러운 출발점 이었지만 두 가지 어려움이있었습니다.
- 순수한 데이터 레코드뿐만 아니라 자체 작업과 로컬 데이터 스택이있는 프로세스의 서브 클래스가 필요했습니다.
- 또한 사전에 알려지지 않은 다양한 상황에서 나중에 적용 할 수있는 방식으로 공통 프로세스 속성을 그룹화해야했습니다.
1966 년 가을 Hoare의 레코드 클래스 구성을 성공하지 않고 우리의 요구 사항을 충족시키기 위해 많은 시간을 보냈습니다. 해결책은 1966 년 12 월에 "프리픽스 (prefixing)"라는 아이디어와 함께 갑자기 나타났습니다. 우리는 트럭이나 버스 인 자동차 대기열이있는 다리의 아톨 부스를 생각하고있었습니다. (이 예제는 (Dahl and Nygaard 1968)에 다시 나타납니다).
"class"및 "object"라는 용어 는 Ole-Johan Dahl, Bjorm Myhrhaug 및 Kristen Nygaard (4-5 페이지)의 SIMULA 67 COMMON BASE LANGUAGE 에도 나타납니다 .
블록 개념은 정통 애플리케이션 영역에서 유용한 분해 단위 인 "서브 문제"또는 "서브 알고리즘"의 직관적 개념에 해당합니다.
블록은 집계 된 데이터 구조와 관련 알고리즘 및 동작에 대한 공식적인 설명 또는 "패턴"입니다.
...
확장 된 블록 개념은 "클래스"선언 및 "객체 참조"(포인터), 원격 액세스 ","준 병렬 "작업 및 블록"연결 "과 같은 관련 상호 작용 메커니즘을 통해 도입됩니다.
수업은 1.3.3 장 (페이지 5)에서 더 자세히 설명합니다.
Simula 67의 새로운 중심 개념은 "개체"입니다. 객체는 자체 클래스 프로그램이며 "클래스 선언"에 의해 정의 된 자체 로컬 데이터 및 작업이 있습니다. 클래스 선언은 프로그램 (데이터 및 동작) 패턴을 정의하며 해당 패턴을 따르는 객체는 "동일한 클래스에 속한다"고합니다.
...
따라서 "객체 지향"이라는 용어는 아직 발명되지 않았지만 1969 년 Alan Kay가 스몰 토크 개발을 시작하기 전에 "클래스"와 "객체"모두 현대적인 용도와 유사하게 사용되었습니다.
Ivan Sutherland 는 스케치 패드 에서 Simula를 첫 번째 객체 지향 프로그래밍 언어로 식별합니다 . 사람-기계 그래픽 통신 시스템 (4 페이지)은 CAR Hoare, Douglas T. Ross ' , ALGOL 및 Sketchpad의 영향 도 인식합니다 .
그럼에도 불구하고, 서덜랜드의 사용자와 프로그래머 사이의 분리를 제거하려는 시도는 그렇게하지 못한 새로운 프로그래밍 패러다임의 상상력을 제공 한 유일한 시스템은 아니었다. Nygaard와 Dahl의 Simula [7]는 객체 지향의 원칙을 통합 한 최초의 기존 프로그래밍 언어 였지만 Sketchpad의 클래스 및 인스턴스 기반 상속 (객체는 아니지만) 구현은 Simula보다 몇 년 앞서있었습니다.
이 논문의 승인에 언급되어 있으며 MIT Lincoln Laboratory 기술 보고서에 인용 된 Douglas T. Ross의 연구를 통해 공통의 영향을 미쳤습니다. Ross는 1960 년대 중반 CAR Hoare와 함께 Algol 68위원회에 앉아 있었고, 이전에는 레코드와 유사한 데이터 구조 (플렉스라고 함)에 대한 그의 연구가 추상 데이터 유형에 대한 Hoare의 아이디어에 영향을 미쳤으며 나중에 Nygaard와 Dahl에 의해 인정되었습니다. Simula [7]의 클래스 정의 메커니즘의 기원으로서.
Alan Kay의 주요 Dynabook 프로젝트는 Xerox Star와 그의 언어 Smalltalk를 통한 객체 지향 프로그래밍에 대한 관심을 불러 일으켰습니다. 이는 Sketchpad의 직접적인 영향을 받았습니다. Kay는 스몰 토크의 기원이 Simula의 배포 테이프와 Sutherland의 Sketchpad 논문의 사본 둘 다의 책상에 우연히 등장했다는 사실을 기록했습니다 [5]. Kay는 두 시스템이 동일한 기본 유형 개념 (Ros의 플렉스에서 두 개의 서로 다른 경로를 통해 파생 됨)을 기반으로하며보다 광범위하게 사용 가능한 프로그래밍 시스템의 기초를 형성 할 수 있음을 인식했습니다. 이 두 가지 영향 경로를 비교할 때 Simula는 Sketchpad보다 훨씬 더 큰 프로젝트였으며, 최초의 객체 지향 프로그래밍 언어로 잘 인식되었습니다.
그러나 Alan Kay는 스몰 토크를 최초의 객체 지향 언어로 간주 합니다 .
스몰 토크의 기여는 실제로 고귀한 조상이 있지만, 전문 프로그래머의 큰 문제를 공격하고 초보 사용자가 작은 것을 가능하게하는 새로운 객체 지향이라는 객체 패러다임입니다. 객체 지향 설계는 실리콘 폭발에 의해 가능한 훨씬 더 복잡한 동적 시스템 및 사용자 관계 모델링의 효율성을 정 성적으로 개선하려는 성공적인 시도입니다.
그 용어를 만들어 낸 것에 대해서는 논쟁이 많지 않다고 생각합니다.
마지막으로 귀하의 질문에 대답하십시오 : 객체 지향의 핵심 개념 중 일부는 Simula 및 Algol 및 LISP와 같은 이전 언어에는 존재했지만 패러다임 자체는 그렇지 않았으므로 실제로 이름이 필요하지 않았습니다.
스몰 토크는 객체 방향을 염두에두고 설계되었으며 Alan Alan은 객체 방향으로 생각했습니다 .
나에게 OOP는 메시징, 로컬 보존 및 상태 프로세스 숨기기 및 모든 것의 늦게 바인딩을 의미합니다. Smalltalk 및 LISP에서 수행 할 수 있습니다. 이것이 가능한 다른 시스템이있을 수 있지만 나는 그것을 모릅니다.
이 아키텍처는 초기 개념을 통합 한 것처럼 보이지만 중심 개념은 스몰 토크에 의해 도입되어 패러다임의 첫 번째 구현을 나타냅니다.