2

关于面向对象

 2 years ago
source link: https://segmentfault.com/a/1190000040639632
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

面向过程与面向对象

  • 面向过程是一种以事件为中心、自顶向下的编程。把问题模块化。分析出解决问题所需的步骤,然后用函数把这写步骤实现,并按顺序调用。
  • 面向对象是以“对象”为中心的编程思想。把问题对象化。先建立抽象模型,然后再使用模型解决问题。抽象出对象的目的并不在于完成某个步骤,而是描述其在整个解决问题的步骤中的行为。

简单的举个例子:汽车发动、汽车到站。

  • 这对于“面向过程”来说,是两个事件,汽车启动是一个事件,汽车到站是另一个事件。针对上述两个事件,写两个函数,之后依次调用。
  • 然而这对于“面向对象”来说,我们关心的是汽车这类对象,两个事件只是这类对象所具有的行为。而且对于这两个行为的顺序没有强制要求。

优点:性能高,因为类调用时需要实例化,开销比较大;比如单 片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。在程序较小的时候,面向过程就会体现出一种优势,其程序流程十分清楚。

缺点:没有面向对象易维护、易复用、易扩展

优点:易维护、易复用、易扩展,支持封装、继承、多态性的特性,可以设计出低耦合的系统
缺点:性能低

面向对象的特征

  • 封装是指将某事物的属性和行为包装到对象中,这个对象可选择性的对外公开自己的属性和行为。具体来说,用private、protected、public三种修饰符或不用(即默认defalut)对外部对象的访问进行限制。
  • 继承是子对象可以拥有父对象的属性和行为,其子对象也就拥有了这些属性和行为。
  • 多态是指父对象中的同一个行为能在其多个子对象中有不同的表现。也就是说子对象可以按照自身需求重写父对象中的行为,使其拥有不同于父对象和其它子对象的表现。多态体现在overriding(重写)上,而overload(重载)不属于面向对象中多态的范畴,因为overload(重载)概念在非面向对象中也存在。

    多态存在的三个必要条件:

    • 父类引用指向子类对象。

多态实现的两种方式:

  • 父类指针指向子类对象
  • 将一个基类的引用类型赋值为它的派生类实例。

构造函数、析构函数不能被继承


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK