所有面向对象的设计都归结为减少条件吗?

时间:2016-02-01 02:03:03

标签: oop if-statement design-patterns conditional

我感觉到有信誉的OO设计和模式归结为通过多态来减少条件语句(if语句)。这将是非常笼统的陈述,并想知道它是否属实。如果不是这样,你能提供一个例子。

要明确 - 我的问题纯粹是学术性的。它不关心制作软件的现实和实用性。例如,问题是忽略了可理解性与复杂性之间的权衡。

3 个答案:

答案 0 :(得分:3)

我认为,由于多态性,减少条件语句是OOP的副作用。恕我直言,OOP的主要好处是

  • 它使代码有意义;

通过继承,您可以轻松定义"关系"课间。例如Dog是一种Animal,因此Dog继承AnimalDog包含Animal所拥有的所有方法/函数和字段/变量。在大多数OO语言中,如果不是全部,则会出现名为interfaceprotocol的内容。这定义了另一种关系。可以作为关系使用。通过所有这些关系,您的代码可能会有意义。

  • 它使代码 abstract ;

我认为抽象是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)方法类似。

Rolling the dice by jcoterhals, on Flickr
&#34; Rolling the dice&#34; (CC BY-NC-ND 2.0jcoterhals

UML class diagram of DiceGame