面向对象其实是对过去成功的设计经验的总结。但那些成功的设计,不是因为用了封装/归一化而成功,而是切合自己面对的问题,给出了恰到好处的设计。所以在使用面向对象方法时不要为了面向对象而面向对象,而是设计需要面向对象然后再面向对象。所以一个方法没有好与不好,只有适不适合这个问题。技术无罪,但,没有银弹。
首先,面向对象是一种思维方式、一种设计方法,这与是否是使用所谓的‘面向对象语言’是无关的。显然,不用面向对象语言、不用class,一样可以做归一化的设计(unix 系统提出泛文件概念时,面向对象语言根本就不存在;游戏界的精灵这个基础抽象,最初是用C甚至汇编写的),一样可以封装(通过定义模块和接口),只是用面向对象语言可以直接用语言元素显式声明这些而已;而有时即使用了面向对象语言,满篇都是class,并不等于就有了归一化的设计。甚至,因为被这些花哨的东西迷惑,反而更加不知道什么才是设计。
面向对象最最基本的好处有以下两点:封装可(通过固定接口、合理模块化而)应付需求变更、归一化可简化(类的使用者的)设计。
这种编程思想在应用于大型系统的时候特别好使,注意这个大型系统并不仅仅是指程序项目,比如这个系统可以是一个公司。在一个复杂的公司里,没有一个人能搞清楚一个工作的所有细节(没有一个上帝视角)。为此,公司要分很多个部门,每个部门相对的独立,有自己的章程,办事方法和规则等。独立性就意味着“隐藏内部状态”。例如 CEO 只能通过部门上交的报表使我们了解部门运转情况,命令部门经理要达到什么什么要求。却不能说命令部门里的谁谁谁,在什么时候之前一定要办成。这些内部的细节你管不着,也管不过来。
但是在小项目里,“面向对象”没用,或者说体现不出来“面向对象”的那些好处,面向对象并不适用于在学习各种语言语法时写的那些Demo程序(比如“冒泡排序”“图书/课程管理系统”啥的),甚至于大多数的小型开发项目(比如普通的企业网站、个人博客)都不适合。面向对象适合的是那些业务逻辑复杂(其实用“繁杂”更恰当一些)的大型项目。所谓繁杂,繁指多,杂指乱,项目“杂乱”,可以表现为:功能多改动多,所以代码量大、开发人员多、开发/维护跨度时间长……
但是作为面向对象的初学者接触的都是一些小项目,作为练习也没有必要上纲上线,面向对象理解这么多够用了。。。
扩展阅读:面向对象的出现
网友评论