我正在做一个演示,以显示结构化编程和面向对象编程之间的差异,并且我想以一个示例说明为什么人们需要OOP,在该示例中,应用OOP概念将使编码变得更加容易,从而使听众真正感到他们需要OOP。
有任何想法吗 ??
我正在做一个演示,以显示结构化编程和面向对象编程之间的差异,并且我想以一个示例说明为什么人们需要OOP,在该示例中,应用OOP概念将使编码变得更加容易,从而使听众真正感到他们需要OOP。
有任何想法吗 ??
Answers:
您可能想看一下这个快速的视频博客。结果是结构化编程和OO编程之间的区别在于它们从编程中获得的好处,而不是它们所添加的内容。诸如结构化编程和面向对象编程之类的软件学科是约束性的,而不是启用性的。这里是一些定义。警告:您不会喜欢它们。
结构化编程是对goto(控制权的直接转移)施加的约束
OO编程是对指向函数指针(控制的间接传递)的一种约束
函数式编程是根据分配进行训练的学科。
首先不是很难理解。Dijkstra发现,在算法中允许goto时,不可能创建正确性的一般证明。然而,如果控制结构只限于顺序,选择和迭代,然后正确性的证明是可能的。当然,我们现在甚至都没有尝试证明事情是正确的,但是我们确实喜欢结构化编程的简单性和优雅性。
OO有点难理解。我们通常将OO定义为封装,继承和多态。鲜为人知的是,所有这三个属性都是可以实现的,并且经常是在C 中实现的。确实,C ++最初只是编译为C的预处理器。实际上并不难封装在C中,也很难构建彼此为子集的数据结构,用于模拟继承。但是,多态性要难一些。它需要指向在C中难以很好管理的函数的指针。像C ++这样的语言给我们的是对那些指向函数的指针的约束。C ++编译器为我们构建了vtable,并根据严格的形式主义初始化了其中的指针。因此,从非常真实的意义上讲,OO只是施加于纪律控制的间接传递,即函数的指针。
结构化编程是关于如何不使用goto的。OO是关于如何不使用函数指针的。和函数式编程太是所有关于不这样做。在函数式编程中,除了在最严格的控制情况下,我们不分配变量。
因此,最后,所有这些编程“技术”实际上都是在约束学科而不是使技术成为可能。他们告诉我们没有做的比他们告诉我们要去做。这意味着软件开发在过去40年中没有增长。相反,它已经缩小了。当我们了解了所有不应该做的事情时,它变得越来越受约束。
学习不做什么是好事;但这是一个令人不安的问题:我们学到了什么新东西?
有三种对计算机编程的基本方法:
goto
s,例如在旧的BASIC解释器中或在汇编语言中。很少有人以这种方式编程。在我看来,面向对象的编程是不同的。它是关于如何大规模组织程序的。它不会替代或淘汰我上面提到的3个范式中的任何一个-在方法主体中,您仍然需要从列表中选择3个范式之一进行写入。
这与您如何预期变化有关。
这两个概念都使其易于重用,但是OOP为更轻松的更改打开了大门。OOP具有结构化编程的所有可重用性,但是您也可以使用它轻松地创建新功能。
您可以说OOP继承了结构化编程的所有功能以及继承的其他功能!:-D
这些概念是正交的。结构化编程是关于在过程/函数/方法中对代码进行结构化。进行OOP时,完全有可能(并且很希望)在类方法中遵循结构化编程的原理。
那是一种主观的措辞-结构化编程和OOP是解决问题的风格,并且一种并不总是比另一种更好。如果以结构化的方式编写数值方法库,那么在此过程中,您将对输入数据执行转换,这将非常有意义。但是,由状态机驱动的简单代理可以轻松地表示为Java或C ++中的自包含类。OOP是表达数据结构存储容器的自然方法。
谈论信息隐藏和模块化是自然激发OOP风格的好方法。
史蒂夫·耶格(Steve Yegge)在这个问题上写了一个有趣的观点 -在某些方面,这是对两种风格之间方法差异的更好描述。
建立业务模型时,OOP更容易理解。当您考虑应用程序的元素时,可以使用它们之间的一些对象和关系,例如,书中有作者,书名,ISBN。书籍要借给图书馆,学生可以借用。结构化编程要求考虑特定过程,而不是抽象实现。
OOP旨在简化更改。可以更改结构程序,但必须用代码描述。OO程序中的更改可以通过抽象模型更改来描述。