博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象与面向过程的对比——以自动售票机程序为例
阅读量:7123 次
发布时间:2019-06-28

本文共 2442 字,大约阅读时间需要 8 分钟。

  最近在看翁恺老师的面向对象程序设计,觉得与之前学习c语言时的面向过程着实差距很大。两者的差距自不必多说,但具体区别在哪,这里举一个程序的两种写法来说明。

  先从我所熟悉的面向过程说起,面向过程与我惯于思考问题的过程相似,即去分析想实现某个目标需要做的各个步骤,然后实现每个步骤,从而达成最终目标。例如,一个自动售票机程序,我们需要做的各个步骤是:

  1、投入硬币,

  2、购买车票,

  3、查询余额

  于是,我们的程序源代码可以是这样:

1 #include 
2 3 const int PRICE = 1; 4 int balance = 0; 5 6 void insertMoney(int amount); //投入硬币 7 void showBalance(); //查询余额 8 void chooseTicket(); //选择车票 9 10 int main()11 {12 int amount;13 printf("Please insert coins:\n");14 scanf("%d",&amount);15 16 insertMoney(amount); //投入硬币17 18 chooseTicket(); //选择车票19 20 showBalance(); //查询余额21 22 return 0;23 }24 25 void insertMoney(int amount)26 {27 balance += amount;28 }29 30 void showBalance()31 {32 printf("The balance is %d\n", balance);33 }34 35 void chooseTicket()36 {37 int ch;38 printf("Which ticket do you want to buy? \n1. xx2xx\n2. yy2yy\n");39 scanf("%d", &ch);40 balance -= PRICE;41 }

 

  接下来是关于对面向对象的描述,翁恺老师讲对象就是一个蛋清包裹着蛋黄,从对象的角度出发,售票机的蛋清是一些系列操作,蛋黄是内部的数据。例程如下:

  

1 /* 2  * TicketMachine.h 3  */ 4  5 class TicketMachine{ 6 public: 7     void insertMoney(int amount); //投入硬币 8     void showBalance();           //查询余额 9     void chooseTicket();          //选择车票10 private:11     int balancce;12     const int PRICE;13 }14 15 /*16  * TicketMachine.cpp17  */18 19 #include "TicketMachine.h"20 #include 
21 using namespace std;22 23 void TicketMachine::insertMoney(int amount)24 {25 balance += amount;26 }27 28 void TicketMachine::showBalance()29 {30 cout << "The balance is " << balance << endl;31 }32 33 void TicketMachine::chooseTicket()34 {35 int ch;36 cout << "Which ticket do you want to buy? \n1. xx2xx\n2. yy2yy" << endl;37 cin >> ch;38 balance -= PRICE;39 }40 41 /*42 * main.cpp43 */44 45 #include "TicketMachine.h"46 47 int main()48 {49 TicketMachine test;50 test.insertMoney(100); //插入硬币10051 test.chooseTicket(); //选择车票52 test.showBalance(); //显示余额53 return 0;54 }

  但是自动售票机的类只有一个,对象也只有一个,不能体现出对象之间互相交流信息的关系。我们可以举一个更为复杂的系统,例如一个棋类对弈游戏。

  用面向过程的角度来考虑这个程序,我们需要做的步骤如下:

  1、开始游戏,

  2、黑子先走,
  3、绘制画面,
  4、判定输赢,
  5、轮到白子,
  6、绘制画面,
  7、判定输赢,
  8、返回步骤2,
  9、输出最后结果。

  用面向对象的角度考虑,我们可以考虑一下三个类:

  1、黑白双方,这两方的行为是一模一样的,

  2、棋盘系统,负责绘制画面,
  3、规则系统,负责判定诸如犯规、输赢等。

  即面向对象不需要考虑步骤的实现,需要关注对象,以及对象之间的信息交换。

  关于各自的优缺点,会等面向对象掌握的比较熟练以后来补充。

 

  

  

转载于:https://www.cnblogs.com/zjuhaotong/p/9578113.html

你可能感兴趣的文章
服务越好收入越高,300万快递小哥有了终身成长体系
查看>>
ipa-server
查看>>
2018云栖大会深圳峰会-企业级互联网架构专场看点提前大放送!
查看>>
邱剑 | 美团云容器实践之路
查看>>
windows 系统监视器 以及建议阀值
查看>>
bootstrap-表单控件——按钮
查看>>
[数据结构]约瑟夫环问题
查看>>
Spring系列之AOP分析之获取Advice的过程(四)
查看>>
CSS之浮动那些事
查看>>
BPM实例方案分享:表单子表自动填入数据
查看>>
iproute(网卡限速)--使用方法
查看>>
开源项目spring-shiro-training思维导图
查看>>
Memcache 查看列出所有key的方法
查看>>
DataBinding初识
查看>>
CentOS Docker 安装
查看>>
python set(集合)
查看>>
(C#)把磁盘目录树加载在窗体菜单中
查看>>
centos6中三台物理机配置nginx+keepalived+lvs
查看>>
apache
查看>>
file_get_contents()采集不到原因
查看>>