Java高级特性:循序渐进地培养面向对象的思维方式( 二 )
比如MVC架构中对于控制器与视图的分离 , 业务模型类与Servlet API的转换这些恰恰是复杂的需要OOD抽象能力的 , 框架已经给你实现了 。 框架做的多一点 , 所以开发人员就轻松一点 。 再比如Spring中对于Java bean的创建与管理 , 依赖关系的注入 , 基于拦截器和动态代理机制来实现的声明式事物以及日志处理 , 还有与其它框架的集成支持等复杂点 , 它都给你实现了 。 还有Hibernate中实体对象与关系型数据库中表的对应转换 , 对API调用翻译转换成SQL语句 , 对多种数据库语法的支持 , 查询结果的缓存等 , 也是复杂点 。
反过来说 , 如果你不用任何框架 , 去实现一个中等规模的Web应用 。 看看自己写的代码与现在基于框架二次开发的代码差别大不大 , 差别在哪里 。 我想 , 自己去实现未必会比开源大牛们设计的更好 , 但却完全可以体会到复杂点难点在哪里 , OOD是不是有应用场景 , 因为写的过程中蛋疼了 。 编程虽易 , OO不易 , 且编且珍惜 。
2 Java平台中的面向对象举例
Java语言的API规范中 , 可以说是处处体现了OOD 。 这里仅仅举Servlet和JDBC规范两个例子 , 不同的厂商底层对Servlet API的实现 , JDBC驱动的实现 , 完全对开发人员屏蔽 , 两套规范都实现了精炼的抽象 。
Servlet API把HTTP协议中的请求信息封装成HttpServletRequest对象 , 响应消息封装成HttpServletResponse对象 。 开发人员直接从这两个对象中获取HTTP通信中的各种HTTP头信息 , 参数信息 , 以及完成对HTTP客户端的响应信息输出 。
JDBC API使得开发人员可以不考虑具体的数据库类型 , 用相同的API完成与数据库的交互 。
完全可以说 , 掌握了Servlet API就掌握了Java Web应用开发;掌握了JDBC API就掌握了与Java数据库应用开发 。
Java开源社区奉献了大量优秀的框架 , 例如:Lucene , Hadoop , Hbase , Mina , Netty , ActiveMQ等在互联网和电商行业得到广泛应用 。 (看来搞Java一时半会不会找不到工作 , 不过少年你天资聪颖活力青春 , 我还是建议你搞IOS开发简单粗暴 , 不解释) 。
3 面向对象不适用于所有业务场景
在Java语言中 , 一切都是对象 。 那是不是所有的业务问题 , 都可以用面向对象的方式去设计实现呢?要知道“尺有所短 , 寸有所长” , OOD也不是全知全能的宇宙真理啊!
举个例子 , 比如要实现一个自然整数n的阶乘 。 你再怎么面向对象去思维 , 也无法去抽象出对象模型对应这个问题 。 这种场景下 , 反而过程式的实现更加简单直接 。 还有很多数学推导公式的求解也是如此 。
再举个例子 , 项目中有个实现最短路径算法的需要 。 虽然我用面向对象思维方式活生生写了10来个类实现了功能 。 网上一搜 , C语言用邻接矩阵存储的方式来实现的一两个类就实现了该功能 。 面向对象的方式可能更加适合开发人员去读懂 , 对于计算机来说 , 可能面向过程的实现运行效率更高 。
在我看来 , 计算机技术的本质是计算 。 各种二进制表示的数据 , 通过网络通讯进行传输 , 然后系统对计算的结果进行存储或通过网络返回给调用方 。
我们的思维方式中不能排斥 , 不包容其它的设计理念 。 认为OOD一招打遍天下 , 就有点愚蠢了 。 这点其实挺难的 , 我们从小的受到的教育是同一种观念 , 同一种政治正确性 , 甚至同一种价值观 , 不允许有异见 。 经常能看到论坛上非此即彼的对骂 。 好在互联网的开放性 , 使得越来越多的人有了多元的世界观 , 价值观 。
4 学习设计模式可帮助理解OOD
设计模式列举了一些经典业务场景的最佳实践 , 非常值得借鉴学习 。 我们学习设计模式中常用的23种招式 , 最终目的是培养自己对OOD的悟性 。
就好像我们看武侠小说里面 , 十八般武艺招数全部学会 , 还不抵九阳神功一掌 。 对内功深厚的大师来说 , 飞沙走石一花一叶都可伤人性命 。
- Java基础知识回顾,还记得吗?
- mybatis sharding-jdbc Java8日期
- 树莓派控制步进电机-TB6600-Java版本
- 德州点创教育JavaScript正则表达式授课大纲
- 如何编写JAVA小白第一个程序
- Python高级技巧:用一行代码减少一半内存占用
- Python 3.9 正式发布!一图秒懂新特性
- java安全编码指南之:异常简介
- Java学习路线图
- Java核心技术点有哪些 有没有什么书籍推荐