面向对象设计——你究竟想问什么

面向对象设计(OOD)是技术面试中几乎必考的问题,也算新手村中的老大难问题。常听那些半路转CS的学生朋友们感慨,「算法问题还有刷题网站可以练习,面向对象这种开放性的问题,可怎么回答啊?」的确,面向对象的问题不好准备,完成一个好的方案需要足够多的细节考虑。但从另外一个方面讲,OOD也可以是一个非常容易出彩的机会,如果把这个问题回答好,很容易给面试官留下深刻的印象,因此我们决定不能轻易放过它。

在面向对象设计特性的支持上,Java/C++一直是这么多年来最流行的语言,也是在面试中被使用最频繁的语言。一个很普遍的建议是:尤其对于OOD的问题,如果不是有特殊原因(极端喜好或者大牛),熟悉和了解这两种语言(之一)几乎是必须的。面向对象的三个原则:封装(Encapsulation),继承(Inheritance),多态(Polymorphism)在这两门语言中体现的非常典型。因此如果今天的你才第一次听说OOD以及相关的概念,那还是老老实实的拿一本「Think In Java」,过一遍背景知识吧,很重要。

回正题,有一大类的OOD问题可以用一句话概括:Design a class for XXX;XXX通常是日常生活常见的东西或者系统,比如停车场,电梯,动物等等。

「完全无从下手,面试官到底要什么呢?」

举例子:Design a car class.

准备的比较好的同学脑海里可能想的是:

‌但是在不同的应用场景里,上面这个设计可能根本就不沾边。比如从汽车装配厂的角度来看,面试官脑子里可能想的是下面的图,不同的配件可以组合成不同的车:

再换一个应用场景:如果这个Car类只是在停车场系统中的一个普通类,那么上面两个设计都是毫无用处的over-engineering,因为Car在停车场系统中不需要那么多细节,可能最多需要尺寸颜色的信息就足够。

总的来说,脱离使用场景来设计类,往往会偏离面试官的初衷。往深了说,意味着面试者缺少沟通能力,没搞明白怎么回事儿就匆匆忙忙开始设计,这是面试中的大忌。Nice一点的面试官可能会继续follow-up,碰上找茬的这些缺点就足矣挂人了。所以,我们要搞清楚状况,就必须学会有效提问,澄清模糊的地方。比如:

  • 有没有其他类的车?(如果没有其他类的车,可能就没必要设计Vehicle类);
  • 车上的轮胎配件之类是不是可以替换的?需要考虑么?(如果不考虑,也不替换,自然不需要图二那一堆属性)
  • ...

好的设计需要足够多的细节,也同样需要足够多的抽象。细节和抽象的取舍,归根结底,需要根据使用场景来确定。面向对象设计的第一篇:面试官究竟想要什么?答案很简单:沟通需求,搞清逻辑,拿出解决实际问题的设计。至于怎么做到后半句,请关注面向对象系列之后的文章。:)

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据钻研

Java程序员背后的危机!

近日网上有一篇关于Java程序员职场生存现状的文章“2017年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议。 ? 2017年...

38310
来自专栏程序员笔记

首先要有个想法

1316
来自专栏程序员维他命

《重来》- 读书笔记

本书作者从团队到个人,批判了很多陈腐的商业思维,尤其适用于互联网行业,是互联网从业人员必读书目。笔者读完本书甚有醍醐灌顶之感,深深地被作者明智的头脑,风趣的语言...

983
来自专栏编程

Java究竟该怎么学?文末有彩蛋!

刚收获阿里Java岗offer,趁着这股热劲,与大家分享下我的Java学习之路,希望对大家有所帮助吧。 话不多说,先上图: ? 我认为,作为一名合格的程序员,精...

2009
来自专栏Java帮帮-微信公众号-技术文章全总结

【大牛经验】入行Java的一些真实感受

声明:本文只是我的个人经验之谈,或者连经验之谈都算不上,因为我觉得自己还是个新手,没有什么经验可谈,就算是我分享一下自己从开始学习Java到现在的一些心路历程吧...

3305
来自专栏BestSDK

今年春晚将首次采用VR直播

据了解,观众需要下载央视客户端来观看VR全景直播。除了VR,今年春晚晚会还会使用其他黑科技。 那么这场受全国几十亿观众关注的晚会上,采用VR全景直播还会不会发生...

3006
来自专栏新智元

【董飞】谷歌研究主管论人工智能以及程序员自我修养

【新智元导读】谷歌研究主管Peter Norvig在文中介绍了他对人工智能、个人计算和地图服务诸多领域的看法。文中提供了Peter写了大量AI笔记的个人网站和公...

2955
来自专栏AI科技大本营的专栏

没错,就是Python!我力挺的原因就是...

而近期,数据科学网站KDnuggets,发布的2018数据科学和机器学习工具调查结果也显示:Python荣登第一,成为最受青睐的分析、数据科学、机器学习工具。2...

672
来自专栏前端桃园

治愈懒惰的人的灵丹妙药:让自己“贪婪”一点

也许我们都听过某个人努力工作挣钱的故事,他拼命工作希望让妻子儿女生活过得更好。他整天呆在办公司里,周末还把工作带回家去做。一天,他回到家,却发现人去楼空,他的妻...

1792
来自专栏鹅厂网事

恭喜腾讯成功加入OpenDaylight大家庭

"鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

2519

扫码关注云+社区