大话面向对象思想

面向对象的理解

  • 1.面向过程(POP)
  • 2.面向对象(OOP)
  • 3.面向对象三大特征
    • 3.1封装(Encapsulation)
    • 3.1继承(Inheritance)
    • 3.1多态(Polymorphism)
  • 4.举例再理解POP和OOP

 先问你个问题:你想做个怎样的人?
 可能你会回答:我想做个好人,孝敬父母,尊重长辈,关爱亲朋……
 这是你做人的思想,或者说,是你做人的原则。做人有做人的原则,编程也有编程的原则。这些编程的原则呢,就是编程思想。现在主流的有面向过程和面向对象两种。
 有了面向对象的编程思想,程序员从面向过程的执行者转化成了面向对象的指挥者。

1.面向过程(POP)

 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一个一个串起来,然后一步一步实现,使用的时候一个一个依次调用就可以了。其强调的是功能行为,以函数为最小单位,考虑怎么做,如C语言。

2.面向对象(OOP)

 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。也就是当需要实现一个功能的时候,我们不需要自己去做,可以直接找一个已经具有该功能的东西,来帮我解决问题。其将功能封装进对象,强调具备了功能的对象,以类或者对象为最小单位,考虑谁来做。如Java语言。

3.面向对象三大特征

3.1封装(Encapsulation)

 在理解什么是封装的概念之前,我想先问大家一个问题:在生活中,我要用洗衣机,有必要了解洗衣机内部的结构吗?有必要知道电动机是怎么运行的吗?显然我们不用了解这些,我们只需要按一下开关和洗涤模式就可以了。
在Java语言层面来就是通过将数据声明为私有的(private),同时为每个属性创建取值getter和赋值setter方法,进而隐藏了对象内部的复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的设计思想。

3.1继承(Inheritance)

 假如我们需要描述学生、老师和管理员这三个类,他们是不是都有如姓名、密码、身份证号这些属性和如吃饭、思考这些方法,然后他们三者有区分于其他二者的其他属性和方法,如果我们每一个类都声明这些公共的属性和方法,那么重复的代码就会多好多,那么我们有没有一种方法使得代码减少、代码看起来更整齐呢?
 答案是肯定的,我们可以将这些相同的内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。我们使用extends来实现继承,语法是class Subclass extends SuperClass{ },也就是子类继承与父类。这样就减少了代码冗余,提高了代码的复用性、更有利于功能的扩展、让类与类之间产生了关系,提供了多态的前提。但也有需要注意的一点:不能破坏封装性,也就是说子类不能直接访问父类中私有的(private)的成员变量和方法。

3.1多态(Polymorphism)

 多态性是面向对象中最重要的概念,在Java中的体现:对象的多态性:父类的引用指向子类的对象。在理解这句话之前,我们先来了解Java引用变量的两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简称:编译时,看左边;运行时,看右边。如Person p = new Student(),编译时是Person类,运行时是Student类,此时编译时类型和运行时类型不一致,就出现了对象的多态性。要注意的是实现多态性是有前提条件的,即需要存在继承或者实现关系和有方法的重写。

4.举例再理解POP和OOP

 这里举个经典的例子来说明POP和OOP的不同。
 假如我们需要把大象放进冰箱里,我们来感受一下二者的做法:

  1. 面向过程:(1)打开冰箱门(2)把大象装进冰箱里(3)关上冰箱门
    大话面向对象思想_第1张图片

  2. 面向对象:(1)需要的三个类:-人类 - 大象类 - 冰箱类 (2)每个类的内部方法:人类—打开(冰箱)、操作(大象)、关闭(冰箱);大象类—进入(冰箱);冰箱—开门()、关门()。
    大话面向对象思想_第2张图片
    以上就是我对面向对象的理解,由于自己能力有限,可能理解还太过于片面,如有错误,欢迎各位读者指正,谢谢!。

你可能感兴趣的:(大话面向对象思想)