软件之禅(九)对象分类(Classify)

黄国强 2024/01/22

        前文提到,面向对象软件开发只是两件事:
            1 开发各种处理具体事务的对象 
            2 开发负责创建上面事务对象的工厂对象
        比方说,我们开发一款模拟游戏,游戏里有1万个人需要模拟,人的行为都是不同的。简单的做法是开发一万个对象来模拟这一万人的行为。如果这个游戏是模拟十个人的行为,上述做法是行的通的。但是在1万人甚至更多人的情况下,现实中这样做的游戏是不存在的,原因是任何公司根本没那么多钱招这么多程序员开发这样的程序。
        这个问题的解决方法就是将上述各种人的行为的分类,组合这些行为形成类,用这些类创建对象。
下面举例分析并提炼出几个维度。
* 男人和女人的行为不同。我们获得性别这个维度。
* 衣食住行行为不同(比如吃饭用筷子还是叉子),我们获得种族这个维度。
* 承担的责任不同(比如战士,农民),我们获得职业这个维度

        具体维度还是可以继续分析下去,我们这里简化按照上述三个维度来构建对象模型。
下面是两种模型,一种是用继承的方法实现的(图一),一种是用组合的方法实现的(图二 )。


        在面向对象设计原则中,有一条原则就是组合优先于继承。显然,上述组合的方法更合理,组合的软件模型即为桥接模式。当然,也不能说第一种方法完全不对,在性能敏感场合,第一种模式结合template可以获得非常好的性能,这里不展开。
        上述技术在半导体设备领域的一个运用就是笔者开发的麦芯设备软件中间件。在半导体设备领域有几百种不同的设备,目前各家公司都是自行开发一个自己的软件来控制自己的设备。根据上面的分析,这是成本很高的做法。而利用麦芯设备软件中间件可以减少重复开发,大幅的降低设备软件开发成本。
        麦芯的愿景是“让每台设备运行麦芯”。

 [参考]
 1 软件之禅(八)乔布斯谈面向对象 
 2 软件之禅(十)数据库

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acloud_csu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值