【问题标题】:Why do we sometimes prefer having data structures over objects?为什么我们有时更喜欢拥有数据结构而不是对象?
【发布时间】:2019-04-07 06:45:23
【问题描述】:

正如罗伯特·马丁的Clean Code 所说:

对象隐藏 他们的数据在抽象背后,并公开对该数据进行操作的函数。数据结构 暴露他们的数据并且没有有意义的功能。

但他也提到:

过程代码(使用数据结构的代码)可以轻松添加新功能,而无需 改变现有的数据结构。另一方面,OO 代码使其易于添加 新类而不改变现有功能。

和:

... 这种混合使得添加新功能变得困难,但也使得添加新数据变得困难 结构。他们是两全其美的。避免创建它们。

上面的Hybrid是指数据结构和对象之间的混合。

但是数据结构好像有冲突:使用数据结构的好处是添加函数更容易,但是对于数据结构我们最好不要在里面添加函数。那么拥有数据结构有什么意义呢?例如。 DTO(数据传输对象)是使用数据结构而不是使用对象的示例之一。而且最好不要在其中添加大量的 getter 逻辑。 -- 但是为什么呢?

【问题讨论】:

  • 一般来说,当你用面向对象的语言实现数据结构时,数据结构将使用类来定义,其实例将是对象。该术语似乎更面向 C/C++,作为语言特性,您可以区分类和结构。
  • 注意对象和数据结构之间的冲突被称为the expression problem。

标签: oop design-patterns language-agnostic


【解决方案1】:

你误解了鲍伯叔叔的话。

使用数据结构的好处是更容易添加函数

不,应该是:分离数据结构和函数的优点是更容易添加函数。

当数据结构和函数分开时,你可以在不破坏旧函数的情况下添加一个新函数。相反,当数据结构和函数被捆绑到 OOP 中的类等单元中时,添加一个新函数(方法)将破坏所有旧的单元/类。

【讨论】:

  • 我们如何分离数据结构和函数,尤其是在像java这样的OO语言中?
  • 在“OO”语言中,您仍然可以轻松编写非OO代码,只需编写没有方法的类,以及仅使用静态方法编写没有属性的类。
  • 我建议不要使用静态方法,而是建议组合:编写由数据结构组成的对象并封装它们。这使数据结构保持纯粹和简单,并防止对象作为数据结构本身被传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多