面向对象


从面向过程到面向对象

  • 面向过程
    在计算机编程发展之初,解决一个客观问题的思路往往是通过设计算法去对数据进行分析处理最终给出结果。
    例如:完成一组数据的排序,生成特定的数列,从一组数据中筛选出符合条件的数据等等。
    在面向过程的编程中,解决问题是以功能为起点,分析问题主要从 依附在事物上的行为 出发,面向过程的编程重在 如何一步步完成这一行为
    例如:顾客购物可以简要描述为:顾客进入商店,选择商品,付钱,离开商店
  • 为什么需要面向对象?
    但随着需要解决的问题的规模和复杂度逐渐增加,面向过程的思想在进行程序设计时需要分析和处理的数据就变得非常庞大,不利于设计者对问题的分析和处理,并且在一定程度上限制了程序的运行效率。

面向对象的思维

  • 客观事物描述的时候往往围绕着 从中抽象出的主要个体
    例如:购物这一事件围绕 顾客、店主 和 商品 发生。
  • 在对 个体 进行数据分析时,往往可以通过一些 特性(具有的属性)和行为(进行的动作) 进行描述
    例如:顾客拥有 现金余额 等属性,可以实施 购买商品 等行为。
  • 这些独立的个体都可以进行相应的数据处理,相互之间可以进行信息的传递,作为独立的通信单元
  • 事实上,客观事物描述时大多都可以抽象成 多个独立对象之间进行信息传递和处理 的类似模型来进行分析。
  • 换句话说,相比面向过程代码复杂度随着行为的多变性增加,面向对象的思维在编程时更为通用,独立对象的行为/属性变化不会影响其他部分,更不会导致整体需要调整。
  • 在具体问题中,抽象出的有用的对象属性和行为越具体,描述越精确,抽象出的模型越接近现实情况,具体需要抽象到什么程度,需要根据需求进行分析。
    例如:
    如果只需要知道顾客购买了什么商品,方便统计数量,可以通过添加商品对象,对其数量进行统计分析即可
    但如果还需要进行财务管理,就需要给商品增加价格这一属性,进一步进行数据处理

面向对象和面向过程的关系

尽管面向对象在面对复杂问题时具有较大优势,面向过程仍为面向对象的基础,对象的行为如何实施,对象之间的数据传递和处理等仍需要面向过程的思想为基础进行编写。


面向对象编程中的基本概念(个人理解)

  • 类:具有同一类属性和方法的对象的集合(模板)
  • 方法:定义在类中的函数
  • 对象:具有类中属性和方法的具体的独立个体,即类的实例化个体
  • 类变量(类属性):定义在类中(方法外)的变量,可以在外部直接通过类名.属性名的形式进行访问
  • 类方法:利用@classmothod装饰的方法,可以直接通过类名.方法名的形式进行调用,无需实例化再调用
  • 类对象:类本身也是一个特殊对象,在创建类时,会在内存中存放(类也可看作是一种数据结构)
  • 实例化:创建一个具体的对象即为类的实例化

面向对象的三大特性(相比面向过程)

封装

面向对象的语言将某个个体的属性和行为进行封装(类),作为一个独立的逻辑单元进行分析处理

继承

子类从父类中继承其属性及方法,也可在子类中加入新的属性及方法

多态

相同的 函数或数据 作用或传递 到不同的对象中,执行或处理 的结果也不同