gpt4 book ai didi

oop - Smalltalk 中的必需属性

转载 作者:行者123 更新时间:2023-12-04 03:31:03 24 4
gpt4 key购买 nike

我正在使用 Pharo Smalltalk 编写类(class),但我认为这个问题对其他 Smalltalk 实现有效。

我知道一种强制实例具有特定属性的方法是提供一个类方法来创建实例,然后建议使用类创建方法。但是任何用户都知道 new 或 basicNew 可以随时使用。

我曾考虑过使 new 和 basicNew 无效并引发异常,但这似乎过于激进,因为有时我可能需要创建实例以进行调试。

是否有其他库或机制来强制完成这些特定属性?

最佳答案

没有。这很好。

以下是一些您可能会遵循的方法:

  1. 通过为它们提供验证来确保你的对象是有效的。这是一个非常广泛的话题,所以我只想说一个验证框架能够检查您的对象并以某种方式将它们不遵守的任何规则明确化。

    根据您的操作,您可能会在生成或修改对象时限制对 GUI 的验证。然而,更复杂的方法应该允许任何对象决定它是否有效(在给定的上下文中)。

  2. 从实例端协议(protocol)中排除单个 setter。仅提供多个关键字 setter ,如果缺少某些内容或不合适,这些 setter 将失败。这意味着您将提供像 Point >> #x:y: 这样的方法,但不提供 Poit >> #x:Point >> #y:.

    正如示例所暗示的,您会发现很难完全采用这种做法,因为基本类不遵循这种风格。另请注意,这种做法需要某种验证,因为只检查 notNil 通常过于幼稚。

  3. 在需要解决这些问题之前,放松一下,什么也不做。

    换句话说,将问题推迟到您的软件发展到足以引起您注意其对象的创建和更改方式为止。

我之所以声称事情是好的,是因为 Smalltalk 传统上更倾向于开放而不是安全,它促进甚至鼓励人们进行实验,即使是以“错误”的方式进行实验。旨在防止对象被破坏的每个功能,迟早会阻止您修复它们。更重要的是,它们会消耗大量能量,而这些能量原本可以用于更高效的目的。

关于oop - Smalltalk 中的必需属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45311963/

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