面向对象设计——初探电梯类设计

上一篇文章谈到了OOP设计中的重要部分,即分析使用场景(use case)。今天我们就用一个具体的例子来分析这类问题的思路。

Design an elevator class.

电梯是我们生活中经常使用的物件,在开始设计之前,我们先看看电梯是如何被使用的。

首先,电梯谁来用?开展想象。电梯的使用者可以是:

a. 普通用户;(可以上下基本楼层)

b. 刷卡用户;(可以上下基本楼层+卡权限所允许的楼层)

c. 特殊工作人员;(不但可以上下所有楼层,还可以锁定、开启电梯,查看电梯配置等高级行为)

d ...

OK,有这么多类型的用户,有必要考虑这么全面呢?很简单,问面试官,「我想到了abcd这些情况,需要都考虑么?」面试官通常会说,「啊,咱们先从最简单的普通用户开始,假设电梯的使用者只有这一种用户,开始设计,之后有时间我们再扩展」。大家想想,如果我们上来就假设所有的用户都是普通用户,可以进出电梯、上下所有层。面试官估计也会觉得OK,但是显然前者可以给人「思考更全面、成熟」的印象。Why not?

其次,电梯怎么被使用?注意,请把电梯当作一个整体,从使用者的角度来考虑电梯的交互行为。面向对象的一个核心原则叫封装(encapsulation),对象对外暴露行为(interface)而隐藏状态(state)。作为普通用户,电梯的行为可以被描述为:

a. 在电梯外,按上下键呼叫电梯。

b. 电梯内,按具体楼层。

c. 电梯内,按开关门键。

d....

当然大家可能说,很多高级的电梯系统的使用方法是:在电梯外按楼层数,然后系统告知你去某一个电梯处等。Great! 想到了一个使用场景,就和面试官沟通,没准他也是这么想的。再次重申,OOP设计类问题没有唯一答案,面试官想要挖掘的是你设计的思路以及沟通的能力。因此,我们假设面试官对于我们的行为设计表示认可,于是继续按上面的行为进行设计。

在明确了使用者、使用者使用电梯的方式之后,电梯类的大致轮廓就基本出现啦:

‌‌‌

‌确定了电梯类的对外行为(public methods)之后,我们就可以进入「实现」的阶段啦。

最后补刀:很多朋友说面试OOP根本没机会写代码。很残酷的事实是,很可能你设计的类行为、方法不能自圆其说,面试官就很难想象如何使用你设计的类,那他就只能不断的问你问题,帮你理清楚到底类和类的使用者到底是怎样的调用关系。如果这个过程过于长,那就没有时间去实现具体方法啦。

下一篇,我们讲解如何通过设计类的内部状态、方法来实现对外的方法接口。

原文发布于微信公众号 - 包子铺里聊IT(baozitraining)

原文发表时间:2015-07-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算D1net

人们应该了解的20个亚马逊云服务

2706
来自专栏企鹅号快讯

什么是流式计算 另一个世界系列

另一个世界系列,从另一个角度看数据分析的方法、应用。 本文结构: 1、数据的时效性 2、流式计算与批量计算 3、总结与相关产品 (1) 流式计算流程 (2) 流...

96010
来自专栏靠谱PM

产品经理的需求池管理

需求池可以理解成一个产品迭代依据的库,数据库记录各种数据,那么需求池记录的是各种需求。

2573
来自专栏华仔的技术笔记

项目流程些许经验总结

3677
来自专栏养码场

360数据平台副总监王景正独家解析:大数据平台从0到1的演进历程,深度解构QDAS以及...

在大数据的风口,起飞的为什么是360?这也许是很多人的疑问,作为大数据业界的弄潮儿,360大数据平台是如何演进的,QDAS是缘何诞生,以及再次变革的原因又是什么...

1532
来自专栏SDNLAB

NFV在运营商网络三大用武之地

尽管NFV是一个非常理想的模式,但是如何将NFV逐渐在运营网中引入进来,才是最重要、最需要思考的问题。其实很多运营商都已经开始实践在运营商网络中引用NFV架构。...

38210
来自专栏北京马哥教育

我们学Python时我们在学什么,不看亏大了

本文转载自简书,作者为向右奔跑,感谢作者的贡献。 ---- 虽然有时觉得Python简单得不像编程语言,知乎上也有人说,“requests 好用的让人想哭”。但...

3769
来自专栏杨建荣的学习笔记

工单管理模块建设思路

工单是运维工作里面的硬通货,在多年之前我们口口相传,no 工单,no work,但是似乎在很多公司里面对于工单的管理都不够给力或者给予的重视程度有一些落...

2722
来自专栏Java后端技术栈

《阿里感悟》如何在三年内成长为一名技术专家

工作前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,做事专注,也容易养成良好的习惯。在我们公司有些同学在前三年中就快速成为某一个领域的技术专家,有些...

973
来自专栏SDNLAB

网络工程师的DevOps入门指南

DevOps是一个促进开发人员和系统管理员之间更好协作的运动。本文主要探讨DevOps如何影响网络专业人员。 什么是DevOps? DevOps是IT行业的一个...

3804

扫码关注云+社区