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

来源:互联网 发布:linux的ftp怎么开启 编辑:程序博客网 时间:2024/06/05 23:04

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

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

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

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

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

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

        步骤2:定义核心对象

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

        步骤3:分析对象关系

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

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

    • 宴席包括很多顾客。

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

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

    • 每家餐馆有一个领班。

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

       步骤4:研究对象的动作

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

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


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






原创粉丝点击