여기에는 약 100 가지의 용어 문제가 있으며, 대부분 자신의 아이디어를 '최고'처럼 들리려고하는 사람을 중심으로 구축되었습니다.
모든 객체 지향 언어는 몇 가지 개념을 처리 할 수 있어야합니다.
- 특히 데이터 멤버 및 멤버 함수 또는 데이터 및 방법으로 알려진 데이터에 대한 관련 작업과 함께 데이터를 캡슐화합니다.
- 상속, 이러한 객체가 이러한 변경을 제외하고 다른 객체 세트와 같다고 말할 수있는 능력
- 다형성 ( "다양한 형태") : 객체가 어떤 메소드를 실행할 것인지 스스로 결정하므로 언어에 따라 요청을 올바르게 라우팅 할 수 있습니다.
이제 비교하자면 다음과 같습니다.
첫 번째는 전체 "클래스"대 "시제품"질문입니다. 이 아이디어는 원래 Simula에서 시작되었으며, 클래스 기반 방법으로 각 클래스는 동일한 상태 공간 ( "가능한 값"을 읽음)과 동일한 작업을 공유하여 동등 클래스를 형성하는 일련의 객체를 나타 냈습니다. Smalltalk를 다시 살펴보면 클래스를 열고 메소드를 추가 할 수 있기 때문에 Javascript에서 수행 할 수있는 것과 사실상 동일합니다.
이후의 OO 언어는 정적 유형 검사를 사용할 수 있기를 원했기 때문에 컴파일 타임에 고정 클래스 세트라는 개념을 얻었습니다. 오픈 클래스 버전에서는 더 많은 유연성이있었습니다. 최신 버전에서는 컴파일러에서 테스트가 필요한 몇 가지 정확성을 검사 할 수있었습니다.
"클래스 기반"언어에서 해당 복사는 컴파일 타임에 발생합니다. 프로토 타입 언어에서 작업은 프로토 타입 데이터 구조에 저장되며 런타임시 복사 및 수정됩니다. 그러나 추상적으로 클래스는 여전히 동일한 상태 공간 및 메소드를 공유하는 모든 오브젝트의 동등 클래스입니다. 프로토 타입에 메소드를 추가하면 새로운 동등성 클래스의 요소를 효과적으로 만들 수 있습니다.
왜 그렇게합니까? 주로 런타임에 단순하고 논리적이며 우아한 메커니즘을 만들기 때문입니다. 이제, 새로운 객체를 만들 거나 새로운 클래스를 만들려면, 당신은 단순히 데이터와 프로토 타입의 데이터 구조를 모두 복사 깊은 복사를 수행해야합니다. 상속과 다형성은 어느 정도 무료로 제공됩니다. 메소드 조회는 항상 이름별로 메소드 구현을위한 사전을 요청하는 것으로 구성됩니다.
Javascript / ECMA 스크립트로 끝나는 이유는 기본적으로 10 년 전에 시작했을 때 훨씬 덜 강력한 컴퓨터와 훨씬 덜 정교한 브라우저를 다루고 있었기 때문입니다. 프로토 타입 기반 방법을 선택하면 원하는 객체 방향 속성을 유지하면서 인터프리터가 매우 간단 할 수 있습니다.