문제

수업 기반 OO가 프로토 타입 기반 OO 대신 인기가있는 이유는 무엇입니까? 그들은 학교에서 후자를 가르치나요? JavaScript는 프로토 타입 기반이지만 대부분의 사람들은 대부분 기능적으로 사용하거나 클래스 기반 시스템을 모방하려는 프레임 워크를 통해 사용합니다.

나는 태양이 연구를 받았다는 것을 알고 있습니다 본인 - 프로토 타입 기반 OO에 대한 다른 지식 출처가 있습니까? 바람직하게는 자기 배운 것이 접근 할 수있는 것.

출판 된 논문이 포함 된 책을 찾았습니다. 프로토 타입 기반 프로그래밍 : 개념, 언어 및 응용 프로그램

누구든지 읽었습니까?

--

그래서 나는 나에게 가장 많은 대답을 주었다. 그래도 나는 정말 만족하지 않습니다. 나는 훨씬 더 기술적 인 답변을 듣고 싶었을 것입니다. 어쩌면 나는 나 자신을 잘 설명하지 않았을 것입니다.

도움이 되었습니까?

해결책

프로토 타입 상속의 장점은 프로토 타입 체인이 쉽게 조작되기 때문에 잠재적으로 멋진 메타 프로 그램을 가능하게 할 수 있다는 것입니다. Metaprogramming은 시간의 99%가 잘못된 대답이기 때문에 이것은 다소 학문적 이점입니다. 예를 들어, 프로토 타입 스와핑을 통해 온라인으로 오프라인 시점과 REST 기반 서버 스토어를 투명하게 전환하는 특수 DSL이있는 JavaScript 키 값 관찰자 스타일 데이터 조작 레이어를 가질 수 있습니다. 나는 그것이 이것을하는 가장 좋은 방법인지 확실하지 않지만, 이것을 늦게 생각할 수있는 최고입니다. 이런 종류의 간접이 여러 계층을 시작하면 디버그하는 것이기 때문에 일반적으로 프로젝트 코드에서하고 싶은 일이 아닙니다. 그러나 라이브러리에 보관할 때 나쁘지는 않습니다.

덜 유용한 장점은 자신의 클래스 시스템을 설계 할 수 있다는 것입니다. 나는 모든 JavaScript 라이브러리가 '클래스'가 어떻게 구성되는지에 대한 약간의 양립 할 수없는 접근 방식을 가지고 있기 때문에 도움이 덜 도움이됩니다.

상속 모델을 해당 모델에서 구현 한 언어와 혼합하는 사람들이 많이 있습니다. JavaScript가 역동적이고 약하게 타이핑되어 도구가 어렵다는 사실은 프로토 타입 언어와 관련이 없습니다.

다른 팁

인기에 대한 설명으로 각각의 장점/단점을 지적 할 사람을 찾고 있다면, 기술에서 매우 흔한 이유가있는 오류에 빠진다고 생각합니다. 그 인기는 일부와 관련이 있습니다. 품질의 절대 측정.

진실은 훨씬 더 부드럽습니다. 클래스 기반 OO는 Java가 고전적인 OO를 사용하고 Sun은 수백만 달러와 Java의 인기를 구축하는 데 오랜 시간을 보냈기 때문에 인기가 있습니다. 사람들이 기업에서 성공적으로 사용되어 대학에서 널리 가르치는 것을 알 수 있도록합니다. 및 고등학교 AP 시험.

프로토 타입/고전 OO는 아이디어를 구성하는 다른 방법입니다. 기본적으로 지원하지 않는 언어로 구현할 수 있습니다 (파이썬 그리고 자바 떠오르고 자바 스크립트 반대편).

Classical OO에서는 객체에 대한 추상 클래스 계층 구조를 정의한 다음 실제로 해당 클래스의 인스턴스와 함께 작동합니다. 프로토 타입 상속에서 객체 인스턴스의 계층 구조를 만듭니다. 두 캠프에서 조금 이단이 될 수 있다고 생각하지만, 두 가지를 혼합 할 수없는 이유는 보이지 않습니다 ...

나는 이것에 대한 정확한 이유를 모른다. 그러나 여기 내 이유가있다

나는이 논쟁이 다이나믹 대 정적과 동일하다고 생각합니다. 클래스는 객체의 정적 정의이며, 객체에서 기대할 수있는 것을 쉽게 알 수 있으며, 언어가 적절한 지능적인 지원과 문서를 갖도록 도구를 도울 수 있습니다. 당신은 대상의 다른 멤버와 방법이 무엇인지 쉽게 알 수 있습니다. 또 다른 것은 객체에 표시되지 않는 수업에서 개인 구성원을 선언 할 수있는 능력의 다른 패러다임입니다. 이것은 프로토 타입에서 수행 할 수 없습니다. 어형 변화표.

프로토 타입 패러다임은 좋지만 객체의 방법과 멤버에 대한 정보를 제공 할 수있는 능력이 부족하여 툴링을 더 어렵게 만들고 동적 타이핑 프로그래밍에도 더 의미가 있습니다.

이 질문은 저에게 흥미를 느꼈으므로 돌아가서 개념에 관한 원래 논문 중 일부를 읽었습니다. 그것은 1980 년대 중반 Smalltalk 세계에서 시작된 것으로 보이지만 결국 창립 교장 중 하나가되었습니다. 본인. 훨씬 나중에 JavaScript도 채택했습니다.

논문에 제기 된 주장은 배우기가 더 쉽다는 것입니다. 학습 이외의 다른 기술적 이점은 없습니다. 이 논문은 모두 수업 기반 언어만큼 표현력이 있지만 배우기가 훨씬 쉽습니다. 사람들은 자연스럽게 사물에 대해 초록보다는 구체적인 방식으로 생각합니다. 우리는 동물원에서 본 코끼리를 일반적인 "코끼리"가 아니라 생각합니다. 우리가 다른 코끼리를 볼 때, 우리는 그것들을 첫 번째 코끼리와 차이로 분류합니다. 프로토 타입 기반 언어는 이러한 생각을 촉진합니다. 그것을 차동으로 프로그래밍으로 생각하십시오.

그것이 언어로 그것을 사용하기에 충분한 이유입니까? 아마도. 아이디어가 처음으로 여겨지기 시작한 지 25 년 동안, 나는 수업 기반 OO와 같은 추상적 인 개념이 대부분의 사람들이 배우기에는 너무 어렵지 않았다고 주장 할 것입니다. 반면에 아마도 블루 칼라 프로그래밍 언어 (예 : JavaScript)가 필요할 수 있으며, 이는이를 달성하는 방법 일 수 있습니다.

관심이 있으시면 시작할 수 있습니다 이 종이 자기에 대해.

프로토 타입 상속에 대한 다른 기사를 다시 쓰고 싶지 않으므로 이전 기사에 연결하겠습니다. 당신을 염두에 두십시오. 그들은 정말 길지만 읽을 가치가 있습니다.

  1. 클래식에 대한 프로토 타입 상속의 이점?
  2. 프로토 타입 상속이 중요한 이유

차이는 파워 동적 (프로토 타입) 언어가 당신에게 제공되는 것 같습니다. LISP와 마찬가지로 JavaScript는 프로그래머에게 거의 무제한의 전력을 제공합니다. 이 힘은 프로그래머의 책임과 자신감의 수준에 의해서만 제한됩니다. 따라서 토론은 정적 타이핑과 유형이없는 것과 동일합니다. 프로그래밍 능력과 자체 분야가 충분히 강하다고 생각하면 프로토 타입 스타일을 찾으십시오.

유명한 한 가지 말하기 :

재능은 자신이 할 수있는 일 (읽기 : 클래스 기반), 천재는 자신이 원하는 것을 수행합니다 (읽기 : 프로토 타입 기반).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top