• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

(教学思路c#之面向对象二)初步理解面向对象的基本概念

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

         通过上节课有关计算机语言发展历史的概括了解,我们已经知道面向对象是目前计算机语言发展的历史方向,相对于机器语言和汇编语言,现在大部分程序都是用面向对象或面向过程这两种语言进行编写,那么究竟什么是面向对象和面向过程呢?他们的区别又再哪呢?我们先来看看面向过程语言。

  面向过程:    


 

      面向过程的语言用生活实例来说就把每种类型的人每做的一件事看成是罗干的过程所组成,比如下面的例子就是描述了一个学生的一天的生活,面向过程的语言,把学生一天的生活中用''{……}''括起来的就是要做的每件事,他们都被看成是学生一天生活的一个组成部分。

       在面向过程的程序的世界里,我们把要做的事情叫做函数,函数是由事情加“()”组成,同时每件事情的结束用“”注明。比如 “学生一天的生活()” 、“ 洗漱 ( );  ”等等。

学生一天的生活( )         {事情—函数}  
{
 起床( );  洗漱 ( );  吃早餐( );
  上学( );  放学( );  做作业 ( );
  吃晚饭( );  睡觉( );
}

 

            星期?;             全局变量{描述---变量和数据}  
 起床( 谁?                  形式参数
{
          时间;                    局部变量
  睁开眼( ); 爬起来( ); 穿衣服( );
  叠被子( ); 收拾床铺( );
}

         于此同时,学生一天的生活中的“起床();”这个函数,也可以看成是一个单独的过程,它也有自己的组成部分,如上实例:起床这个函数(过程)也有几个函数,比如“穿衣服( );” ,那么,过程当中还可以有哪些组成部分呢?我们先来看一下函数的变量。

       变量:变量可以看成是对函数的描述,也可以储存函数发生的数据。一般我都喜欢说变量是形容词,形容函数的。上面的例子中我们有3种变量,他们分别是全局变量、形式参数、局部变量,他们都在什么意义呢?我们先来看一下全局变量。

       全局变量:全局变量一般在函数的外部定义,对于整个函数(过程)已经这个函数内部的函数这种变量的描述是共同具有的性质。比如“星期?”就是一个全局变量,假设我们现在定义星期一,那么学生一天的生活就是在星期一下的一天,同时起床这件事也是星期一发生的,所有不包含星期一这个变量的函数都应该是星期一发生的,如穿衣服( ); 睡觉( ); 

       局部变量:局部变量是定义在一个函数的内部的,这个变量对不包含它的其他函数是无效的.比如“时间;”我们在起床这个事情(函数)中定义了8点,那么8点这个时间,对“学生一天的生活”这个函数是无效的,对于起床内部的函数来说,如“睁开眼();”我们可以8点睁开眼,如“爬起来();”它也可以再重新给局部变量“时间”一个值,比如8点10分起床。

       形式参数:形式参数是比较难理解的,也是以后要活学活用的一个知识点。参数都是放在函数a的“()”内的,用来对整个函数a的内的函数一个共有的,不可以变的描述,比如我们在“起床()”这个方法中,放置了一个参数就是“谁?”现在我们这样定义“起床(小明)”,那么起床的过程中所做的就全是小明做的了,而学生一天的生活()的这个过程,就不是小明做的,因为小明不是全局变量。同时参数也可以有很多个,比如起床(谁?地点?)参数间用“,”号隔开。

      这样讲解不知道大家懂了没有,下面我就这道题提出一个问题,请大家自己举一个现实生活中存在过程的实例,并且举出三种不同的变量。……其实大家只要把每做的一件事情都看成一个过程,哪怕简单的事情也可以分成步骤,把步骤再理解成另一件事情也就是函数就可以了。但是我们现在来考虑一下这个例子,现在如果我要定义是小红的一天生活,我们在一天的生活的外部定义一个全局变量小红就可以了,或是把小红当初是一天生活的参数。

     如果我们现在要描述工人一天的生活时,对比学生一天的生活步骤,我们会发现有很多是重复的,但是工人不做作业,而是工作;如果描述老师的一天有是有很多重复的,老师与学生不同的就是老师是批作业,用面向过程来描述这三种人的一天,必须写3个这样的函数,这3个函数在很多方面都是重复的,并且如果现在在这个人的生活中各增加一个函数,比如运动,那么我们修改起来也是需要大面积的改动,这无疑增加了程序员编程的繁琐,也降低的代码的性能,这时面向对象的编程思想出现了。
 
面向对象


 


    首先在面向对象中提出了一对类和对象的概念,类就是具有相同的属性和功能的对象的抽象的集合,对象是一个自包含的实体,用一组可识别的特性和行为来标识。一切事物皆为对象,对象有时也被称为类的实例。用我们上面的例子解释一下类和对象吧,无论是学生、工人还是老师,他们都有一个区别于其他事物的共同点就是他们都是人,那么人就是一个类,而学生、工人、老师就是人这个类中3种对象,这3种对象有共同点,同时又有自己的特性,比如学生必须学习,工人必须工作,老师必须授课。针对这三种对象而言,他们也可以是三种类,学生类、工人类、老师类,小学生是学生类中的一个对象,维修工是工人类中的一个对象,教授是老师类种的一个对象,再接着看,一年级的小明也可以说是小学生类中的一个对象,造船厂小丁也是维修工类的一个对象……,对象区别与其他对象,类区别与其他类都是因为除了也许包含共同点外,最重要的就是有自己的特性和行为。

   类成员包含:属性、字段、方法、索引器、事件等,这些知识点日后会分章节细细讲解,我们今天先看前3种类成员,在C#中所有的函数也被叫做方法,变量也被叫字段,同时增加了一个保护字段的属性概念,属性可以对字段提供一个其他对象取值或赋值的途径,比如对象中的局部变量是穿衣服的时间,在面向过程中,别的函数是无法用的,但是在面向对象中提供了属性对局部变量进行处理(封装)后,别的类或对象想用到穿衣服的时间时,就可以通过属性对这个时间进行使用。我们现在需要记住的是,字段是保存数据的,属性是保护字段的,方法是描述类功能的就可以了,日后大量的例子一定会加深你们对这几句话的理解。


    接着我们来了解一下面向对象的三大特性:继承、封装、多态,他们都是什么意思呢?


    我们先来看一下封装,每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作,这样方法和属性包装在类中,通过类的实例(对象)来实现。封装有很多的好处,第一、良好的封装能够减少耦合(冲突);第二、类内部的实现可以自由的修改,第三,类具有清晰的对外接口。封装的好处很好理解,比如我们的房子就是一个类的实例(对象),室内的装饰与摆设只能被室内的居住者欣赏与使用,如果没有四面墙的遮挡,室内的所有活动在外人面前一览无遗。由于有了封装,房屋内的所有摆设都可以随意的改变而不用影响他人。然而,如果没有门窗,一个包裹得严严实实的黑箱子,即使它的空间再宽阔,也没有实用价值。房屋的门窗,就是封装对象暴露在外的属性和方法,专门供人进出,以及流通空气、带来阳光。

     利用面向对象中类和对象的定义,我们可以把一天的生活中属于人这个类的共有的内容都写在人这个类里,当对象的学生的一天的生活时,学生对象继承人这个类中一天生活的内容,同时加上学生自己的特性,学生的一天生活就定义好了,同样的工人的一天生活也可以继承人这个类,再加上工人必须工作这个特性,工人一天的生活也定义好了,同理教师一天的生活也可以用到继承。回到继承的概念上来说,对象的继承代表是一种“is-a”,如果两个对象A和B,可以描述为‘B是A’,则表明B可以继承A,学生、老师、工人都是人类,所以都可以用到继承,实际上,继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。继承定义了类如何相互关联,共享特性。继承的工作方式是,定义父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。上面的例子中,人这个类就是父类也叫基类,其他三种都是人这个父类的子类或叫派生类。学习继承最好是记住三句话,如果子类继承于父类,第一,子类拥有父类非private(私有权限)的属性和功能,关于权限我们接下来会讲到;接着看,第二,子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三、子类还可以以自己的方式实现父类的功能,这种方式叫做方法重写,我们以后也会讲到。现在我们考虑一下利用继承修改,如果不利用继承修改,就必须在所有重复的方法中修改,代码越多,出错的可能就越大,而继承的优点是,继承使得所有子类公共的部分都放在父类中,使得代码得到了共享,这就避免了重复,修改时只需要修改父类,其他的子类就一并自动修改了,另外,继承可使得修改或扩展继承而来的实现的较为容易。但是继承也是有缺点的,那就是父类变,子类就不得不变,在我们使用继承时一定要考虑到这一点,只有当两个类之间具备“is-a”的关系时,才考虑用继承。


    刚才我们提到了权限这个词,其实正确的描述应该叫访问修饰符,他们可以规定了其他类对此类中的成员的访问(使用)权限。访问修饰符一共有4种public(公有的)、private(私有)、protected(受保护的访问权限)、internal(当前程序集可以访问)。public表示它所修饰的类成员可以允许其他任何类来访问,俗称公有的,公共访问是允许的最高访问级别;而private表示只允许同一个类中的成员访问,其他类包括他的子类都无法访问,俗称私有的。如果在类中的成员没有加修饰符,则被认为是private的;protected表示继承时子类可以对基类有完全访问权,也就是说,用protected修饰的类成员,对子类公开,但不对其他类公开;internal关键字是类型和类型成员的访问修饰符,只有在同一程序集的文件中,内部类型或成员才是可访问的。我们来举个生活中的例子帮助同学们理解前三个常用的修饰符。父亲一生中用自己的辛苦钱买下了房子,爸爸的房子就是public形,因为爸爸的朋友,亲朋好友都可以来家里玩住;爸爸给家里赚的钱就是protected受保护的,外人没有权利花,但是儿子可以继承下来,变成儿子的钱;但是如果爸爸自己攒的私房钱比如留着打麻将的应酬钱,儿子是继承不了的,因为爸爸的私有财产private私有的。大家理解了吗?访问权限是经常用到的,日后当我们用到调用类成员时,如发现找不到这些成员,你首先就要考虑的是成员的修饰符是否得当。


    下面我们接着来看第三个特性:多态。多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行,学习多态时要注意3点:第一,子类以父类的身份出现,第二,子类在工作时以自己的方式来实现,第三子类以父类身份出现时,子类特有的属性和方法不可以使用,这听起来很难理解,而且多态的使用有多种方式,现在我们不能说的太深,必须结合实例让大家理解,你们现在就把多态想象成比如,人一天的生活中的穿衣服方法,学生穿衣服可能要穿校服,而工人穿的衣服可能是工装,虽然同时穿衣服的方法,但是对象又各有不同。


    这一节的课我们对比了面向对象和面向过程这两种语言,可以看出面向对象确实比面向过程有很多的进化和改善,这都是通过多年的编程经验得来的,其实无论语言多么的进化,重要的是要懂得利用这些特性,才能把这些代码写得更加具有可读性、易修改,今天新接触的概念非常多,同学们不用担心先理解理论概念,才能运用的更自如,这一节我们开始接触实际代码,理解这些概念。


         


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#操作mongodb发布时间:2022-07-18
下一篇:
c#Queue实现生产者(Producer)消费者(Consumer)模式发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap