我第一次接触编程是在大一前的暑假,并且接触的第一门编程语言是C语言,大一开始的专业课也是C语言,大一下学期学了C++,由于我大一的一整年都在用C++进行编程(主要用C++做竞赛训练),所以开始我的编程思维完全是面向过程的思维,大概就是:
1.碰到问题直截了当的考虑解决方案,第一步...第二步...每一步都有解决的方案
2.由于没有接触过实际应用项目,大部分时间都在做竞赛题,所以没有模块化的思想
3.尽管C++有面向对象的内容,但是由于学校教的内容比较浅,并且为了应付期末考试,也没有真正的学深学透
自此时候,“面向对象”这个词虽然C++课上老师经常讲,但是我的理解仅限于写个C++结构体或者类,类的封装、继承、多态这些东西也仅仅是知道它的表面意思。
第一次真正感受到面向对象:
知道前几天Java课老师布置的一道题目才真正让我感受到了:我其实一直在用面向过程的思维去学习Java,那道题大概就是:观众给演员投票,并且给演员排序。
当时我第一想法就是写了一个类,类中有name和score两个私有变量,并且构造函数、get、set方法都很完整,并且我用了一个ArrayList容器去储存这个类。但是,当我在程序中观众投票时,我脑子直接给我的想法是这样的:
使用ArrayList中的set方法去修改对应演员的得票数,突然发现修改不了!因为如果ArrayList中是基本数据类型的话,可以用此方法修改,但是如果里面是个类的话,用set方法修改不了,因为第二个参数不知道该填啥!(因为变量是私有的),此时我就懵了,查了很多文档也没找到解决方法。结果赵老师跟我说要在类中写一个“令得分+1接口函数”,就可以解决了。
结果此时我就突然有种“顿悟”的感觉......!!!!!!是啊,变量都是私有的,怎么可能在主函数中直接用set方法修改呢?那跟直接修改私有变量有什么区别?面向对象应该保存封装性,对于成员变量的任何 *** 作都应该通过“接口”函数进行,而且我还写好了setScore方法,就在那里我也没有想到.......
在实际开发中,以一个大型项目为例,通常需要多个开发人员协作共同完成,因此,可能需要程序员 A 开发功能 A,程序员 B 开发功能 B,功能 B 中需要功能 A 的支持,此时,理想状态是程序员 A 完成了功能 A,程序员 B 在使用功能 A 的时候,不需要关心功能 A 是怎么实现的,而只需要知道怎么使用功能 A。
所以,面向对象的基本就是:(这段是借鉴的别人的.....)
1.万物皆为对象:
面对具体某个问题时,首先考虑该问题涉及哪些事物或元素,并将其视为一种奇特的变量:不仅具有存储数据的功能,还具有一些特定行为。
2.每个对象都有由其他对象构成的存储:
简单的说,就是对象 a 中存在对象 b,这样的对象嵌套现象。因此,可以在程序中构建复杂的体系结构。
3.程序是对象的集合:
它们通过发送消息来告知彼此应该做什么 一个程序可以理解为一个问题的具体解决方案,方案中涉及到多个对象以及它们需要做的事情,因此发送消息即为在程序中调用某个对象的某个行为,以此来告知该对象要做什么。
4.每个对象都有其类型 :
考虑多个对象,并且这些对象除了存储的数据不同外,都相同的情况,可以将这些对象归为一类对象,即某个类(class),区别于其他类的特征是:可以发送什么消息给他
5.某一特定类型的所有对象都可以接收同样的消息 :
同一个类的对象,都具有该类的所有行为特征(方法),因此该类的所有对象,都具有该类所声明的所有行为(方法)。
个人感悟:由于我对于C++一个是使用较多,另一个是学习也比较深(不敢说精通,怕被打死),所以在开始学习时Java非常轻松,很多东西稍微一迁移,然后了解其区别就完事了。但是知道上面那一次,我才真正感受到了Java的思想是真的和C++有很多区别的,建议不要用C++的东西去套Java的东西,初学还是抛开别的的好,之后再考虑其相同点。来自一个蒟蒻的一点点感受,欢迎各位大佬指正~~~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)