面向对象编程--听高翔“面向对象与生活”有感

时间:2021-07-30 17:23:30

     应老赵的要求放个链接,第三届nBazaar大会正在报名http://nbazaar.org/

 

      面向对象编程是什么?无疑面向对象编程首先是编程,然后编程前面有定语“面向对象”。我很不客气的在前面加一个“你”,你面向对象编程。

         为什么把这么个话题又拿出来又说呢!主要是我觉得这个话题虽然说了又说但是很多人还是不明白,所以很有必要拿出来再说一说,当然这并不是说我比别人解释的更清楚,只是想拿出我的体会来分享给大家。

         那谁能先说说面向对象编程,肯定无数人都会鄙视我 ,谁不能说说啊!所谓面向对象编程就是以对象作为思考方式,现实世界中每一个事物都是对象,以对现实世界事物的思考方式解决程序问题就是面向对象编程了,这个无数书上都给过定义了,大家都知道。那其实我想说的是背是背过了,但是背过和明白是两回事。

         前面说我斗胆在面向对象前面加了个你,你面向对象编程,现在什么情况,“你”有了,你编程了,你面向XX编程了,但是这个XX是不是“对象”呢?恐怕不一定。可能说你也有表示对象的类,你也把项目根据分工做了不同的分层,每层了区分了无数的类。难道这还不是面向对象编程吗?

         那咱们说说“对象”,什么是对象?很多类似的例子,现在有只鸡,鸡有性别:公鸡、母鸡;鸡有花色:白色的、花的;鸡可以叫。然后有只鸽子,鸽子也有花色,鸽子也可以叫。鸡、鸽子就是对象了,从上面看鸡和鸽子所具备的东西分为两种,第一类就是属性了,性别、花色;第二类就是动作了,叫。鸡和鸽子又同属鸟类。这些就体现了面向对象的三个基本特征,封装、继承、多态。具体哪部分体现了什么我就不过多的解释了。

到这里肯定很多兄弟不服气了,你这说了半天我也没看出点新鲜的来啊,说来说去还是这么点东西。举个例子还是真么烂,还鸡怎么不说鸭子啊!

         应该说单纯说面向对象的话,大家都能做的很好,写出的例子比我精彩百倍。实际项目中不单纯说为了面向对象而面向对象了,为了处理业务而面向对象。大家回想一下自己的代码面向对象了吗?你的Model类应该说是就是业务逻辑中的对象,实际代码中Model类是对象吗?对象是有属性和动作来组成的,实际上Model类里面基本上就是属性吧,有该对象所具备的动作吗?我的Model没有什么动作,为什么没有动作呢?

         大家现在恐怕基本都用着ORM呢,那就说说ORM,拿到需求后大家最早定下来的是什么,有多少人最先定下来的是表结构,然后用代码生成器生成一下,实体层、数据层、业务层全有了,只要页面上写些调用,业务类里填上自己的方法逻辑,一切ok了,这样做的不在少数吧。那你说在你这是面向对象编程吗?是啊,你看我所有东西都封装了,我操作的也都是实体类。我说你不是,你只不过是把过程化的程序切成了几节,搞成好像面向对象的样子,你操作的是实体类是应为ORM提供给你了实体的操作方式,你可以很省事的用上罢了。

ORM是什么?Object RelationalMapping,大家都看见了O在最前面object,ORM是为了解决什么问题,将对象持久化到数据库中。请注意,将“对象”持久化到“数据库”中,不是讲“数据库”映射成“对象”。

         可能说你没有用ORM,那没有关系,基本来说只要你是首先确定的表结构然后一切围绕表来设计的,那就基本为你的程序定下了主基调。当然不排除业务处理中小范围的包含面向对象的方式和特征。

         现在发现了没有?本末倒置了,先有类然后在考虑持久化问题,而不是先定下来表结构然后再考虑怎么搞成类。从需求中找名词做类,找动词做方法,这我就不详细说了,很多书上都有大篇幅来说明这种设计方法。

         这同样也解释了很多新人的问题,都说面向对象编程可以应对变化,可是一旦变化了为啥我的程序还是要挨个改个遍,为啥c#中这么多语言的特性我都用不到,什么委托、事件对我来说都是浮云啊。因为你还没有面向对象编程,你只是用了面向的语言写了过程话的程序。为啥设计模式我看了觉得也很棒,很好很强大但是我就是用不上呢?因为设计模式是“可复用面向对象软件的基础”你还没有面向对象的。

         顺便再说说分层,分层是为了什么?借用《企业应用架构模式》上的一句话“你可以将复杂的领域逻辑从界面代码中抽取出来,单独放到中间层,用对象加以建模和组织”我觉得大家应该好好体会体会。

本文不算原创,元旦假期听了高翔老师的“面向对象与生活”讲座后,觉得讲的非常好,希望大家都能听听。本文把其中一些内容结合自己的体会描述给大家。下载地址:

盛大创新院赞助第二届.NET技术交流会 - 演讲录像及下载