【问题标题】:When designing an OO language, should I avoid write-only properties?在设计 OO 语言时,我应该避免只写属性吗?
【发布时间】:2023-04-03 01:26:01
【问题描述】:

我正在设计一种面向对象的编程语言以用于学习。该语言具有如下属性:

Class Fruit:
  Property ReadWrite Float weight
  Property WriteOnly Integer someWriteOnlyProperty # <-- avoid?

我应该为只写属性添加选项,还是只会导致使用这种语言的程序做出错误的设计决策?

【问题讨论】:

  • 我认为当今大多数 OOP 语言中实现属性的方式是纯粹的邪恶,应该避免。
  • 只写属性是什么?
  • @MK。 - 你能扩展一下吗?为什么你认为它是“纯粹的邪恶”?
  • 因为我不喜欢从读者那里获取信息的语法糖。在查看一行代码时,我想知道是否只有一个属性值被更改,或者是否有一个方法被调用。
  • @MK。属性在这里使用方法实现(程序员可以更改其 setter 和 getter 的实现),方法调用和属性 set/get 具有单独的语法(. 用于属性,-&gt; 用于方法)。在这种情况下,我认为语法糖不会成为问题,但对于其他语言,我完全同意你的看法。

标签: oop properties language-design writeonly


【解决方案1】:

无论如何都要设计只写属性 - 请注意它们的用途有限(如果您只写它而不公开它,为什么要有一个属性?)。

不妨改用简单的方法。这将减少那些使用您的代码的人的困惑。


Java 和 .NET 确实具有只写属性,因此有先例。

【讨论】:

【解决方案2】:

只写属性对我来说没有意义。用于信息目的的只读属性非常有用,但是“我给你一个信息,但我永远无法找出你所知道的”的具体情况是什么?

【讨论】:

  • 我认为一个例子是更改密码。看不到原来的值,只能改了。
  • 这不是一个真实的例子。如果您可以设置密码,那么只要您的程序正在运行,您就拥有该密码。只有下次启动您的程序时,它才会“忘记密码并且永远不会要求它”。 mmmpf
【解决方案3】:

其他 OO 语言允许这样做。例如,在 Java 中,您可以创建一个私有变量并添加一个允许您更改变量但不能读取它的方法。你的方法更像微软的路线,明确地创建“属性”,但我不明白为什么这会是一个问题。如果您设计一种 OO 语言来防止所有错误的设计决策,那么您的语言除了打印“DENIED”然后关闭之外不会做任何事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多