gpt4 book ai didi

java - 为什么静态方法不被认为是良好的 OO 实践?

转载 作者:IT老高 更新时间:2023-10-28 20:54:18 24 4
gpt4 key购买 nike

我正在阅读 Programming Scala .在第 4 章的开头,作者评论说 Java 支持静态方法,这是“不那么纯粹的 OO 概念”。为什么会这样?

最佳答案

面向对象是关于三件事:

  • 消息传递,
  • 状态进程的本地保留、保护和隐藏,以及
  • 所有事物的极端后期绑定(bind)。

在这三个中,最重要的一个是消息传递

静态方法至少违反了消息传递和后期绑定(bind)。

消息传递的概念意味着在 OO 中,计算是由相互发送消息的自包含对象网络执行的。发送消息是唯一的通信/计算方式。

静态方法不这样做。它们不与任何对象关联。根据通常的定义,它们根本就不是方法。它们实际上只是程序。 Java 静态方法 Foo.bar 和 BASIC 子例程 FOO_BAR 之间几乎没有区别。

至于后期绑定(bind):一个更现代的名称是动态调度。静态方法也违反了这一点,事实上,它甚至以它们的名字命名:static 方法。

静态方法破坏了面向对象的一些非常好的属性。例如,面向对象的系统是自动能力安全的,对象作为能力。静态方法(或真正的任何静态方法,无论是静态还是静态方法)都会破坏该属性。

您还可以在其自己的进程中并行执行每个对象,因为它们仅通过消息传递进行通信,因此提供了一些微不足道的并发性。 (基本上就像 Actors 一样,这不应该太令人惊讶,因为 Carl Hewitt 基于 Smalltalk-71 创建了 Actor 模型,而 Alan Kay 部分基于 PLANNER 创建了 Smalltalk-71,这反过来是由 Carl Hewitt 创建。 Actor 和对象之间的密切关系绝非巧合,事实上,它们本质上是一回事。)再次,静态(静态方法,以及特别是静态)打破那个不错的属性。

关于java - 为什么静态方法不被认为是良好的 OO 实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002201/

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