“面向对象三大思想”产生的前世今生
2013-04-09 17:02
176 查看
众所周知,面向对象三大思想:封装,继承,多态。
但面向对象到底是怎么产生的,产生他的原因是什么呢?且听我慢慢道来~
很久以前,软件开发的世界还是一片浑浑噩噩,不管开发什么软件都面临着复杂性这个问题,代码里面到处是goto语句,程序的流程随意跳转。众生写代码时,越写到后面越不知道自己写的是什么。这时候出现一位巨人,他就是结构化编程。
结构化编程的基本思想是:有序地控制流程,即把程序的执行顺序限制为顺序、分支和循环这三种;把共通的处理归结为例程(函数)。好处是:
三大限制:大大降低了程序的自由度,减少了各种组合,使得程序不至于太过复杂。疑问:如果由于降低程序的自由度导致程序的实现能力低下,那就得不偿失了。对于这一点,结构化编程的顺序、分支和循环可以实现一切算法,虽然降低了程序的复杂性和灵活性,但是程序的实现能力并没有降低。
例程(函数):我们只需要知道过程(函数)的名字,而不需要知道过程的内部细节,即“黑盒化”。
虽然结构化解决了程序控制流的复杂问题,但程序里面不仅包括控制结构,还包括要处理的数据。随着处理数据的增加,程序的复杂性也会上升。这时候,面向对象编程来了!
“分别管理程序处理内容和处理数据对象所带来的复杂性”问题是,为了得到正确的结果,必须保持处理和数据的一致性,这在结构化编程中是非常困难的,解决这一问题的方案就是数据抽象技术。
数据抽象是数据和处理方法的结合。这便是最初“对象”一词的得来。面向对象编程也因此得名。
然后,从抽象原则来说,多个相同事物出现时,应该组合在一起,即DRY原则(Don't Repeat Yourself),便又引出了类这一概念。
根据数据类型来进行合适的处理(调用合适的方法),本来就应该是编程语言这种工具应该完成的事。这便是多态的引出了。
而对于继承,大部分的观点是“继承是随着程序的结构化和抽象化自然进化而来的一种方式”。结构化和抽象化,意味着把共通部分提取出来生成父类的自底向上的方法。(如果继承是这样诞生的话,那么最初,有多个父类的多重继承就会成为主流,而实际上最初引入继承的Simula语言只提供单一继承。松本行弘认为继承的原本目的实际是逐步细化)
以上便是摘自《松本行弘的程序世界》的一些观点,不知各位看官怎么理解面向对象?
但面向对象到底是怎么产生的,产生他的原因是什么呢?且听我慢慢道来~
很久以前,软件开发的世界还是一片浑浑噩噩,不管开发什么软件都面临着复杂性这个问题,代码里面到处是goto语句,程序的流程随意跳转。众生写代码时,越写到后面越不知道自己写的是什么。这时候出现一位巨人,他就是结构化编程。
结构化编程的基本思想是:有序地控制流程,即把程序的执行顺序限制为顺序、分支和循环这三种;把共通的处理归结为例程(函数)。好处是:
三大限制:大大降低了程序的自由度,减少了各种组合,使得程序不至于太过复杂。疑问:如果由于降低程序的自由度导致程序的实现能力低下,那就得不偿失了。对于这一点,结构化编程的顺序、分支和循环可以实现一切算法,虽然降低了程序的复杂性和灵活性,但是程序的实现能力并没有降低。
例程(函数):我们只需要知道过程(函数)的名字,而不需要知道过程的内部细节,即“黑盒化”。
虽然结构化解决了程序控制流的复杂问题,但程序里面不仅包括控制结构,还包括要处理的数据。随着处理数据的增加,程序的复杂性也会上升。这时候,面向对象编程来了!
“分别管理程序处理内容和处理数据对象所带来的复杂性”问题是,为了得到正确的结果,必须保持处理和数据的一致性,这在结构化编程中是非常困难的,解决这一问题的方案就是数据抽象技术。
数据抽象是数据和处理方法的结合。这便是最初“对象”一词的得来。面向对象编程也因此得名。
然后,从抽象原则来说,多个相同事物出现时,应该组合在一起,即DRY原则(Don't Repeat Yourself),便又引出了类这一概念。
根据数据类型来进行合适的处理(调用合适的方法),本来就应该是编程语言这种工具应该完成的事。这便是多态的引出了。
而对于继承,大部分的观点是“继承是随着程序的结构化和抽象化自然进化而来的一种方式”。结构化和抽象化,意味着把共通部分提取出来生成父类的自底向上的方法。(如果继承是这样诞生的话,那么最初,有多个父类的多重继承就会成为主流,而实际上最初引入继承的Simula语言只提供单一继承。松本行弘认为继承的原本目的实际是逐步细化)
以上便是摘自《松本行弘的程序世界》的一些观点,不知各位看官怎么理解面向对象?
相关文章推荐
- 黑马程序员——OC基础---面向对象(思想,类,对象,三大特性)
- 二、java面向对象三大思想
- java中面向对象三大思想(继承、封装、多态)简单应用
- Java面向对象的三大特性——封装,继承,多态
- Java 面向对象的三大特征:继承、封装【隐藏】、多态<为了适应需求的多种变化,使代码变得更加通用>
- 【boolan c++】面向对象的三大方式以及设计模式
- 连载:面向对象葵花宝典:思想、技巧与实践(5) - 面向对象迷思:面向对象导致性能下降?
- JS 弹出隐藏层 (面向对象的思想)
- Silverlight游戏设计(Game Design):(五)面向对象的思想塑造游戏对象
- 面向对象的思想
- java中的面向对象的三大基本特征
- 面向对象的三大特性
- 连载:面向对象葵花宝典:思想、技巧与实践(16) - 需求分析终极目的
- 面向对象的编程思想
- 黑马程序员 Java基础知识总结-面向对象三大特征
- 面向对象三大特征之一——多态
- 封装、继承和多态是面向对象的三大特征。
- 连载:面向对象葵花宝典:思想、技巧与实践(2) - 面向对象语言发展历史
- Java中面向对象三大特征总结