어떤 있습니까 객체 지향 프로그래밍 언어 클래스 패러다임을 기반으로하지 않습니다?
어떤 있습니까 객체 지향 프로그래밍 언어 클래스 패러다임을 기반으로하지 않습니다?
답변:
내가 아는 한, Self 는 프로토 타입을 기반으로 한 "클래스 프리"패러다임을 고안 한 원래 언어입니다 . 1980 년대에 이미 실험 단계에 존재했으며 스몰 토크 의 프로토 타입 패턴 을 우아하게 사용하여 클래스가 완전히 제거되었습니다.
그것은 내가 아는 다른 모든 "class-free"OO 언어에 영향을 미쳤다 :
JavaScript와 같은 언어는 프로토 타입을 기반으로하며 기존 객체를 복제하여 동작을 재사용합니다. 내가 링크 한 Wikipedia 기사는 Lua, ActionScript 및 기타 여러 언어가이 패러다임을 따르고 있음을 나타냅니다.
세계에서 가장 인기있는 객체 지향 프로그래밍 언어에는 클래스가 없으며 Javascript라고하며 프로토 타입 기반입니다. http://en.wikipedia.org/wiki/Prototype-based_programming
객체 지향은 서로 부분적으로 만 관련되어있는 몇 가지 중요한 개념에 대한 포괄적 인 용어입니다. 예를 들어 상속은 클래스가 아닌 인스턴스간에 사례별로 선언되거나 prototype
Thomas가 쓴 것처럼 전체 클래스가 구체적인 객체 로 표현 될 수 있습니다 . 구조 설명을 인스턴스 작성과 분리하는 것이 더 일반적입니다. 마찬가지로, 후기 바인딩은 명목상 동일한 메소드를 가진 객체가 호출 될 때 반드시 동일한 작업을 수행 할 필요는 없으며 런타임에 결정이 이루어짐을 의미합니다. 프로토 타입 기반 접근 방식에서도 마찬가지입니다. 캡슐화는 본질적으로 객체가 선언 된 클래스의 인스턴스인지 여부와는 완전히 독립적입니다.
즉, 대부분의 OO 언어는 클래스 기반 캠프에 단단히 있습니다. 그러나 도메인을 중심으로 한 디자인은 종종 특정 객체의 정체가 정적 클래스 다이어그램보다 훨씬 중요한 시스템으로 이어지고 데코레이터는 동일한 클래스 또는 인터페이스의 객체가 다른 행동.
Fortress 는 클래스 대신 특성을 기반으로하는 객체 지향 언어입니다. 차이점은 주로 구현 구성에 있습니다. 객체의 행동 (메소드 정의)은 여전히 프로그램 텍스트의 특정 지점에서의 선언에 의해 결정됩니다. 그런 점에서 클래스 기반 시스템과 비슷합니다.
순수한 객체 기반의 객체 계산법이 있습니다 (Cardelli의 생각). 모든 메소드는 인스턴스 멤버입니다. 기존 객체의 내용을 가져 와서 해당 멤버의 일부를 추가, 제거 또는 교체하여 새 객체를 만듭니다. 새 객체에는 기존 객체에 대한 링크가 없으며 일부 내용 만 있기 때문에 프로토 타입과 약간 다릅니다.
IIRC에서는 Python 및 기타 해시 테이블 지향 언어를 사용하여 비슷한 방식으로 프로그래밍 할 수 있습니다. 함수를 인스턴스 멤버로 추가 한 다음 메소드로 호출 할 수 있습니다.
Ada는 1995 년 개정판을 기준으로 객체 지향적이지만 다른 많은 OO 언어와 달리 객체 지향 유형과 모듈을 "클래스"라는 단일 구조로 결합하지 않습니다. 유형을 "class Foo"로 선언하고 모든 관련 메소드 선언을 클래스 선언에 넣는 대신 패키지 를 선언하고 패키지 내부 에 유형 (a record
) 및 기타 사항을 선언합니다 . 언급 된 다른 언어 중 일부는 "클래스가없는"것이 아니라 사물을 구성하는 방식이 약간 다릅니다.
Ada 95의 객체 지향 기능은 기존 1983 버전의 언어에 추가되었습니다. 상속 등을 지원하기 위해 기존 레코드 및 패키지 구성을 확장했습니다.
얼랭. 그렇습니다. Erlang 은 OO 정의의 세 가지 사항을 모두 충족하므로 객체 지향 언어입니다.