网站首页 > java教程 正文
在谈论面向对象和面向过程区别之前,我们需要了解一下什么是面向对象和面向过程是什么?总的来说,面向对象和面向过程都只是一种编程思想,对问题不同角度得去分析和解决。
1、思想上的区别
面向过程:简单的来说,面向过程就是将事物分为不同的步骤,根据这些步骤去完成编程。我们可以以五子棋来理解面向过程思想。在面向对象的思路中就是先分析五子棋需要的步骤:
(1) 绘制棋盘
(2) 开始游戏
(3) 黑子下
(4) 绘制黑色棋子
(5) 判断输赢
(6) 白子下
(7) 绘制白色棋子
(8) 判断输赢
(9) 返回步骤(3)
然后,在开发过程中,将以上步骤一步一步地实现
面向对象:而面向对象的设计思路则是将问题分为不同的部分对象,并给对象赋予属性和行为。同样拿五子棋为例,在实现时,需要去分析需要那些对象。
(1) 棋子对象(负责黑白双方落子等行为,仅需要给他们一个颜色属性进行区分即可)
(2) 棋盘对象(负责绘制棋盘,包括棋子的位置绘制)
(3) 规则对象(负责对五子棋进行输赢判断,先后手顺序判断等)
从这个例子中,我们可以发现,面向过程在实现中比较抽象,考虑的方面比较多。而面向对象,用对象直接出发,更加趋向于我们人类的思想。
2、维护上的区别
不但在实现上,包括后续的功能维护上,也有很多不同。依旧以上述的五子棋为例。我们如果要在五子棋的游戏中添加一个新的操作,例如悔棋。那么他们双方需要如何去实现呢。
面向过程:如果是面向过程的话,我们不但需要在每个人操作时判断是否有悔棋操作,还可能对前期一系列的步骤进行修改,数据的存储。对棋子的落子位置进行存放等等问题,改动可以说是十分巨大的。
面向对象:而面向对象就不需要有那么大的改动,因为在面向过程的思路中,整个五子棋游戏主要分为:棋子、棋盘、规则三部分组成。进一步分析如果我们加了悔棋,变化在哪里?规则是不会变得、棋子也不会变。唯一会变得就是棋子在棋盘上的布局。我们只需要在棋盘系统中增加一个棋谱回退的功能即可。局部的变化就可实现。
3、从性能上的区别
这个就是比较明显得事情,首先,面向对象在实现中需要类得组成,而类得调用需要实例化,这样开销就比较大,会消耗很多得资源,相对于面向过程在性能上就会低一些。所以在主要考虑性能时,一般会采用面向过程而不是面向对象。
简单的总结一下:
面向过程:性能方面比较高,但在维护、复用、扩展上比较差
面向对象:由于面向对象有三大特性:封装、继承、多态。也就带来了三个特点:易维护、易复用、易扩展。但这也同时消耗了性能,所以性能方面比较低。
最后提个小问题:面向过程的性能一定比面向对象高吗?
猜你喜欢
- 2024-12-15 java面向对象中多态容易走人的误区
- 2024-12-15 面向对象编程的基本概念(二)【Java编程基础第2篇】
- 2024-12-15 java面向对象程序设计:把大象装进冰箱
- 2024-12-15 Android应用编程基础第18篇:Java面向对象技术点补
- 2024-12-15 Java 面向对象——测试题,笔试,快进来考考你自己
- 2024-12-15 Java面向对象之接口——interface
- 2024-12-15 从零开始学JAVA-04.JAVA面向对象入门第一季
- 2024-12-15 Java 学习之面向对象思想、类、对象
- 2024-12-15 Java学习之面向对象——Java基础篇
- 2024-12-15 面向对象设计的工作步骤一 面向对象设计的五大原则
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)