面向对象的理解

面向过程与面向对象区别分析

面向过程:一种以过程为中心的编程思想,是一种自顶而下的编程模式:例如c语言。可以理解为在面向过程的开发范式中,程序员需要把问题分解成为一个个步骤,每个步骤用函数实现,随后依次调用。在进行面向过程编程时,可以先定义一个函数,然后使用例如 if-else、for-each等方式执行代码,最经典的就是冒泡排序。
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素
缺点:没有面向对象易维护、易复用、易扩展

面向对象:主要是为了将软件进行良好的维护,而产生面向对象程序设计。在面向对象的开发范式中,程序员将问题分解为一个一个的步骤,然后对每个步骤进行相应的抽象,然后形成对象,通过不同对象之间的调用,组合解决问题。也就是说,使用面向对象进行编程时,要把属性、行为等封装成对象,然后基于这些对象及对象的能力实现业务逻辑,例如:想要造一辆车,首先定义车的各种属性,然后将属性封装在一起,抽象为一个Car类。
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低

举例:用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。

蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。

盖浇饭的好处就是"菜"“饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。蛋炒饭将"蛋”“饭"搅和在一起,想换"蛋”"饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。

面向对象的三大基本特征

面向对象的开发范式其实就是对现实世界的理解和抽象的方法,用代码把现实世界抽象成为代码就需要运用面向对象的三大基本特征,分别是封装,继承,多态。
1.封装
所谓封装就是把客观事务封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对 不可信的类或者对象隐藏信息。
简单的来说,一个类就是一个封装了数据及操作这些数据的代码逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分以外的改变或错误的使用对象的私有部分。
举例:

class Rectangle{
    /*
    设置矩形长度和宽度
     */
    public Rectangle(int length,int width){
        this.length=length;
        this.width=width;

    }
    /*
    长度
     */
    private int length;
    /*
    宽度
     */
    private int width;
    /*
    获得矩形面积
     */
    public int area(){
        return  this.length*this.width;
    }
}

通过封装的方式,给“矩形”定义了“长度”和“宽度”,这就完成了现实世界中“矩形”的抽象第一步。

你可能感兴趣的:(新手小白,java)