zoukankan      html  css  js  c++  java
  • 解惑1:面向过程和面向对象的区别

    一、面向对象和面向过程

    面向对象

    • 面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现

    • 面向过程编程,数据和对数据的操作是分离的函数本身只处理数据,并没有储存的功能

    • 按照这样的思路设计的程序,当一个公共变量同时被多个函数操作的时候,很有可能因为一个函数的出错而导致整个程序的出错。

    面向对象

    • 面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

    • 面向对象编程,数据和对数据的操作是绑定在一起的数据可以存储在对象中

    • 面向对象的特点是:封装、继承、多态

      为了尽可能的做到代码复用,使用封装隐藏实现细节,使得代码模块化,使用继承可以扩展已存在的类;

      而为了实现接口复用,使用多态来使用基类的衍生方法

    二、举个例子

    如果我要设计一个五子棋的小程序,面向过程的设计思路就是五子棋的下棋步骤:

    1、开始游戏
    2、黑子先走
    3、绘制画面
    4、判断输赢
    5、轮到白子
    6、绘制画面
    7、判断输赢
    8、返回步骤2
    9、输出最后结果
    

    把上面每个步骤用分别的函数来实现,问题就解决了。

    面向对象把下棋看成多个对象的共同行为:

    1、玩家对象,也就是黑白双方
    2、棋盘对象,负责绘制画面
    3、规则对象,负责判定诸如犯规、输赢等。
    

    玩家对象负责接受用户输入,棋盘对象棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用规则对象来对棋局进行判定。

    对于面向对象,功能上的统一保证了设计的可扩展性:

    • 比如要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。
    • 再比如我要把这个五子棋游戏改为围棋游戏,如果是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?而下棋的大致步骤从面向对象的角度来看没有任何变化。

    三、总结一下

    面向过程就是把问题拆分为多个步骤,按步骤实现程序功能,而面向对象就是把问题的解决步骤描述为对象的行为;

    面向过程数据是被所有函数共享的,面向对象数据可以是私有的,只被对象里的函数使用

  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/Createsequence/p/12659027.html
Copyright © 2011-2022 走看看