gpt4 book ai didi

smalltalk - Smalltalk 类的生命周期是什么?

转载 作者:行者123 更新时间:2023-12-03 16:43:55 26 4
gpt4 key购买 nike

我想知道一个类(或对象)的生命周期是什么,我的意思是,当它进入内存并活着回答消息直到最终从内存中删除时。

我的假设是:

  • 由于您向对象和类发送消息,因此它们必须处于事件状态并在内存中才能回答它们
  • 当您通过向其类
  • 发送"new"消息来实例化它时,您可以使对象处于事件状态(从而进入内存并收听消息)。

    好的,所以一个对象从它的实例化开始就一直活着,直到垃圾收集杀死它或者你向它发送一条销毁消息(或者可能是它的类)

    但是,您如何实例化一个类以使其活跃?您不能向某种元类发送 NEW 消息(如果是,那么实例化元类的元元类是什么?)那么,默认情况下类是事件的吗?加载图像时,smalltalk 库中的每个类都会加载到内存中吗?真的有很多类随时都在内存中吗?如果是这样,我如何才能在特定时刻查看内存中的类和对象?

    最佳答案

    正如 Leandro 和 Bert 所描述的,您可以发送 new到元类。这创建的循环引用有点难以思考,但它们代表了设计和实现的“简单”和“优雅”(情人眼里出西施!)。我在下面附上了一张图,展示了这是如何工作的。特别注意 Metaclass 之间的循环和 Metaclass class .

  • 问:那么,默认情况下类是事件的吗?
  • 答:是的,如果它们作为物体存在于图像中,那么它们就是“活的”。
  • Q:加载图片时,smalltalk库中的每个类都会加载到内存中吗?真的有很多类随时都在内存中吗?
  • A:是的,图像中的每个类都在内存中。这是很多吗?它可能需要几兆字节;这就是您从方言提供者获得的“基本”图像中的内容。考虑到 Chrome 使用的内存,Smalltalk 实际上相当适中!
  • 问:如果是这样,我怎样才能看到某个时刻内存中的类和对象?
  • A:类层次浏览器显示可从选定的根(通常是 Smalltalk 词典)访问的类。较低级别的替代方法是使用 Metaclass allInstances .

  • 另请注意,虽然大多数 Smalltalks 都有 ClassBuilder,但并非所有都这样做(GemStone 没有),并且其属性和行为可以折叠到 Behavior 中。

    补充问题:
  • 问:如果我想要更小的图像怎么办?
  • 答:有各种 Pharo 图像可用,有些图像较少(没有 GUI),有些图像较多。您还可以自由地“卸载”任何不需要的包并保存您的图像。您还可以从“最小”图像开始并加载您需要的内容。是的,这与基于 C 的语言(和其他语言)不同,它们每次创建时都是空的。主要的实际效果是您在图像中寻找事物,而不是在图像之外寻找事物。如果您发现自己在限制为 1-2 MB 的环境中运行,那么这可能不适合您。 Smalltalk 的优势在于程序员的生产力。组装的优势在于体积小,速度快。你想解决什么问题?
  • 问:什么是粉红色方块?
  • 答:粉红色方块中的所有内容都附加了名称“类”。粉红色方块中的所有框都是 Metaclass 的实例(按照右边的绿色“is kind of”线)。
  • 问:请告诉我更多有关继承的信息。
  • 答:在任何面向对象系统中,类都描述了对象的属性和行为。继承意味着父类(super class)的属性和行为也是对象性质的一部分。 Person类直接通过Object类和Class继承ClassDescription。作为 Metaclass 的实例不提供继承。相反,它提供了一个描述类创建属性和行为的地方。所以,是的,Object 是“Object 类”的一个实例(有点),它描述了如何创建 Object 的实例。而且,不,对象不是“对象类”(继承自)的特化。 Object 的实例不知道如何创建 Object 的实例;这就是 Object 类(工厂)的作用。

  • enter image description here

    关于smalltalk - Smalltalk 类的生命周期是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60100414/

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