2010-12-10 1 views

답변

5

짧은 대답은 "클래스가 시스템 전체 클래스의 인스턴스라고 가정합니다. 각 클래스는 실제로 클래스 특정 Metaclass의 인스턴스입니다."또한 "다른 방법으로는 작동하지 않습니다".

답변을 약간 수정하면 "이름이 혼란스럽고 때로는 역할을 외우고 자신의 역할을 너무 많이 생각하지 않으려 고합니다."라고 말합니다.

짧은 털이 답 :

는 메타 클래스는 다른 모든 일반 스몰 토크 클래스처럼 인스턴스이며, 그것이 자신의 전용 클래스의 필요합니다. 일반적인 스몰 토크 객체의 각 인스턴스는 클래스 계층을 따라 상속 된 클래스를 가지고 있습니다. 각 클래스 자체는 클래스 고유의 메타 클래스의 인스턴스이며, 메타 클래스 계층 구조를 따르는 상속이 있습니다. 각 메타 클래스는 그 자체로 메타 클래스 클래스의 인스턴스입니다.이 클래스는 가상 머신에 의해 단락되어 있습니다. 아무도 메타 클래스 클래스를 부모에게 제공하는 용도를 찾지 못했기 때문에, 시도한 모든 사람들은 일반적으로 그들의 온전함은 그 과정에서 침식되기 시작했다. 여전히

긴 털이 답 : 각 클래스는 클래스 특정 메시지를 포함하는

스몰 토크 수 있습니다. 이것들은 Java의 정적 메소드와 대략적으로 동일하지만 몇 가지 중요한 차이점이 있습니다. 이러한 차이점 중 하나는 스몰 토크 클래스가 실제로 인스턴스화 된 객체라는 것입니다. 시스템에서 라이브 객체이며 다른 객체에서 상속하고 인스턴스 변수를 포함 할 수있는 능력을 갖추고 있습니다.

이 속성은 시스템에서 여러 가지 상속 계층을 만들 수 있습니다. 일반 객체는 각각 정확히 하나의 클래스의 인스턴스이며, 메시지는 객체의 클래스를 검색하는 객체로 전송 한 다음 클래스 계층의 상속 체인을 추적합니다. 일반 객체에 전송 된 메시지는 클래스 계층 구조로 해결됩니다.

또한 클래스 개체는 하나의 클래스 별 Metaclass 인스턴스입니다. 클래스 객체에 전송 된 메시지는 클래스 별 메타 클래스 조회 후 메타 클래스 계층의 위쪽으로 확인됩니다.

최대 하나의 계층까지, 메타 클래스 객체는 각각 시스템 전체의 고유 한 Metaclass 클래스의 인스턴스입니다. 메타 크라스 객체에 전송 된 메시지는 시스템 전체의 고유 한 Metaclass에서 검색됩니다.이 Metaclass는 다른 사람으로부터 상속 할 수 없으며 VM의 단락 회로로 배선됩니다.

기술적으로 시스템에는 두 개의 상속 계층 구조가 있고 세 번째 계층 구조는 단락 회로로 위장되어 있습니다. 실제적인 것이 많지만 이론적으로 두 가지로 멈출 이유는 없습니다.이를 통해 각 객체는 고유 한 객체 고유 메시지, 메시지, 각 클래스가 자신 만의 클래스 고유 메시지를 가질 수 있으며 모든 Metaclass는 Metaclass에 정의 된 하나의 메시지 집합에만 응답합니다.

깔끔한, 응?

+1

를 참조하십시오 이렇게 먼 곳에서는 아무 것도 걱정할 필요가 없습니다. – blueberryfields

+0

그래,하지만 메타 클래스가 아닌 메타 클래스 인스턴스가있는 이유는 무엇입니까? –

+0

죄송합니다, 내 손가락이 윤기 나는데 ... 명명 규칙입니다. point의 경우도 마찬가지입니다. – blueberryfields

3

클래스에는 두 개의 ClassDescription이 필요합니다. 하나는 인스턴스 메소드 용이고 다른 하나는 클래스 메소드 용입니다.

이제 두 개체 모두에서 클래스를 사용해 볼 수 있습니다. Metaclass를 갖는 이유 중 하나는 두 가지를 구별해야한다는 것입니다. theMetaClasstheNonMetaClass 메서드를 보면 서로가 미러링되고있는 것을 볼 수 있습니다. 즉, 메타 클래스에서이 클래스 멤버로, 클래스에서 메타 클래스로 일반 클래스 포인터 (모든 개체가 있음)로 이동합니다. 둘 다 인스턴스 클래스 인 경우 하위 슬롯을 만드는 것보다 나쁜 플래그 슬롯이 없으면 구현하는 쪽을 알 수 없습니다.

1

이 내가 완벽하게 이해 ... 나는 그것을 설명하기 위해 ;-) 많은 증류 후 때까지 그런 것들 중 하나입니다 ...

을 감안할 때 :

  • 객체의 행동에 의해 지정됩니다 동급
  • 클래스는
  • 정규 객체/클래스는 정규 객체/클래스에 대한 의미가 동작을도 객체

따라서 클래스 및 인스턴스에는 다른 동작 지정자가 있어야합니다 (예 : 클래스).

"인스턴스 측"이라고하는 것은 클래스의 인스턴스면을 나타냅니다. 우리가 "클래스면"이라고 부르는 것은 메타 클래스의 인스턴스면을 나타냅니다. 사람들은 메타 클래스는 #addInstVarNamed를 정의하는 예 측에 의미를 둘 때문에 더 클래스 측 클래스 변수가 없기 때문에 :, : 및 #addInstVarNamed : 예를 들어

는, 클래스 #addClassVarNamed을 정의합니다. 당신이 전부 클래스와 멀리 알라 http://selflanguage.org/을 할 경우

, 특징점에 깊이 파고하려면, 당신을 "Pharo으로 예"또는 "스몰 토크 프로그래밍 기술의 기본"물론