面向过程与面向对象
《Java编程思想》是一本好书,但同时也是晦涩难懂,其一是知识本身的难度,其二这本书是翻译过来的,而且是直译。我也是尝试了好多次才又拿起了这本书啃,没想到今天突然感觉发现了宝藏。
接下来我就罗列一下今晚的收获吧:
Sun对Java的设计目标:为程序员减少复杂性。(虽然Sun被收购了,还是谢谢Sun,注意,这里说的不是减少程序的复杂性,而是减少程序员写代码的复杂性,Java面向对象的思想毫无疑问解放了编程的生产力,打个比方,Sun负责留守大本营,程序员们利用Java大杀四方)
”人们所能解决问题的复杂性取决于抽象的类型和质量“,这是结论,接下来就聊到抽象机制的问题了。
举起了一个栗子:
- 汇编语言是对底层机器的抽象
- Basic,C是对汇编语言的抽象
接下来,重点来了:
但它们的抽象都是基于计算机的结构去解决问题,而不是基于所要解决的问题去考虑。
面向过程的特点的本质是啥?是基于计算机的结构解决问题!!!
在面向过程的情况下,程序员需要在机器模型和待解决问题模型之间建立关联。(当然,这种方式是非常困难的)
在面向过程到面向对象的路上,前人们做了哪些努力呢?
- LISP:所有问题都是列表
- APL:所有问题都是算法
- Prolog:所有问题都是决策链
问题:针对特定领域都是不错的解决方案,但其通用性太弱,无法脱离领域限制。
面向对象来了,核心思想:所有问题都是对象!!!(对象具有状态和操作,也就是特性和行为,更专业,更熟悉的说法:属性和方法)
一句话说明面向过程和面向对象的区别???
面向过程基于计算机的结构解决问题,面向对象基于问题本身(基于问题本身:将问题抽象为对象)解决问题。