我感觉到有信誉的OO设计和模式归结为通过多态来减少条件语句(if
语句)。这将是非常笼统的陈述,并想知道它是否属实。如果不是这样,你能提供一个例子。
要明确 - 我的问题纯粹是学术性的。它不关心制作软件的现实和实用性。例如,问题是忽略了可理解性与复杂性之间的权衡。
答案 0 :(得分:3)
我认为,由于多态性,减少条件语句是OOP的副作用。恕我直言,OOP的主要好处是
通过继承,您可以轻松定义"关系"课间。例如Dog
是一种Animal
,因此Dog
继承Animal
,Dog
包含Animal
所拥有的所有方法/函数和字段/变量。在大多数OO语言中,如果不是全部,则会出现名为interface
或protocol
的内容。这定义了另一种关系。可以作为关系使用。通过所有这些关系,您的代码可能会有意义。
我认为抽象是OOP最重要的方面。使用类和对象,您可以编写:
SuperMarket market = new SuperMarket();
goToTheSuperMarket(market);
而不是
for (int i = 0 ; i < 1000 ; i++) {
walk();
}
turnLeft();
for (int i = 0 ; i < 1000 ; i++) {
walk();
}
...
哪个非常实用。
封装在OOP中也是非常重要的。我真的很喜欢这个功能。它允许您隐藏班级的某些功能。
你知道,OOP还有很多其他好处。 OOP不仅减少了条件数量。
答案 1 :(得分:1)
减少条件数量确实是从抽象中获得的一个好处。然而,这不是OO和其他形式的抽象的最终目标,而不是对象多态在其他提供类似效果的范例中存在。
我想说OO的一个重要历史目标,特别是在Smalltalk的原始实现中可见,而不是封装 - 每个对象都是它自己的小型计算机的想法。或者,正如Alan Kay所说,
隐藏其组合的单一行为构建块 内部的状态和过程,只能通过 消息交换
......这个概念在以后的OO头像中似乎已经在吸气剂,制定者和共享可变状态的海洋中消失了。
答案 2 :(得分:0)
正如其他答案所述,减少条件不是OO设计的主要目标,而是功能多态的好处。其他范例,例如functional programming can also have that effect。
OO设计更多的是关于产生低代表性差距(LRG) - 问题的模型与解决方案的模型之间的距离。这是另一个答案所指的&#34;代码有意义。&#34;
以下内容可从https://softwareengineering.stackexchange.com/a/308922/51948
重复使用现实问题的解决方案需要具有与问题模型非常相似的表示。这就是为什么骰子游戏有一个名为Die
的类,其方法名为roll()
,而不是带有011100110000001110101000100001010101000100
的代码块(假设这些二进制数字抽象在某些方面有意义)平台)。这被拉曼称为representational gap。抽象允许保持这种差距更小 - 一种称为低代表性差距(LRG)的策略。它使代码更容易跟踪需求和理解。 Domain-Driven Design (DDD)方法类似。
&#34; Rolling the dice&#34; (CC BY-NC-ND 2.0)jcoterhals