如何解答面向对象设计问题

        对于面向对象设计问题,要设计的对象可能是真实世界的东西,也可能是某个技术任务,不论如何,我们都能以类似的途径解决。以下解题思路适用于很多问题。

        步骤1:处理不明确的地方

        面向对象设计(OOD)问题往往会故意放些烟幕弹,意在检验你是武断臆测,还是提出问题以厘清问题。毕竟,开发人员要是没弄清楚自己要开发什么,就直接挽起袖子开始编码,只会浪费公司的财力物力,还可能造成更严重的后果。

        碰到面向对象设计问题时,你应该先问清楚,谁是使用者、他们将如何使用。对某些问题,你甚至还有问清楚“5W1H”,也就是Who(谁)、What(什么)、Where(哪里)、When(何时)、Why(为什么)、How(如何)。

        举个例子,假设面试官让你描述咖啡机的面向对象设计。这个问题看似简单明了,其实不然。

         这台咖啡机可能是一款工业型机器,设计用来放在大餐厅里,每小时要服务几百位顾客,还要制作10种不同口味的咖啡。又或者,它可能是设计给老年人使用的简易咖啡机,只有能制作简单的黑咖啡就行。这些用例将大大影响你的设计。

        步骤2:定义核心对象

        了解我们要设计的东西后,接下来就该思考系统的“核心对象”了。比如,假设要为一家餐馆进行面向对象设计。那么,核心对象可能包括餐桌(Table)顾客(Guest)、宴席(Party)、订单(Order)、餐点(Meal)、员工(Employee)、服务员(Server)和领班(Host)。

        步骤3:分析对象关系

        定义核心对象之后,接下来要分析这些对象之间的关系。其中,哪些对象是其它对象的数据成员?哪些对象继承自别的对象?对象之间是多对多的关系,还是一对多的关系?

        比如,在处理餐馆问题时,我们可能会想到以下设计。

    • 宴席包括很多顾客。

    • 服务员和领班都继承自员工。

    • 每一张餐桌对应一个宴席,但每个宴席可能拥有多张餐桌。

    • 每家餐馆有一个领班。

       分析对象关系一定要非常小心——我们经常会作出错误假设。比如,哪怕是一张餐桌也可能包含多个“宴席”(在热门餐馆里,“拼桌”很常见)。进行设计时,你应该跟面试官探讨一下,了解你的设计要做到多通用。

       步骤4:研究对象的动作

       到这一步,你的面向对象设计应该初具雏形了。接下来,该想想对象可执行的关键动作,以及对象之间的关联。你可能发现自己遗漏了某些对象,这时就需要补全并更新设计。

       例如,一个“宴席”对象(由一群顾客组成)走进了“餐馆”,一位“顾客”找“领班”要求一张“餐桌”。“领班”开始检验“预订”,若找到记录,便将“宴席”对象领到“餐桌”前。否则,“宴席”对象就要排在列表末尾。等到其它“宴席”对象离开后,有“餐桌”空出来,就可以分配给列表中的“宴席”对象。


                                                               ——摘自《程序员面试金典(第5版)》 






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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值