程序员小白如何理解面向对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员小白如何理解面向对象?相关的知识,希望对你有一定的参考价值。

核心是封装状态和相应的过程。通常面向对象是通过改变内部状态实现最终目的。调用对象过程的主要目的是产生改变其内部状态这个副作用(side effect)。这样封装的初衷是避免多个主体访问、修改同一状态造成混乱。在不少场合这样的封装确实也达到了目的,所以面向对象的方式才这么普及。 参考技术A 大家要明白“面向对象”要解决的问题,或者它使用的场景。面向对象并不适用于你在学习各种语言语法时写的那些Demo程序(比如“冒泡排序”“图书/课程管理系统”啥的),甚至于大多数的小型开发项目(比如普通的企业网站、个人博客)都不适合。面向对象适合的是那些业务逻辑复杂(其实用“繁杂”更恰当一些)的大型项目。所谓繁杂,繁指多,杂指乱,项目“杂乱”,可以表现为:功能多改动多,所以代码量大、开发人员多、开发/维护跨度时间长。 参考技术B 面向对象始于模拟应用,后来被视为面向过程编程无法向巨型项目扩展绝症的解药。再以后被『发挥』到极致,不管适不适合都要用面向对象的方式去解决,应了那句老话『锤子眼里全是钉子』。基本上代码里面出现诸如 executor.execute() 类似表达时,它在面向对象这条歧途上就已经走得太远了。当所有的工具、方法论、指导思想都是同一种角度出发的时候,产生这样怪异的结果也就不难理解了。 参考技术C 面向对象的『过程』部分还是原来面向过程的『过程』,其命令是有顺序的。可变状态的副作用使得命令之间的存在顺序依赖。聪明的编译器会对过程的顺序进行分析,看看哪些是可以重新排序或者同时执行的,但由于依赖关系没有指明,这样的优化还是相当有限。这导致了程序可以并行化的部分不明朗。顺序依赖也不利于多核并行计算。 参考技术D 简单地说,就是UI离不了,其它应用碰不得。巧合的是,大多数UI framework都是严格单线程的,比如Cocoa、Swing。Win32是one message queue per thread,其实只是一种复杂化的或者说多实例化的单线程模型,而且实际中很少有人真的在non-main-thread里开辟message queue。这也和『反并行化』相互印证了。另外,当你试图运用OOP的时候,就会倾向于扩大单个模块的复杂度,忽视进程分离等降低复杂度的技术。

以上是关于程序员小白如何理解面向对象?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA入门零基础小白教程day06-类和对象

JAVA入门零基础小白教程day06-类和对象

谈谈你对面向对象的理解

JAVA的环境安装部署——小白必看

弱弱的小白记录之——面向对象实现简单的歌曲管理信息

java小白也能懂的面向对象