什么样的见解或问题会导致您确定一个人的OOAD技能。

有帮助吗?

解决方案

您可以显示一些简单问题的半轴上的OO设计,并讨论它的作用,对它的好处和坏处,是否足够灵活,可以改进什么以及如何进行。

如果您需要进行讨论,请询问该人对代码的某些方面有何看法,而不是一个主要问题。

重要的是要记住,讨论很重要,不是您事先知道答案。任何体面的开发人员都应该能够指出有关您以前没有想到的代码的内容。

其他提示

与该人讨论一个开放的设计问题。查看他/他如何构建系统模型,提出什么样的问题,设计如何响应新信息。

史蒂夫·耶格(Steve Yegge)在他的博客文章之一中提到的一个很好的例子是要求该人提出XML的对象模型。

对所有最受欢迎的人有很好的了解 设计模式 可以证明候选人实际上搜索了有关其设计问题的解决方案。

能够讨论它们并知道何时应用它们是否很好地表明他了解它们。

例如,在过去的经历中问他的用法也可能会有所帮助。

进行词汇测验。 “定义继承”或“ OO Design的名称3个功能”是对个人技能的任何信息,只有自从他/她上次阅读教科书以来,只有多长时间。我遇到了几位出色的程序员,他们每天都使用这些技能,但是如果被要求给出正式定义,会窒息。

会要求他写下房间或任何其他虚拟实体的业务对象,类和界面/方法

如果可能,请询问示例代码。

否则,找到一些程序代码作为示例(或一些设计不佳的OO代码),然后询问他们将如何重新设计,推广和改进它。确保该程序具有额外的上下文,以便重新设计有意义。

最终,您正在测试的内容 - 设计 - 是主观的。因此,您的评估应该是开放式的,以允许几种可能的良好解决方案,而不仅仅是单个解决方案。然后,考虑可能更改迫使接口变化的要求的可能更改:它们如何处理?

阅读本书头第一设计模式。书中的所有示例都以面向对象的问题为开始,而不是最终以设计模式出现。他们还说明了为什么某些OOP的概念将获得限制的结果,以及为什么某些概念比其他人更好。

即使一本设计图案书本书充满了OOP的问题:-)

从简单开始:什么是全部?

您可以首先询问OOP的基本前提:抽象,多态性,继承和封装。考虑的好食物可以使他们热身。

给他们一个问题

接下来,向他们提出可能涉及模式的问题。不必姓名或使用模式,但是如果他们在该地区有经验,他们的方法可能会产生一些。

也许动态文本输入验证。您希望能够按字符验证输入字符,以查看它是否是ISO8601格式的有效日期,时间或日期和时间。每次按键时,您都会收到输入字符串的副本,并且您可以返回布尔值,以指示在至少一种格式中文本是否保持良好。要求他们谈谈并使用OO设计原理绘制设计。

当您完成聊天时

  1. 控制器(那些解散变更事件并评估响应的东西),
  2. 观察者(验证者响应变更事件),
  3. 策略(每个验证器代表确定输入是否有效的不同方法),

那么,如果他们了解OOD,您将有一个很好的主意。

再次给他们同样的问题,但是这次要求其他设计

现在,要求他们在不使用观察者模式的情况下重新设计系统(如果他们提到的话) - 他们可能会选择采用责任链方法或命令模式。您不在乎哪个,您知道他们对所涉及的原则有合理的理解。

即使他们不采用基于模式的方法,也只是聆听他们的方式 尝试将问题分解为相关功能 将产生您追求的结果。

我倾向于选择一个现实世界的场景,任何人都知道†并要求他们识别实体。参与的演员;它们之间有什么互动;可以抽象的共同特征;需要考虑哪些属性。

是的,您可以要求他们坐下来画UML,是的,您可以要求他们在某些OOP实施细节上搜索问题,以查看他们是否可以“达到直接运行”。

但是,雇主在团队中真正需要的是一种理解所涉及的概念并可以将其应用于任何出现的想法。嵌入概念时,可以快速学习细节。


†深切的熟悉程度和没有与代码帮助的联系: 一家人早上使用浴室;做晚饭;工作路线;汽车的组装。

似乎工作得很好,实际上只需几秒钟:要求他们设计对象模型。什么都没关系。这绝对是微不足道的。实际上,不要不必要地拖出测试应该很微不足道。

如果他们写的第一件事是一个对象,那么他们在理解OO方面已经领先于99%的同龄人。如果他们写的第一件事是课程,请要求他们出去派遣下一个候选人,并考虑为何被称为OOP而不是警察。

许可以下: CC-BY-SA归因
scroll top