面向对象编程(一)
1、编程思想的概述
一直在想一个问题:编程到底是在干啥?谈到这个问题就不得不说说计算机了,计算机是所有程序的载体,把计算机的输入信号按照一定规律处理后输出,这个处理规则就是我们所要编写的程序。说的通白点,编程就是要让计算机明白当它接收到了信息后该怎么办?
当代的计算机都是二进制电子式计算机(有兴趣可以了解下冯诺依曼计算机模型),这就决定了计算机要有电最小的处理逻辑是二进制的运算,所以计算机能接受的程序都是二进制的代码。
二进制代码对于人类来说太麻烦了,复杂点的逻辑基本上很难编出来。好在我们活在二十一世纪,经过了无数先辈的努力,他们通过改进封装CPU指令集,封装汇编语言,设计便于人类理解编程语言等等,使得计算机编程已经容易很多。编程语言经过编译器生成计算机可以理解的二进制文件。所以现在大部分的程序员只需要专注处理人类所要理解的逻辑,这样大大提高了软件开发的效率。
编程语言+编译器已经可以完成人类的逻辑到机器逻辑的转换了。语言有了,怎样用语言表达也是非常重要的,例如写文章,有的人写的好,有的人写的让别人看不懂,虽然都表达的差不多的内容。编程思想就是程序员用编程语言描述逻辑的思路,目前比较流行的是:面向过程的编程、面对对象的编程、面向资源的编程。
2、面向过程的编程
面向过程编程出现的比较早,因为早期编程逻辑比较固定,让机器按照设定好的流程一步步执行,如打印机打印。
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
举个例子,用面向过程的方式描述一个程序员的一天:
早上7:30起床,穿衣,刷牙洗脸,吃早餐,去车站坐车,上班,解bug,吃午饭、、、
固定模式,时间久了等根本就不需要怎么等车,效率比较高。但是休息日就不能用这个流程了,或者哪一天哪趟公交车停运了,新车时间变长了,都要从头开始改计划。
3、面向对象的编程
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
举个例子,用面向对象的编程描述一个程序员的一天:
首先是分解各个对象,抽象一些类:人,家,公司,交通,餐厅。人有也属性和技能,如性别,年龄,走路,解bug;家也有些属性,有门窗,可以休息;交通,有出租,公交地铁,路线不同;公司有不同的项目;餐厅提供各种食物。由于弹性工作制度,上下班时间不固定,时间差不多的时候就到对应的地方去就可以了。
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低。
4、面向资源的编程
面向资源是把要展示的东西按照已经设定好程序组合起来。如unity,PPT,PS等。只需要将一些素材导入,拖动鼠标编辑保存后就可以完成创作。
优点:开发速度快,需要高度专业化的基础程序,专注于效果,不需要理解实现过程。
缺点:在基础软件设计的时候已经决定了创作的范围。
5、总结
作为一个应用层开发的程序员应该专注于面向对象的编程。