• 面向对象思想的简单描述


    1、什么事面向对象

      在很多参考书上都可以看到说“面向对象是要模拟人类的认知过程”,这话说得比较泛,也抽象。
     
      在平时的教学过程中也有不少学生询问到底什么是面向对象,感觉在学校学了很多,但只记得一些概念,到底什么是面向对象还是很混乱。
     
      还有一部分同学认为面向对象就是类,就是字段或方法的封装,其实不然,面向对象实际上是一种编程的思想,类只是用来方便实现的工具。
     
      我常常说传智基础班的内容并不难,主要是弄清两个重点
     
      第一、程序如何写出来
        也就是怎么分析问题,拿到一个问题,用程序写出来,肯定遵循一定步骤,先做什么、再做什么、最后做什么
        虽然不一定能绝对分析入骨、点点到位,但是需要慢慢的培养思考的习惯,因为一个问题的解决绝对不止一种方法
      第二、理解面向对象的概念
        C#作为一门面向对象的语言,微软将面向对象的概念在C#里面体现得非常好
        同时作为.Net开发者,面向对象开发的准确理解是非常有必要的
      
      我以前看过很多书(现在依旧有看书的习惯),很多C++的书曾描述面向对象的时候,常常提到开发大型程序才能体会面向对象的好处,那么这个好处是什么呢,相信等你读完下面的内容就自然明白了
     
      好了,那到底什么是面向对象呢?
      面向对象就是“将程序的执行者变为执行的命令者”
     
      先来看一个例子
        倒退100年,人们吃饭怎么完成的呢?
          首先要购买材料,人后在家生火,然后加工煮熟(简单的概括)
        再看看今天的上班族,怎么吃饭呢?
          首先拿起电话,告知对方你要吃什么,然后等着付钱即可
     
      我们会发现前一个例子,我们“事必躬亲”,必须考虑每一个细节,以及每个环节之间的关系。但是后一种方式根本不用考虑任何细节,只要通知一下对方即可

      用伪代码描述一下
      第一种方式
        static void Main(string[] args)
        {
          选购材料的方法();
          生火的方法();
          加工处理的方法();
          可以吃了;
        }
      第二种方式
        static void Main(string[] args)
        {
          找到餐厅;
          告知需求的方法();
          可以吃了;
        }
      简单的比较一下,实际上面向对象就好像将任务发派到其他地方,所要的只是法号命令,等待结果就行了。其细节和过程都有相应的方法去完成,不用我们考虑
     
     
      在来看第二个例子
        比如现在有位同学想买相机,但是现在市场上相机琳琅满目,不知道如何挑选,大家会怎么办?
        OK!不少同学会说上网查!那么大家知道什么是光圈、什么是高感光度,什么是降噪效果吗?实际上相机是一个比较专业的东西
        另外,又如何保证相机的质量呢?如何了解购买到的产品是正品呢?
        最后,有没有可以砍价的余地?会不会老板看大伙是新手,故意抬高价呢?

        这一切的一切似乎并不好处理,那怎么办?
          很简单,找个专业的人帮你挑不就行了!
          他会按照你的需求帮你挑选相机的类型与诸多参数,根据性价考虑可接受的报价,同时会检查相应参数与质量,另外还会跟老板适当的砍一砍价格,这一切的一切都不需要你来操心,那么你只需要做什么你?很简单,只要付款就行了!

      从上面两个例子来看,面向对象这种编程的思想实际上就是要好好考虑要做的事情,然后找到一个对象命令其去完成
     
      那么我们只需要做两件事:
        找到对象
        发出命令
     
      那么现在都是找到现成的对象,就是按照要求找存在的对象去完成,那么要是不存在这样的对象怎么办呢?
        很明显,就自己写个“对象”出来
      好比一家软件公司,以前都是做WebForm开发,但是突然间讨论决定,要求向MVC方向发展,但是现在公司里没有人会怎么办?
        第一、招聘人员,让专人去完成
          这就好比根据需要找到相应的对象,直接找现成的对象
        第二、挑选公司中优秀的人才出去学习,就是公司委培
          这好比找不到合适的对象,就自己写一个
     
      那么我们写程序使用对象是不需要考虑对象内部的实现,我们只要结果,但是如果由我们自己来写一个“对象”,其内部实现仍然需要考虑。而且实现的详细过程,仍然可以是面向对象的,也可以是面向过程的
     
      对于简单的类,实现可以归结到面向过程中来,然后不断的套用,可以发现面向对象的编程思想只是一个处理问题的方式方法,其基础最后仍然是面向过程的!
     
      总结一下,对象就是能够帮你完成一些任务的具体的东西
        比如之前说到的“餐馆”、“摄影师”、“职工”等
      不难发现它们都是具体的个体,实实在在的个体,是一个可以感觉、使用或接触的事物
      但是餐馆有很多,摄影师也不是只有一位,职工那就更不用说了。不难发现以上说的都是一个群体中的一个具体的个体
     
      那么我们程序的组织也是如此,我们可以有一个群体,叫做“类(class)”,群体是一个概念,泛指的内容
      我们在程序中真正使用的就是该群体中的一个特有的个体,叫做“对象”,对象表示我们使用的具体事物
     
      比如手机,HTC莫扎特也是手机,苹果iPhone4也是手机,而100元的诺基亚也是手机,它们都叫手机,但是都又不同
      同样的,每一台iPhone4是不是都一样呢?或每一台HTC莫扎特都一样呢?
      其实每一款机器型号虽然相同,但是一定会有一个唯一的编号
     
      其实我们说的手机就是泛指,对于手机这个概念,品牌就是具体的,而对于品牌和型号,每一个实实在在的手机,大家拿在手上、揣在兜里的手机就是个体。我们就可以将这些泛指看做类,具体的手机看做对象。因为只有具体的手机才能完成打电话、或玩游戏的功能
     
      那么在程序中就有了“类”这样的类型,对象作为该类的变量来使用
     
    2、如何使用面向对象
      说了这么多到底怎么去使用呢?
     
      1、是直接使用.Net Framework提供的对象
        其实之前已经使用的非常多了
        对于输出:
          Console.WriteLine();
          Console.Write();
        对于输入
          Console.ReadLine();
          Console.ReadKey()
        这些都是Console类提供的方法(静态方法)
        再比如产生随机数的方法,也是使用已经有的类
     
      2、是自定义类,使用自己的对象
        之前说过类只是为了实现面向对象的工具,同时类又是一种类型,因此要使用,先要定义类
        定义类的语法是(仅考虑类本身):
          [访问修饰符] class 类名
          {
             // 类的成员
          }
        这里成员是什么,后面会说到
        定义类之后,需要使用,就好像一开始我们吃饭找餐馆一样,先要找到饭店,然后提出要求
        在Main方法中,首先要创建一个该类型的对象出来,由于类也是类型,因此满足定义变量的语法
          类名 变量名;
        这样还没完,这里只是定义了一个“餐厅”,好比你知道有一个餐厅,但是不知道在哪儿一样
        因此需要创建一个出来,创建的语法使用
          new 类名();
        这里创建一个对象又称为“类的实例化”,其创建的对象往往又称为“该类的实例”
        不严格地说,对象就等同于实例(实际上这里也有泛指,因此严格意义上并不等同)
      
        因此完整的应该写为:
          类名 变量名 = new 类名();
        或   类名 变量名;
            变量名 = new 类名();

    OK这里就是有关面向对象编程思想的一个简单描述,具体的类怎么写、有什么用,如何使用实例去完成任务,我们下回分解... ... 

  • 相关阅读:
    mysql基础学习
    Linux退出状态码
    python psutil简单示例
    linux systemctl 常用用法简介
    (转)linux进程的地址空间,核心栈,用户栈,内核线程
    (转)NAT原理与NAT穿越
    (转)蜜果私塾:http协议学习系列——协议详解篇
    (转)Windows 7下安装配置PHP+Apache+Mysql环境教程
    (转)蜜果私塾:http协议学习和总结系列 ——协议详解篇
    (转)Linux Futex的设计与实现
  • 原文地址:https://www.cnblogs.com/jiangkun86/p/2198734.html
Copyright © 2020-2023  润新知