面向对象与设计模式随笔2——如何去做面向对象的设计

这个问题曾经是困扰我已久的问题。我们该如何去做面向对象的设计呢?

 

首先,我们要搞清楚什么叫做对象。按照面向对象设计的思想,宇宙间的万事万物我们都能看做成一个对象的。难点就难在这里,每个人的视角和经验不同,他做的分类也不同,而且每个人针对某个具体对象的封装,也会完全的不一样。

举个例子,一个人吃掉了一个苹果。在这件事情里面,最为常见的封装可能是定义2个类,人,苹果,还有吃这个动作应该属于人的一种行为,因此把它定义成人里面的某个方法。但是不同的意见提出来了,吃这个行为,不光光是应用在人身上的哦。猫也会吃,狗也会吃。因此我们应该把吃这个行为抽象出来,定义成一个类。以便将来的扩展。于是变成了三个类,人,苹果,吃。但是后来又有人发现,人和苹果是一个数据的承载体。可以有他们相同的共性。我们可以设计一个抽象父类去统一起来。这样就变成了二大类,持久性载体类和行为化类等等。搞了这么多的名堂,我这里又要提出一个完全不同的观点,为什么一定要把人和苹果抽象开来呢?我们完全可以把他们看成方法里面的参数,吃这个行为就是方法,这样一个类就可以解决问题了。

哈哈哈,这个时候一定会有人冲出来骂了,你这么做明显是面向过程的设计。不,我是面向对象的设计,既然万事万物都能看成一个对象,只是参照点不同,凭什么说我就是面向过程的设计呢?

 

这里就要谈谈overdesign(过度设计)这个准则。很多开发人员开发的时候,经常会犯这个错误。有时候在面向对象设计的时候,我们要问问自己,这么做值得么?好处在那里?

 

无论你采用什么的方法去做面向对象设计的时候,每个不同的方法都有自身的优缺点。但是根据不同的场合,总会有个方法是最为适合的。

比方说要把吃这个行为抽象出来。如果我们系统将来就不会去考虑,猫如何吃东西,狗如何吃东西,我们为什么要设计一个这么“复杂”的东西呢?换句话说,有时候作为吃的行为的时候,输入量本来就很小,我们为什么还要定义一个类去封装这些数据,而不是用一些参数呢?这样不是更能节省资源么?具体的案例是举不胜举。

 

因此,以我的经验来说,每次做面向对象设计的时候,我都会问自己为什么要这么去做。然后再检查这么做是不是属于过度设计了。那些扩展性根本不需要进行设计等等。有时候自己否定自己也许换来的是程序上的进一步的合理!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值