2017-12-30 11 views
4

私は、次のリンクからファロでクラスを作るの例を以下されています: 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

と私は以下のとおりであるしている最後の方法は、私はクラスの側にそれらを置く:

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. 

、それは動作しますが、私はしたいと思いますそれらのメソッドをクラスに入れるという正しい決断をしたかどうかを知る(の2番目の質問)、この例でインスタンスの側に置くメソッドの例があれば誰でも私に教えてくれますか?

おかげ

答えて

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クラス(Metaclass)のクラスであること

Dog class instaceVariableNames: 'count' 

注:クラスの形状にインスタンス変数を追加するには、メッセージを送信しますインスタンス。あなたの例では

、あなたが新しい(のインスタンス)を作成するたびDogDogクラスのcount IVARこれは、これまでに作成されたどのように多くのインスタンスDogのを追跡する提案を果たす可能性が1ずつ増加します。しかしながら、これらの事例は、この事実を知らないままであろう。

2番目の質問

はい、initializeincrementretrieveにIVAR countおよび方法は、それは、クラス側に属しています。どうして?あなたのクラスが作成したインスタンスの数を追跡するためのものです。これが有用かどうかは別の質問です。実際にはインスタンス側で意味をなさないということです(結局のところ、幸運な犬は何もカウントせずにエキサイティングな生活を送っています)。

関連する問題