面向对象,这个张口闭口都离不开它的一个话题。从刚开始学第一门编程语言VB时,对象这个概念就一直和我们相伴。从那以后,直到现在,面向对象的概念从未离开过我们的学习视野,不管是前段时间的软件工程或是UML,还是这段时间的C#,我们一次次与它相遇。
面向对象,这部分的学习,在学软工视频的时候就想拿个专章来把它总结一次,可是,总觉得自己理解得还很肤浅,也写不出个所以然来。今天,在学C#视频,其中也拿了个专章又把面向对象给我们详细讲解了一遍,其中还用实例代码给我们加深理解。
面向对象,初次总结,就从此处起航。
回顾第一学年学习的VB语言,准确的来说,它是基于对象,面向过程的一门语言。刚开始确实不太理解,只是知道对象的范围很广泛,从生活中看,可以是一个人,也可以是一件事。在亲身经历学生信息管理系统和机房收费系统后,看着那一行行自己敲出的代码,对于面向过程的理解有了些许前进。换言之,为了实现两个系统的功能,我们都需要将其转换为一行又一行的代码,按照过程,逐步编写。
第一,不管哪一门编程语言,面向对象的其中的一些概念还是最首要也是最基本的。
其中,类与对象首当其冲。
看了很多资料,也从很多不同的角度思考过,还是觉得从问题出发,自己的理解最为深刻。
第一个问题,“这个世界是由什么组成的?”对于这个问题,不同的人会有不同的回答。一个化学家可能会说,世界是由分子和原子等等不同化学物质组成的;一个画家可能会说,世界是由不同的颜色组成的;一个社会学家可能会说,世界是由一个个人组成的;一个分类学家可能会说,世界是由不同类型的物与事组成的......作为一名程序员,从计算机编程的角度看,分类学家的答案可能更符合自己的口味。所以说,我们应该站在分类学家的角度看问题。这个世界应该是由动物、植物等组成的,动物又分哺乳动物、爬行动物和两栖动物等。哺乳动物又分为人、老虎、大象等。
第二个问题,“什么是人类?”站在抽象的角度来看,人类都具有相同的一些行为或是特征,如每个人都有自己的年龄、性别等属性特征,而人与动物的区别,主要是人具有可以劳动、直立行走等行为特征。“人类”只是一个抽象的概念,是一个不存在的实体。但是所有具备“人类”这个群体的属性与方法的对象都叫人!这个对象“人”是实际存在的实体!每个人都是人这个群体的一个对 象。
第三个问题,老虎为什么不是人?因为它不具备人这个群体的属性与方法,老虎不会直立行走,不会使用工具等等!所以说老虎不是人!
从上面的三个问题看,也就很容易理解类和对象了。总言之,类描述了一组有相同特性(属性)和相同行为(方法)的对象。因此,对象的抽象是类,而类的实例是对象。
方法,是指对象的行为。对于一个电话,它可以有接听、挂断等不同的方法。
方法重载,是指对于不同的数据执行相似的功能。可以用于实现对于不同数据的处理。其中,参数可能不同,返回的类型可能不同,但方法名称必须相同。其实从字面上也很容易理解,即利用同一方法的重复运用,作用的对象不同而已,其中不含继承关系。
还有一个和它很相似的概念,那就是方法重写,它是指子类的方法覆盖父类的方法,要求方法名和参数都相同。从字面上理解,即重写之中包含一种继承关系。
接口,生活中的接口有很多,像各种开关,它可以帮助我们实现对象的功能。在C#中,一个类可以实现多个接口。对于这个概念,自己理解的还不是很清楚,也许在敲实例的过程中会有更深的理解。
构造函数,感觉这个很陌生,在学习VB的时候也没有听说过。在C#中,它也是面向对象学习中的一部分。
构造函数,是一种特殊的方法。简单的说,是用来给类实例化的对象赋予初始值,并且每一个类都有一个构造函数。
析构函数,是用于执行清除操作的特殊方法。不能重载,每个类只有一个析构函数。
第二,对于面向对象的三个基本特征的了解。C#视频中给我们的讲解都很生活化,让我们容易理解了许多。
1.封装。像电视机的遥控器,它就像是封装好的一个黑盒子,可以让我们调频道,具体它的内部是怎么运作的,我们并不知道。结合编程来看,VB中我们经常使用的各种控件,只需要从工具箱中拖拽到窗体就可以使用,它们也是经过封装的。C#中,用于输出的Console.WriteLine也是封装好的。封装的好处很多:减少耦合,可以自由修改类的内部实现,具有清晰的对外接口等。
2.继承。像电视机的发展,从黑白到彩色,到高清晰,到3D,其中图像和声音的功能一直延续。结合编程来看,创建一个派生类(DerivedClass),它将继承基类(BaseClass)的特性。在C#中,一个类最多只允许从一个类中派生。也就是通常所说的单重继承。
3.多态。像洗衣机根据衣服量的多少确定时间与次数。准确来说,多态是同一操作作用于不同对象,有不同的解释,产生不同的执行结果。
第三,学习心得。
对于C#的学习,自然而然地就想到了很长一段时间的VB学习。同样是一门编程语言,一定会有共通之处。不管怎么样,有了VB的基础,还是增强了一些动力的。现在C#视频也快接近尾声了,在这之中,感觉很乱,可能是没有边看视频边敲实例,对于其中的编程实例演示看起来很费劲。所以,还是得抓紧时间动手敲实例才能帮到自己吧。在实践中,一定会收获更多,更加深刻的理解面向对象,更加清楚的看到它与VB的相似与不同之处。