2017-12-30 10 views
4

나는 다음과 같은 링크에서 Pharo에서 클래스를 만드는 예를 다음되었습니다 https://ci.inria.fr/pharo-contribution/job/UpdatedPharoByExample/lastSuccessfulBuild/artifact/book-result/PharoObjectModel/PharoObjectModel.html#fig:colorInstanceClassSidePharo Smalltalk에서 클래스를 만들었습니까?

는 그것은 개와 하이에나 클래스를 만드는 예입니다. 우선은 TestC라는 패키지를 생성하고 인스턴스 클래스에 나는 다음과 같은 만들었 : 내가 아는, 그리고 만약 내가 잘못 정정 해줘 무엇을 위해

enter image description here

enter image description here

, 인스턴스 측 어디 클래스 측면에서 함수를 만들기 위해 객체를 만들 필요가없는 동안 객체를 인스턴스화 할 때 작동하는 메소드를 만듭니다. Java의 정적 메소드 클래스와 같습니다.

첫 번째 질문이 시점에서 내가 변경 사항을 수락 한 후에도 여전히 나타납니다. 내 수업의 왼쪽 부분에있는 상징입니까? 인스턴스 측에서 지금

Dog class 
    instanceVariableNames: 'count' 

나는 그것을 넣어하지 않았거나 클래스 측면에서, 나는 인스턴스에 넣어하기로 결정 튜토리얼에 따르면

나는 다음과 같은 코드를 삽입한다 다음 편 :

enter image description here

나는 다음과 같다있는 마지막 방법을, I 클래스 측에 넣어 :

enter image description here

enter image description here

나는 다음과 같은 코드로 성적 증명서의 클래스를 테스트 한 enter image description here

enter image description here :

aDog := Dog new. 
Dog count. 
bDog := Dog new. 
Dog count. 

하고 작동,하지만 난 싶습니다 내가 그 결정을 수업에 넣기로 결심했는지 안다. 측면 (두 번째 질문), 그리고 그 권리가 있다면이 예제에서 인스턴스 측에 넣을 메서드의 예제를 줄 수 있습니까?

감사

답변

5

첫 번째 질문

클래스의 앞의 느낌표 !는 그것을 클릭하는 초대장이다. 이 경우 클래스에 주석이 있어야 함을 알립니다 (문서화를 위해).

여담

모든 클래스는 모양 (또는 구조)과 그 인스턴스의 동작을 모두 정의합니다.형상은 사용자가 기능성 전체가이 가지는 클래스

breed: aString 
    breed := aString 

인스턴스 측 방법을 만들 행동

Object subclass: #Dog 
    instanceVariableNames: 'name breed birthdate' 
    classVariableNames: '' 
    package: 'TestC' 

같은 클래스 생성 메시지 인스턴스 변수에 의해 주어진다 오브젝트

dog := Dog new. 
dog name: 'Taylor'; breed: 'Great Dane' 

그러나 클래스도 오브젝트입니다. 그래서, 그들은 그들 자신의 모양을 가질 수 있습니다. 당신이 메시지를 보내 클래스의 형태로 인스턴스 변수를 추가하려면 그것의 형태 클래스이기 때문에이 메시지의 수신자가 이해하게 Dog 클래스 (A Metaclass)의 클래스가 있음을

Dog class instaceVariableNames: 'count' 

주를 자신의 인스턴스. 당신의 예에서

, 새 (인스턴스)를 생성 할 때마다 DogDog 클래스의 count 바르 이것은이 (가) Dog의 인스턴스 수를 추적 유지의 제안 봉사 할 수 있었다 1 씩 증가합니다 지금까지 생성 된 . 그러나 이러한 경우는이 사실을 알지 못합니다.

두 번째 질문은

예, 바르 countinitialize, incrementretrieve의 방법은 클래스 측에 속한다. 왜? 왜냐하면 클래스가 생성 한 인스턴스의 수를 추적하기위한 것이기 때문입니다. 이것이 유용하든 그렇지 않든간에 다른 질문입니다. 실제로 인스턴스 측면에서는 아무런 의미가 없었을 것입니다 (결국 운이 좋은 개는 아무 것도 세지 않고 흥미로운 삶을 살아갑니다).