面向对象的两大迷思,再给你们解答一次(文末送书)
所有的这些现象,都展示了面向对象的流行程度和受欢迎程度。但即使这样,仍然存在一些歪理邪说在坊间流传!
下面我们就对其中流传较广的两条逐个击破!
- 面向对象会导致性能降低?
- 面向对象语言=面向对象编程?
更要命的是,每个相信这个传说的人都会举一个看起来很显而易见的例子:C语言和Java的对比!
- CPU:每秒10亿次,性能是纳秒级。
- 内存:每秒1000万次,每次请求时间是微秒级。
- 磁盘:每次请求5ms,请求时间是毫秒级。
- 网络(TCP):每次网络交互2ms,请求时间是毫秒级。
- 数据库:基本等于网络与磁盘之和,甚至更慢。
因此,对于复杂的业务系统来说,性能的好坏是由设计来决定的,而不是由语言来决定的,更不会因为采用了面向对象而导致性能降低!
我们以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,省略具体的代码实现
*
*/
publicclassHttpServer {
publicstaticvoidmain(String[] args)
{
//虽然我们用的是Java编程语言,但如下代码实际上是面向过程的代码
openSocket();
while
(
true){
acceptConnection();
acceptHttpRequest();
handHttpRequest();
sendHttpResponse();
}
}
/**
* 打开监听端口
*/
privatestaticvoidopenSocket()
{
//此处省略具体实现
}
/**
* 接收HTTP连接
*/
privatestaticvoidacceptConnection()
{
//此处省略具体实现
}
/**
* 接收HTTP请求
*/
privatestaticvoidacceptHttpRequest()
{
//此处省略具体实现
}
/**
* 处理HTTP请求
*/
privatestaticvoidhandHttpRequest()
{
//此处省略具体实现
}
/**
* 发送HTTP响应
*/
privatestaticvoidsendHttpResponse()
{
//此处省略具体实现
}
}
面向对象经过几十年的发展,理论已经趋于成熟。虽然面向对象更加类似于“人的思想”,但其理论相比面向过程来说要复杂很多,相关的知识和技术也更加纷繁复杂。
因此导致很多人在学习面向对象的时候感觉比较难,或是在实际开发中不能很好地运用这些技术。
本文选自李运华老师新作《编程的逻辑:如何用面向对象方法实现复杂业务需求》,是李运华老师在多年的摸索与不断的实践下,逐渐形成的一套完整的面向对象方法论。
本书可以帮助更多的程序员更好地掌握面向对象思想和技巧,享受程序人生,实现自己的梦想!
李运华 著
▊ 作者简介
李运华
阿里前资深技术专家(P9),15年软件设计开发经验,曾就职于华为、UCWEB、阿里巴巴、蚂蚁金服,承担架构设计、架构重构、技术团队管理、技术培训等职责;专注于开源技术、系统分析、架构设计,对互联网技术的特点和发展趋势有较深入的研究和理解,先后负责过阿里游戏异地多活、飞鸽消息队列、交易平台解耦、蚂蚁国际澳门钱包等项目,对于高性能、高可用、业务架构、系统解耦等有丰富的经验,著有《面向对象葵花宝典:思想、技巧与实践》、《从零开始学架构》2本书籍,极客时间专栏《从0开始学架构》作者。
▊ 本书内容架构
第1部分 面向对象基础
通过对面向对象相关的历史、发展,以及与面向过程的对比等相关背景知识的介绍,让读者对面向对象有一个更完整的认识;并深入地阐述面向对象的各种概念,让读者“知其然,并知其所以然”。
第2部分 面向对象方法
通过一个实例,完整地介绍面向对象相关技术如何在软件开发流程中落地,整个面向对象的开发流程一环扣一环,步步为营,让读者避免使用“拍脑袋”“头脑风暴”式的开发方式。
第3部分 面向对象技巧
对“内聚耦合”“设计模式”“设计原则”“UML”等最常见的面向对象技术进行深入和别具一格的阐述,让读者不但知道“What”(是什么),还能知道“Why”(为什么)和“How”(如何用)。
第4部分 面向对象实战
通过增加“朋友圈踩”和“ZooKeeper”的案例来说明面向对象方法在业务系统和算法系统中如何落地,让读者对具体开发项目中如何应用面向对象方法更加有“体感”。
▼ 扫码获取本书详情 ▼
这里是彩蛋:
李运华老师这本书作为福利赠送给一直支持开源中国的小伙伴们!3个名额,4本书
拿书规则:
1. 在本文留言评论中回复你想要得到这本书的理由和用途。
2. 留言点赞数排名第1名的小伙伴,可以额外得到除这本书外的另一本技术类书籍,即可以获得2本书。
3. 留言点赞数排名第3,5的小伙伴,可以得到这一本《编程的逻辑:如何用面向对象方法实现复杂业务需求》。
4. 开奖时间:9月11日 12:00
往期精彩回顾 ▼
觉得不错,请点个在看呀
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。