2017-12-30 4 views
4

Ich habe nach dem Beispiel eine Klasse in Pharo auf dem folgenden Link machen: https://ci.inria.fr/pharo-contribution/job/UpdatedPharoByExample/lastSuccessfulBuild/artifact/book-result/PharoObjectModel/PharoObjectModel.html#fig:colorInstanceClassSideSchaffung einer Klasse in Pharo Smalltalk?

Es ist das Beispiel einen Hund und eine Hyäne Klasse zu machen. Zuerst habe ich ein Paket namens TestC und in der Instance-Klasse habe ich folgendes gemacht:

enter image description here

enter image description here

Für das, was ich weiß, und korrigieren Sie mich, wenn ich falsch bin, die Instanz Seite ist, wo Ich erstelle die Methoden, die funktionieren, wenn ich ein Objekt instanziiere, während die Klassenseite ein zu erstellendes Objekt nicht benötigt. genau wie eine statische Methodenklasse in Java.

Die erste Frage, dass ich an diesem Punkt habe, warum nach dem Akzeptieren der Änderungen es immer noch erscheint! Symbol im linken Teil meines Unterrichts?

Nach dem Tutorial dann soll ich den folgenden Code setzen:

Dog class 
    instanceVariableNames: 'count' 

Jetzt habe ich nicht, wohin damit, auf der Instanz Seite oder in der Klasse Seite, habe ich beschlossen, es auf der Instanz zu setzen Seite folgendes:

enter image description here

und die letzten Methoden, die ich habe folgendes sind, lege ich sie auf der Klassenseite:

enter image description here

enter image description here

enter image description here

enter image description here

Ich habe die Klassen im Transcript mit dem folgenden Code getestet:

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

und es funktioniert, aber ich möchte Ich weiß, ob ich die richtige Entscheidung getroffen habe, diese Methoden in die Klasse zu integrieren Seite (zweite Frage), und wenn es richtig wäre, könnte mir jemand ein Beispiel für eine Methode geben, um die Instanz Seite in diesem Beispiel zu setzen?

Dank

Antwort

5

erste Frage

Das Ausrufezeichen ! vor der Klasse ist eine Einladung darauf zu klicken. In diesem Fall wird es Sie daran erinnern, dass Klassen Kommentare haben sollten (zur Dokumentation).

Digression

Jede Klasse definiert sowohl die Form (oder Struktur) und das Verhalten ihrer Instanzen.Die Form wird durch die Instanzvariablen in der Klassenerstellung Nachricht, wie

Object subclass: #Dog 
    instanceVariableNames: 'name breed birthdate' 
    classVariableNames: '' 
    package: 'TestC' 
Für das Verhalten

gegeben Sie Methoden in der Instanz Seite der Klasse erstellen

breed: aString 
    breed := aString 

Damit Sie eine voll funktionsfähige haben Objekt

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

Klassen sind jedoch auch Objekte. Sie können also ihre eigene Form haben. So fügen Form eine Instanzvariable zu einer Klasse Sie die Nachricht senden:

Dog class instaceVariableNames: 'count' 

Beachten Sie, dass der Empfänger dieser Nachricht ist die Klasse der Dog Klasse (a Metaclass), was Sinn macht, weil es Klassen ist die Form ihrer Instanzen.

In Ihrem Beispiel jedes Mal, wenn eine neue (Instanz) erstellen Dog die count Ivar der Dog Klasse wird um 1 erhöhen Dies könnte die Spur, wie viele Instanzen Dog zu halten dienen vorzuschlagen wurden bisher geschaffen . Diese Fälle werden jedoch dieser Tatsache nicht bewusst sein.

zweite Frage

Ja, die Ivar count und die Methoden zu initialize, increment und retrieve es in der Klasse Seite gehören. Warum? Weil sie die Anzahl der von Ihrer Klasse erstellten Instanzen protokollieren sollen. Ob das nützlich ist oder nicht, ist eine andere Frage; Tatsache ist, dass sie auf der Seite der Instanz keinen Sinn ergeben hätten (glückliche Hunde leben aufregende Leben, ohne jemals etwas zu zählen.)

Verwandte Themen