C#面向对象趣谈

某天,作为菜鸟的我坐在一间陌生的小会议室,面试正在进行中。面前的经理大哥很拽的拿着我的简历,不屑的盯着紧张的我。“来,说一下什么是面向对象?”。又是这问题,我都被问过很多次了,也经常查资料,我用中指推了推眼镜,很自信的把前几天从度娘哪里搜到的答案给背了出来:
面向对象是一种思考问题的方式,是相对于面向过程的一种不同的思想。面向过程注重的解决问题的过程,而面向对象则是注重解决问题的结果。

面试大哥盯着我说,“这说的也太官方了,能不能说的通俗点,全面些”。我去,要求还挺高。幸亏我早有准备。我继续答道:

通俗的说,面向过程时,我们做一件事会亲力亲为,按部就班的处理。而面向对象的时候,我们可能就比较懒,去找一个会做这事的人,让这个人去做。
所以面向对象是基于面向过程的,它并没有省去过程,只不过这个过程外包出去了,我们只拿结果即可。

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。

举个生活中的例子,我想吃可乐鸡翅了,用面向过程的思想来处理的话,我要做:1.先买到鸡翅、可乐和调料,2.百度:可乐鸡翅怎么做,3.打开电磁炉开始煎、煮、收汁大概20分钟,4.开吃。如果用面向对象的思想来处理,我要做:1.找到一个饭店。2.大声喊:老板我要吃可乐鸡翅。等几分钟老板端出一盘可乐鸡翅到你面前。
用程序伪代码来理解的话,面向过程:

        static void Main(string[] args)
        {
     
           // 1.买食材

            // 2.查做法

            // 3.煎..煮..收汁等一系列操作

            // 4.做好

        }

面向对象

    class Program
    {
     
        static void Main(string[] args)
        {
     
            // 进饭店找到老板
            老板 张老板 = new 老板();

            // 喊一嗓子,老板我要吃鸡翅
            string str老板交付的鸡翅 = 张老板.做鸡翅();

            // 吃饱开溜
        }
    }

    class 老板
    {
     
        public string 外号 {
      get; set; } = "啥都会";

        public string 做鸡翅()
        {
     
            // 做鸡翅的技能, 材料,所用时间等一切相关信息
            return "做好的鸡翅";
        }

        public void 做鸭翅()
        {
     
            // 老板除了做鸡翅还会做鸭翅,做鹅翅,做鸵鸟翅...
        }
    }

区别:
面向过程强调的是功能和行为,完成任务由多个函数构成.
面向对象是讲对象进行封装打包,完成任务由对象构成,强调具备了功能的对象。

优缺点:
面向过程:
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 .
缺点:性能比面向过程差

面向对象的三大特性:
1、封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
2、继承
提高代码复用性;继承是多态的前提。
3、多态
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

面试大哥:“说的还挺全面,那你最后总结一下面向对象吧,说完你就可以醒来起床上班了”。

公司现在给我这么一个面试的机会,说明我具备开发代码开发项目的能力,实际上就是找我们这个对象来帮公司完成任务,公司不用关心我们怎么完成,这样就可以把精力放到其他更重要的的事上,实际上就是面向对象。面向对象就是将具有一些特定功能的东西封装到一起,完成一件事,只要找相关的对象,调用它所具有完成这件事的方法,但是并没有省去此对象调用方法所做的工作。所以,面向对象是基于面向过程的,其思想可以描述为以前是亲历其为,现在是指导别人去做。

你可能感兴趣的:(C#)