前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象设计——你究竟想问什么

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

作者头像
包子面试培训
发布2018-04-19 10:59:13
1.1K0
发布2018-04-19 10:59:13
举报
文章被收录于专栏:包子铺里聊IT包子铺里聊IT

面向对象设计(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类);
  • 车上的轮胎配件之类是不是可以替换的?需要考虑么?(如果不考虑,也不替换,自然不需要图二那一堆属性)
  • ...

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 包子铺里聊IT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档