Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 为什么我们有时更喜欢数据结构而不是对象?_Oop_Design Patterns_Language Agnostic - Fatal编程技术网

Oop 为什么我们有时更喜欢数据结构而不是对象?

Oop 为什么我们有时更喜欢数据结构而不是对象?,oop,design-patterns,language-agnostic,Oop,Design Patterns,Language Agnostic,正如罗伯特·马丁所说: 隐藏对象 他们将数据隐藏在抽象背后,并公开对该数据进行操作的函数。数据结构 公开它们的数据并且没有任何有意义的函数 但他也提到: 过程代码(使用数据结构的代码)可以轻松地添加新函数,而无需 更改现有的数据结构。另一方面,OO代码使添加变得容易 在不更改现有函数的情况下创建新类 以及: 。。。 这样的混合使添加新函数变得困难,但也使添加新数据变得困难 结构。他们是两个世界中最糟糕的。避免创建它们 上面的混合是指数据结构和对象之间的混合 但数据结构似乎存在冲突:使用数据结构的

正如罗伯特·马丁所说:

隐藏对象 他们将数据隐藏在抽象背后,并公开对该数据进行操作的函数。数据结构 公开它们的数据并且没有任何有意义的函数

但他也提到:

过程代码(使用数据结构的代码)可以轻松地添加新函数,而无需 更改现有的数据结构。另一方面,OO代码使添加变得容易 在不更改现有函数的情况下创建新类

以及:

。。。 这样的混合使添加新函数变得困难,但也使添加新数据变得困难 结构。他们是两个世界中最糟糕的。避免创建它们

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


但数据结构似乎存在冲突:使用数据结构的好处是更容易添加函数,但对于数据结构,我们最好不要在其中添加函数。那么拥有数据结构有什么意义呢?例如,DTO(数据传输对象)是使用数据结构而不是使用对象的示例之一。不要在其中添加太多的getter逻辑,这是一个很好的实践但是为什么呢?你误解了鲍勃叔叔说的话

使用数据结构的优点是更容易添加函数

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


当数据结构和函数分离时,您可以添加新函数而不中断旧函数。相反,当数据结构和函数被捆绑到OOP中的类等单元中时,添加一个新的函数(方法)将打破所有旧的单元/类。

我们如何分离数据结构和函数,特别是在java等OO语言中?在“OO”语言中,您仍然可以轻松编写非OO代码,只需编写没有方法的类,只使用静态方法编写没有属性的类,而不是静态方法,我建议组合:编写由数据结构组成的对象并封装它们。这可以保持数据结构的纯净和简单,并防止对象本身作为数据结构传递。一般来说,当您用面向对象的语言实现数据结构时,数据结构将使用类定义,其实例将是对象。这个术语似乎更面向C/C++,其中类和结构作为一种语言特性是有区别的。