给OOP专家的一个问题。 - 页 43

 
Andrey Barinov:

彼得,我强烈推荐

https://en.wikipedia.org/wiki/Code_Complete

谢谢你。我会试着得到它并阅读它。
 
Artyom Trishkin:
彼得。这就是为什么我说--不需要无意识的继承。明确分离和分类。

下面是一个例子。

"水果 "这个类别是基础对象。

类--"水果 "和 "蔬菜 "是 "水果 "类的后代。

水果 "类是 "奇异果"、"芒果"、"柠檬 "和 "橙子 "类的父类。

有一个新的类别 "柑橘类水果"。

把它放在 "水果 "类和它的后继者--猕猴桃、芒果、柠檬和橙子之间。

"柑橘是柠檬和橙子的母体。


接下来,--我们将芒果和柠檬交叉,得到--一个李--芒果 对象。

该对象部分包含柑橘类属性,部分包含非柑橘类属性。它有两个父母,这个层次结构不能被优化。

因此,我们有李-芒果对象的多重继承和通往底层水果对象的双重路径:通过柑橘链和芒果链。

在这些链条中,我们必须绕过不必要的家长属性,以保留 "李芒果 "的个性。

 

彼得,这叫做:把自己的脑子搞坏了--想出了无法克服的困难。你需要指定任务,并为其制定课程。

为什么要引入一个名为 "柑橘类水果 "的中级类别?也许只需在动态列表中加入 "柑橘类水果 "的属性,就可以解决这个问题了。

 
Dmitry Fedoseev:

彼得,这叫做:把自己的脑子搞坏了--想出了无法克服的困难。你需要指定任务,并为其制定课程。

为什么要引入一个名为 "柑橘类水果 "的中级类别?也许只需在动态列表中加入 "柑橘 "属性就可以解决这个问题了。

我刚才想写一下这些财产。
味道属性将是两种水果属性的平均值。
 

还有这个。OOP毕竟是一个编程工具,而不是一个数据工具(怎么说才对)。该数据工具是一个数据库。

三张桌子。一个表有两列:水果的ID和它的名字。另一个有两列:属性的id和它的名字。第三个有两列:水果ID,财产ID。

因此,有可能无限地增加新的属性,把它们分配给水果,从而获得任何新的水果。

解决问题的手段必须与任务相适应。

 
Dmitry Fedoseev:

彼得,这叫做:把自己的脑子搞坏了--想出了无法克服的困难。你需要指定任务,并为其制定课程。

为什么要引入一个名为 "柑橘类水果 "的中级类别? 也许只要在动态列表中加入 "柑橘类水果 "的属性,就可以解决这个任务。

那就这样吧。

但是,跨越两个对象的属性会产生一个新的对象,怎么办?新的对象将部分地继承其他两个对象的属性。

如何在几个对象(它的父对象)和基对象之间实现其 "部分 "继承?

 
Реter Konow:

那就这样吧。

但是,两个对象的属性交叉产生一个新的对象,怎么办?新的对象将部分地继承另外两个对象的属性。

如何实现它对其他几个对象的 "部分 "继承?

通过应用适当的算法 来解决这一特殊问题。

OOP是一种编程工具,而不是描述周围世界的手段,无论从某种角度看它是如何相互对应的。

 
Dmitry Fedoseev:

还有这个。OOP毕竟是一个编程工具,而不是一个数据工具(怎么说才对)。该数据工具是一个数据库。

三张桌子。一个表有两列:水果的ID和它的名字。另一个有两列:属性的id和它的名字。第三个有两列:水果ID,财产ID。

因此,有可能无限地增加新的属性,把它们分配给水果,从而获得任何新的水果。

解决问题的手段必须与问题相匹配。

这不是关于属性,而是关于继承。也就是说,属性和方法在对象之间的分布。

新的对象将以不同的组合连接以前的对象的属性,这将增加其与基础对象的链的复杂性。

 
Реter Konow:

这不是关于属性,而是关于继承。也就是说,属性和方法在对象之间的分布。

新的对象将以不同的组合连接以前的对象的属性,这将增加其与基础对象的链的复杂性。

对象本身不会这样做。从数据库中选择一种水果的属性和另一种水果的属性,结合起来(留下一些东西,丢弃一些东西)--你得到一种新的水果--把它加入数据库。

 
即使是自然界也没有无限的可能性 来组合属性。有一定数量的染色体,而且它们被限制在一组属性中。