`
阅读更多

关于程序,曾经有两个著名的公式:

      程序=数据结构+算法;

      程序=(数据结构+算法);

  前者的代表是面向过程的编程方式,后者的代表,我想应该是OO了吧。OO的基本特点——封装,将数据与对于数据的操作放置一起:隐藏数据、公开操作,达到以更贴近真实世界模型的方式,实现以基于操作对象(其实只是调用对象的公有接口)的方式开发复杂的应用。看到软件开发过程的变迁:面向过程的开发方式下,瀑布模型是十分合理的;但如果没有OO,在面向过程的开发方式下,要实现对较复杂应用所适用的迭代模型,可能会导致花费巨大,最终可能也仍然发现,这是几乎不可能的任务。

  这样看来,数据与对数据的行为的合并,自然是OO的天经地义了。可问题是,在OO的开发中,特别是针对分布式及分层开发,我们常常会习惯性的把层次分为数据实体层、数据访问层、业务逻辑层、外观层等等。也许,他们有更专业的叫法:实体类(模型)和控制类(控制器)。(不知道为什么会这么做,似乎我刚开始接触分层开发的时候,就开始这么做了。)

  探究实体类和控制类的起源,不是件容易的事吧。或许,是在将面向过程的程序向OO迁移的时候所做的折中吧。不过,实体类和控制类的分离,是不是人为的导致了数据和行为和分离,而造成了对OO基本原则的违反呢?更危言耸听一点,是不是可以说,是倒退到了面向过程的老路上?

  当面对下一个问题的时候,是秉持OO的原则,数据和行为绑定,还是按照习惯,实体类和控制类分离来分层呢?

分享到:
评论

相关推荐

    ubuntu从入门到精通

    Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。 了解发 音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个

    三年级英语下册Unit2IliketheshapeLesson8学案无答案北京版20200429184

    - 同时也要提出自己的困惑,可能是对某个单词发音的疑惑,或者是对某个句型理解的困难,以便于后续的学习和老师的指导。 总的来说,这个学案旨在通过多种教学手段,使学生在语言能力、语音技巧和词汇积累等方面...

    基于Mysql+Java的进销存信息管理系统源码+sql数据库+项目说明.zip

    update(String sql),findForResultSet(String sql),findForList(String sql)都可以让各个表对应的操作共用,各个表都有对应的javabean对象,增删改查主要是针对这些对象,体现了oo思想,具体实现查看Dao.java中代码....

    php上的memcache和memcached两个pecl库

    在设计上,memcached仅支持面向对象(OO)接口,这可能在一定程度上提高了性能,因为pecl::memcache同时支持OO和非OO接口,导致了一定的性能损失。 另一个关键区别在于,memcached的`setOption`方法允许统一设置...

    推荐的C++书籍 4.3 Generic programming and the STL

    光用不行,我们还有必要了解stl的工作原理,那么源码剖析>>会解决你所有的困惑 level 5 对于c++无非是oo和gp,想进一步提升oo,<<exeptional c++ style>>是一本主席这么多年的经验之谈,是很长esp的 一位stl高手是...

    推荐的C++书籍 4.4 STL源码剖析

    光用不行,我们还有必要了解stl的工作原理,那么源码剖析>>会解决你所有的困惑 level 5 对于c++无非是oo和gp,想进一步提升oo,<<exeptional c++ style>>是一本主席这么多年的经验之谈,是很长esp的 一位stl高手是...

    higher-order-classes:我的如何增加高阶类的文章的代码示例,探讨了如何针对类定义应用高阶函数范例

    这个词完全是胡言乱语的,但是结合了经典的OO术语和函数式编程范例,我听说过很多Javascript开发人员对ES6的新Class定义应该如何使用与JS Objects and Functions结合使用的模式感到困惑。 我希望我能对此有所帮助。 ...

    MFC之深入浅出

    3. **对Application Framework和面向对象编程感兴趣**:如果你对框架编程和OO(面向对象)概念感兴趣,本书将带你深入了解MFC的内部机制,包括Runtime Type Information、Dynamic Creation、Persistence、Message ...

    JavaScript内核系列

    这种 策略显然颇具成效,以至于到现在很多初学者还会为JavaScript和Java的关系而感到困惑。 Javascript取得成功了之后,确实为页面注入了活力,微软也紧接着开发自己的浏览器脚本语言,一个是基于BASIC语言的 ...

    四川省成都市蒲江县朝阳湖镇九年制学校七年级英语上册StarterUnit2What’sthisinEnglish1a_2e导学案无答案新版人教新目标版

    这一部分特别设计以教授学生8个新字母:Ii, Jj, Kk, Ll, Mm, Nn, Oo, Pp, Qq, Rr。学生们将通过听录音跟读,小组互学以及书写练习来掌握这些字母的准确发音和书写方法。在这个过程中,教师会对学生进行及时的指导和...

    计算机学习总结报告范文 .docx

    同时,要克服初学者对计算机应用的困惑,需要多做练习、记笔记,更要将所学应用于实际,不断提高解决实际问题的能力。 此外,计算机网络的发展极大地降低了学习、生活和工作的资源消耗,因此掌握一定的计算机知识...

    Spring.3.x企业应用开发实战(完整版).part2

    11.6 以OO方式访问数据库 11.6.1 使用MappingSqlQuery查询数据 11.6.2 使用SqlUpdate更新数据 11.6.3 使用StoredProcedure执行存储过程 11.6.4 SqlFunction类 11.7 小结 第12章 整合其他ORM框架 12.1 Spring整合ORM...

    Spring3.x企业应用开发实战(完整版) part1

    11.6 以OO方式访问数据库 11.6.1 使用MappingSqlQuery查询数据 11.6.2 使用SqlUpdate更新数据 11.6.3 使用StoredProcedure执行存储过程 11.6.4 SqlFunction类 11.7 小结 第12章 整合其他ORM框架 12.1 Spring整合ORM...

    c++批判(第三版,英文版)

    虚基类是为了解决多重继承带来的问题而引入的机制,但其使用并不直观,容易引发程序员的困惑。 ##### 3.8 模板 模板是C++中用于实现泛型编程的关键特性,它极大地提高了代码的复用性。然而,模板的复杂性也导致了...

    【JavaScript源代码】详解JS对象遍历的顺序问题.docx

    然而,对象遍历的顺序问题经常让开发者感到困惑。本篇文章将详细解释JavaScript对象遍历的顺序规则,以及常用的几种遍历方法。 #### 对象遍历顺序的基本原则 在JavaScript中,遍历对象时的顺序并非完全随机,而是...

    【JavaScript源代码】Javascript中函数分类&this指向的实例详解.docx

    此外,函数内部的关键字`this`的指向问题也经常让人感到困惑。本文将通过具体的示例来探讨JavaScript中的函数分类以及`this`指向的规则,并介绍如何改变`this`指向的三种方法。 #### 二、函数分类 根据不同的使用...

Global site tag (gtag.js) - Google Analytics