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


从这个简单的样例可以看出 , 语言本身性能的提升 , 对整个流程中性能的提升几乎没有影响!
因此 , 对于复杂的业务系统来说 , 性能的好坏是由设计来决定的 , 而不是由语言来决定的 , 更不会因为采用了面向对象而导致性能降低!
迷思2:面向对象语言=面向对象编程?
C语言是纯粹的面向过程的编程语言 , 而Java是纯粹的面向对象的编程语言 , 因此很多人就自然而然地认为:用C语言编程就是面向过程编程 , 用Java编程就是面向对象编程!很多人在面试的时候都会说“我掌握了面向对象编程” , 其实他只是掌握了Java编程而已 。
之所以产生这种误解 , 我认为主要原因还是大部分人并没有深入理解“面向过程”和“面向对象”的本质 , 而只是将它们简单地和编程语言等价对应起来 。
其实 , 不管是“面向过程”还是“面向对象” , 都是一种思维方式、一种思考问题的方式 , 而和具体的语言没有关系 。 用C语言一样可以写出面向对象的程序 , 用Java也可以写出面向过程的程序 。
我们以Redis为例 。 Redis是标准的C语言程序 , 但是你知道吗 , 其中就用到了面向对象的思想 。
Redis的事件处理支持epoll(Linux操作系统)、kqueue(BSD系统)、select(UNIX系统)几种方式 , 但Redis没有在事件处理流程中用if( OS == Linux)...else if(OS == BSD)...else if(OS == UNIX)这种方式 , 而是将事件处理抽象成几个通用的接口:aeApiCreate、aeApiAddEvent、aeApiDelEvent等 。 不同的实现方式都实现这几个接口 , 在事件处理流程中统一调用这些接口 。
同样 , 用Java一样可以写出面向过程的代码 。 一种最简单的方式就是写一个大类 , 这个类有很多方法 , 在main函数里面按照面向过程的方式调用即可 。
例如 , 如下代码用Java实现了一个面向过程的HttpServer(省略具体的代码实现) 。
package com.po;/** * 用Java语言实现一个面向过程的HttpServer , 省略具体的代码实现 * */public class HttpServer {public static void main(String[] args) {//虽然我们用的是Java编程语言 , 但如下代码实际上是面向过程的代码openSocket();while(true){acceptConnection();acceptHttpRequest();handHttpRequest();sendHttpResponse();}}/*** 打开监听端口*/private static void openSocket(){//此处省略具体实现}/*** 接收HTTP连接*/private static void acceptConnection(){//此处省略具体实现}/*** 接收HTTP请求*/private static void acceptHttpRequest(){//此处省略具体实现}/*** 处理HTTP请求*/private static void handHttpRequest(){//此处省略具体实现}/*** 发送HTTP响应*/private static void sendHttpResponse(){//此处省略具体实现}}
风暴俱乐部|面向对象的两大迷思,再给你们解答一次面向对象经过几十年的发展 , 理论已经趋于成熟 。 虽然面向对象更加类似于“人的思想” , 但其理论相比面向过程来说要复杂很多 , 相关的知识和技术也更加纷繁复杂 。
因此导致很多人在学习面向对象的时候感觉比较难 , 或是在实际开发中不能很好地运用这些技术 。
这本《编程的逻辑:如何用面向对象方法实现复杂业务需求》是李运华老师在多年的摸索与不断的实践下 , 逐渐形成的一套完整的面向对象方法论 。 本书可以帮助更多的程序员更好地掌握面向对象思想和技巧 , 享受程序人生 , 实现自己的梦想!
风暴俱乐部|面向对象的两大迷思,再给你们解答一次李运华 著
▊ 作者简介
李运华


推荐阅读