风暴俱乐部|面向对象的两大迷思,再给你们解答一次


风暴俱乐部|面向对象的两大迷思,再给你们解答一次面向对象是目前最流行的一种程序设计和实现思想 。 无论从事企业级开发、互联网应用开发 , 还是手机软件开发 , 都会用到面向对象的技术 。
在主流的编程语言中 , C++、Java、C#、PHP、Python等都是支持面向对象的语言;在编程排行榜前十的语言中 , 面向对象的编程语言能够稳定占据7~8席……
所有的这些现象 , 都展示了面向对象的流行程度和受欢迎程度 。 但即使这样 , 仍然存在一些歪理邪说在坊间流传!
下面我们就对其中流传较广的两条逐个击破!

  • 面向对象会导致性能降低?
  • 面向对象语言=面向对象编程?
本文选自李运华老师新作《编程的逻辑:如何用面向对象方法实现复杂业务需求》 , 本书会通俗易懂地带你揭示面向对象的本质 , 助你实现复杂的业务需求!
风暴俱乐部|面向对象的两大迷思,再给你们解答一次▼ 扫码获取本书详情 ▼
风暴俱乐部|面向对象的两大迷思,再给你们解答一次
风暴俱乐部|面向对象的两大迷思,再给你们解答一次迷思1:面向对象会导致性能降低?
这是一个在IT江湖流传已久的传说 , 很多对面向对象不甚了解 , 或者一知半解的人 , 每当需要抵触面向对象的时候 , 就会把这条“金科玉律”拿出来救驾!
更要命的是 , 每个相信这个传说的人都会举一个看起来很显而易见的例子:C语言和Java的对比!
你可以在网上搜索出一大堆C语言和Java的性能对比 , 你也可以做一个简单的对比测试 , 我毫不怀疑测试结果肯定是C语言快 , 但这能证明面向对象导致性能降低吗?
从语言层面来说 , 面向对象的语言肯定要比面向过程的语言性能低一些 , 毕竟这是由处理机制决定的 , 就像不同的人的差别由基因决定一样 , 这个很难改变 。 所以 , 对性能要求很高的系统软件 , 例如操作系统、驱动程序、网络设备程序基本上都是用C语言编写的 。
但在实际应用中 , 除了前面提到的专有系统(操作系统、驱动、嵌入式等) , 对一般的业务系统来说 , 无论是企业级应用 , 还是互联网应用 , 抑或是电信银行应用 , 都是复杂的系统 , 这些系统要和存储系统(磁盘、磁带等)打交道 , 要通过网络进行交互 , 要访问数据库……
我们看一下常见的一些性能数据(量级数据 , 不一定精确) 。
  • CPU:每秒10亿次 , 性能是纳秒级 。
  • 内存:每秒1000万次 , 每次请求时间是微秒级 。
  • 磁盘:每次请求5ms , 请求时间是毫秒级 。
  • 网络(TCP):每次网络交互2ms , 请求时间是毫秒级 。
  • 数据库:基本等于网络与磁盘之和 , 甚至更慢 。
从上面的数据可以看出 , 如果业务流程中涉及了磁盘、网络、数据库等操作 , 那么性能就一下子降到了毫秒级 。
而对于大部分开发语言来说 , 语言本身的运行速度至少是内存级别的 。
试想一下 , 在整个流程中 , 语言本身的处理占了微秒级的时间 , 而一次磁盘或者网络的时间是毫秒级的 , 那么从全流程来看 , 就算你把语言本身的处理速度提高了10倍 , 但对整个流程来说 , 性能几乎没有受到影响 。
例如 , 假设C语言全流程处理时间为:10μs(语言部分)+ 5ms(磁盘操作)= 5.01ms 。
如果换成Java , 那么处理时间变成:100μs(语言部分)+ 5ms(磁盘操作)= 5.1ms 。


推荐阅读