首页 > 代码库 > 漫谈:初遇面向对象
漫谈:初遇面向对象
首先介绍一下,我是信息工程学院出来的,专业主攻硬件方向,什么模电数电、信号系统和单片机原理这样的,接触到编程门槛的是C语言的学习。上.NET的第一堂课就有说到,面向过程和面向对象语言的区别和优劣势,当时只是当做科普听听就是。然后经过一个星期的和C一模一样的语法基础,到了面向对象的相遇。
老实说,以前也有看过C#的,但是每次都是到了面向对象我就嗝屁了,实在不明白类、对象什么的到底在指示什么,为什么会有这样的封装,C语言像植入我脑中一样,方法的封装的效果不是一样么。C#的调用对象下的字段和方法什么,不就是C语言中的局部变量和全局变量的运用和函数的调用么,就算C#中的不同命名空间,那不也是在C中的不同文件下代码而已。事实呢,真的这样吗?不得不说,面向过程之C语言是很适合入门编程的,没有其它修饰,变量的使用、函数的调用就像是我们需要用的时候,预先写好,使用时需要什么值或者什么参数就直接赋值和传递值,没有独立对象的封装,变量和函数并是属于什么对象的,它们就在本程序中,你要用,就用呗,够直接、坦白的。当然,在高级语言中,面向对象思想会立马提上议程,为什么?只因我接触的世界尚不够清晰,只能讲到:项目的体系过大,若用面向过程去做,天,虽然变量和函数可以分文件区分子项目等,但是,在我们分文件编程和使用的时候恰恰不就是封装成一个个独立的、拥有自己的属性(变量)和行为(函数)的、在主程序使用的时候在适当时机进行调用而使用相关部分功能的文件,而这一种行为不就是原始的封装一类事物的思想么。不过,面向对象的演变我也只能谈到这里,不甚了解啊,至少在项目的体系越发庞大的情况下封装的使用时必须的。
回归一下,初遇面向对象时老师举了例子——我去电脑城买电脑。咋一看有点扯,我去电脑城买电脑就买电脑呗,不过这样想就直接暴露面向过程的根深蒂固,事件的进行一步一步按部就班确实不错,但是在加上“我要去电脑城买电脑,但是我不懂电脑,找来了一个行家让他帮我买电脑回来”,这里,事件的进行就分成了两个阶段,我——行家,但是事件的最终完成效果没有差别,而此时,行家,就是封装了的会买电脑的对象。暂停一下,这里如果是我直接去买电脑,产生的过程就是:我、去电脑城、挑品牌、挑电脑、砍价、交易、买了电脑,这样事件才会执行完毕,这就是面向过程,主程序的就需要实现这么一些行为。行家,就是这些事件的封装,而且要求封装得属性和行为必须实现某单一功能而不能加入其它什么多余的东西,所以这样当我要执行买电脑事件的时候,我就不用逐一步骤过程化,而是只关心行家的执行,即现在面向行家,这个行家就是一个对象,按照要求封装的一类事物(这叫行家这哥们不好意思了),这时我们就打开了面向对象的窗。
说那么多依然是想其当然,对象什么的就是那么一回事——一个个严格封装了的变量,可是到了C#,就不能归结为函数和变量了,对象的存在就需要我们用一种混淆变量和函数的东西来形容。这时,类的出现水到渠成,而且这个字的意义不就是分门别类的类么,我们为什么要封装、为什么要封装的内容只能这样而不能那样。类,就是要求你在引用的时候要你知道我为了什么引用我,引用类的时候去做什么,这两个什么就规定了这个类的内容。当然,现在的我处在把类当做一种数据类型,里面封装特殊用途的字段和方法,的这一阶段,类在什么时候需要封装,什么样的字段和什么样的方法是不属于这里而又有什么样的字段和方法是属于这里。“当你经历了水深火热的代码折磨后你就知道了”,这是老师所说,确实我也处在这种水深火热中,哈!
说完了第一次和面向对象碰面后当然就是和她交往的过程了。对象(不是那对象-.-),在经过一大段的念经书一般的啰里啰嗦得到的就是这一句:Console.WriteLine(); ,天,这是要砍人的节奏么,那不就是类似C语言中printf语句么……当然不是。这里不得不说在C#的学习过程中我神往的一句话——万物皆对象。其实大家在刚开始接触C#的时候,如果是从C此等面向过程语言有过基础,就会发现,我们在用语句的时候Console.开头的很多,在为变量调用什么方法的时候往往也是后面加.的,(我就认为.Net已经学一半了,学会.了。额,有点冷的赶脚),在有了这些发现,然后在遇到了面向对象的概念后,这些全部都是面向对象。跟随而来的就是,为什么在C#语言了什么都是对象,无论普通int 什么变量名,用什么方法如Math.Ceiling,连个转换Convert.或者Parse()都是,就算是你打印一行话,在你直接使用变量名打印的时候也是在使用变量这个对象里的方法ToString()方法。尤其在认识到C#里的所有类都继承于object这个类的时候,瞬间有点觉得C#有高大上的赶脚,彻彻底底的面向对象编程,无论你在使用C#做什么操作,声明什么,封装什么,你都在使用OOP,处处留心,虽然这些封装了的“中介”可能一时半会接受不完,微软编辑了这么牛和这么多的类,我们以后进行编程的时候也在处处封装各种各样的类进行OOP,什么时候进行封装类、怎么样进行封装、封装什么属性和行为,类之间的关系和在实现功能时严谨遵循单一功能原则进行归属类的行为。尽然接口有污染一词形容,那么我觉得污染也可以用在类中,避免类的属性和行为——主要是行为,因为属性最终要为行为服务的——的污染,即避免功能混淆,谨记单一功能,记得我们为了什么而封装这个类。
一位C#菜鸟在接触面向对象后不得不说的一些话。
2014-06-01 20:46:34