我正试图理解OOP背后的坚实原则,并对此产生了怀疑。

按照前面的类图,我将计算车辆的base_cost。为此,我需要访问马力和税收,然后使用base_cost()函数计算所有内容。

根据我在这个链接中的理解,我可以猜测它并没有违反德米特定律,因为您是从本地创建的类(Vehicle)访问方法。我说的对吗?
发布于 2022-03-04 09:56:51
如评论中所述,实体不包括德米特定律。这太可惜了因为它比所有坚实的建议更中肯和有用。。只是为了让这件事不受影响。
关于您的确切情况,在vehicle上调用方法当然是德米特所允许的,因为该对象是作为实例变量保存的。这方面有一个明确的规则。
但是,如果我们考虑的是面向对象的系统,那么get_price()、get_power()和get_tax()返回的东西也是对象,因为所有东西都应该是面向对象系统中的对象。在Demeter环境中,乘以返回的值就是向这些对象“发送消息”。现在这是不允许的,因为您没有直接保存对这些对象的引用,也没有在这个调用中创建它们的参数。
因此,根据德米特定律,“获取”对象/值在技术上可能是合法的,但是调用那些对象/值的方法并不是合法的。所以基本上,任何有“获取者”的东西最终都会违反德米特定律。
这是故意的。德米特定律实际上执行的是封装。您不想从对象中“获取”数据的想法,而是要求对象使用它所拥有的数据来执行行为。
https://stackoverflow.com/questions/71313476
复制相似问题