gpt4 book ai didi

smalltalk - 在 Pharo Smalltalk 中创建一个类?

转载 作者:行者123 更新时间:2023-12-02 22:54:41 24 4
gpt4 key购买 nike

我一直在关注以下链接中在 Pharo 中创建类(class)的示例: https://ci.inria.fr/pharo-contribution/job/UpdatedPharoByExample/lastSuccessfulBuild/artifact/book-result/PharoObjectModel/PharoObjectModel.html#fig:colorInstanceClassSide

这是创建 Dog 和 Hyena 类的示例。首先,我创建了一个名为 TestC 的包,并在 Instance 类中进行了以下操作:

enter image description here

enter image description here

据我所知,如果我错了,请纠正我,实例方面是我创建在实例化对象时起作用的方法的地方,而类方面则不需要创建对象来运行;就像Java中的静态方法类一样。

此时我遇到的第一个问题是为什么在接受更改后它仍然出现!我的类(class)左侧的符号?

根据教程,我应该输入以下代码:

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.

它有效,但我想知道我是否做出了正确的决定将这些方法放在类中(第二个问题),如果它是正确的,有人可以给我一个例子吗在这个例子中放入实例侧的方法?

谢谢

最佳答案

第一个问题

类前面的感叹号!是邀请您点击它。在这种情况下,它会提醒您类应该有注释(为了文档的目的)。

题外话

每个类都定义其实例的形状(或结构)及其行为。形状由类创建消息中的实例变量给出,如

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

对于您在类的实例端创建方法的行为

breed: aString
breed := aString

有了这个,你就有了一个完整的功能对象

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

但是,类也是对象。所以,它们可能有自己的形状。要将实例变量添加到类的形状中,请发送消息:

Dog class instaceVariableNames: 'count'

请注意,此消息的接收者是 Dog 类(Metaclass)的类,这是有道理的,因为是类塑造了它们的实例。

在您的示例中,每次创建新的 Dog(实例)时,Dog 类的 count ivar 都会增加 1 . 这可以用于跟踪到目前为止已创建的 Dog 实例的数量。然而,这些实例仍然不知道这一事实。

第二个问题

是的,ivar count 以及它的initializeincrementretrieve 方法属于该类边。为什么?因为它们的目的是跟踪您的类已创建的实例数量。这是否有用是另一个问题。事实上,它们在实例方面是没有意义的(毕竟,幸运的狗过着令人兴奋的生活,从不计算任何东西。)

关于smalltalk - 在 Pharo Smalltalk 中创建一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48034993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com