Как бы вы оценили навыки объектно-ориентированного дизайна? [закрыто]


11

какие идеи или вопросы помогут вам определить навыки OOAD у человека.


Спросите их, если они усеивают их я.
Работа

Ответы:


10

Вы могли бы показать не совсем понятный дизайн ОО простой задачи и обсудить, что она делает, что хорошего и плохого в этом, достаточно ли она гибка, что можно улучшить и как.

Если вам нужно начать обсуждение, спросите, что человек думает о каком-то аспекте кода, но не задавайте наводящий вопрос.

Важно помнить, что обсуждение важно, а не то, что вы знали ответы заранее. Любой достойный разработчик должен иметь возможность указать что-то о коде, о котором вы даже не думали раньше.


Мне нравится этот метод интервью, где это обсуждение, а не вопросы и ответы.
Рохан Монга

5

Обсудите проблему открытого дизайна с человеком. Посмотрите, как он / она приступает к построению модели системы, какие вопросы задаются, как меняется дизайн в ответ на новую информацию.

Отличный пример, о котором Стив Йегге упомянул в одном из своих постов в блоге, - попросить человека придумать объектную модель для XML.


Не могли бы вы дать мне ссылку :)
Рохан Монга

1
@bronzebeard - Вот и все - sites.google.com/site/steveyegge2/… . На самом деле он говорит об ОО-моделировании HTML - но я думаю, что XML может быть более
сложной

4

Знание всех самых популярных шаблонов проектирования может доказать, что кандидат действительно искал решения своих проблем проектирования.

Возможность обсуждать их и знать, когда их применять или нет, является хорошим признаком того, что он их понимает.

Спросите его, например, об использовании в его прошлом опыте, также может помочь.


Это тест на знание того, как перегрузка работает в C #, но вряд ли это тест на навыки проектирования OOAD.
user281377

Вы совершенно правы. Я читаю ваш вопрос слишком быстро, я меняю его.

4
Тем не менее, вы можете знать шаблоны проектирования и никогда не слышали о концепции. Я использовал такие вещи, как цепь ответственности, наблюдатели и контролеры задолго до того, как понял, что у них есть имена. Будьте осторожны, чтобы не предполагать, что, поскольку кто-то не знает названия шаблона, он не может использовать его грамотно.
Майкл К

@Michael: да, именно поэтому лучше сначала спросить, как решить определенную проблему, а затем рассказать о реальном названии шаблона. Я знаю многих людей, использующих шаблон стратегии каждый день, и не знаю, как это называется. Они просто «создали» это, просто подумав, как это сделала оригинальная группа из четырех человек. Разница в том, что последний написал книгу на эту тему.

Обратите внимание, «Банда четырех» получила шаблоны, увидев ОО-код, используемый в других проектах. Они ни в коем случае не берут на себя ответственность за какой-либо дизайн, только признавая их и описывая их согласованным образом.
Макнейл

3

Не давайте словарный запас. «Определить наследование» или «назвать 3 особенности ОО-дизайна» - это вопросы, которые не скажут вам ничего о навыках человека, а только о том, сколько времени он / она последний раз читал учебник. Я встречал нескольких великих программистов, которые используют эти навыки каждый день, но задохнутся, если попросят дать формальное определение.


2

Попросит его записать бизнес-объекты, классы и интерфейсы / методы для комнаты или любого другого виртуального объекта.


2

Если возможно, попросите образец кода.

В противном случае найдите какой-нибудь процедурный код для использования в качестве примера (или какой-то плохо спроектированный ОО-код), а затем спросите их, как бы они его переработали, обобщили и улучшили. Убедитесь, что программа имеет дополнительный контекст, так что редизайн может быть значимым.

В конечном итоге то, что вы тестируете - дизайн - субъективно. Таким образом, ваша оценка должна быть открытой, чтобы учесть несколько возможных хороших решений, а не только одно. Затем подумайте о возможных изменениях требований, которые могут вызвать изменение интерфейса: как они справляются с этим?


1

Прочитайте книгу Head First Design Patterns. Все примеры в книге начинаются с объектно-ориентированной задачи и затем заканчиваются в шаблоне проектирования. Они также рассказывают, почему некоторые концепции ООП достигают ограниченных результатов и почему одни лучше, чем другие.

Несмотря на то, что книга Design Pattern, эта книга полна проблем ООП :-)


Я не думаю об этом, потому что все примеры в книге относятся конкретно к одному или другому шаблону проектирования. Если у вас достаточно теоретических знаний, вы сможете это понять, и это не отражает практическое применение
Рохан Монга,

1

Начните с простого: что такое ООП?

Вы можете начать с вопроса об основных предпосылках ООП: абстракция, полиморфизм, наследование и инкапсуляция. Хорошая пища для размышлений, чтобы согреть их.

Дай им проблему

Затем представьте им проблему, которая может включать шаблоны. Не обязательно называть или использовать шаблоны, но их подход, вероятно, даст некоторые, если у них есть опыт в этой области.

Возможно динамическое подтверждение ввода текста. Вы хотели бы иметь возможность проверять вводимый символ за символом, чтобы увидеть, является ли это действительной датой, временем или датой и временем в формате ISO8601. Вы получаете копию входной строки каждый раз, когда нажимается клавиша, и вы можете вернуть логическое значение, чтобы указать, остается ли текст хорошим хотя бы в одном из форматов. Попросите их обсудить и наметить проект, используя принципы ОО.

К тому времени, как вы закончили болтать о

  1. Контроллер (то, что запускает события изменения и оценивает ответы),
  2. Наблюдатель (валидаторы отвечают на события изменения),
  3. Стратегия (каждый валидатор представляет свой способ определения правильности ввода),

тогда у вас будет довольно хорошая идея, если они поймут OOD.

Дайте им ту же проблему снова, но на этот раз попросите другой дизайн

Теперь попросите их перепроектировать систему без использования шаблона Observer (если они упомянули об этом) - они могут выбрать подход с цепочкой ответственности или, возможно, шаблон Command. Тебя это не волнует, ты знаешь, что у них есть разумное понимание вовлеченных принципов.

Даже если они не используют подход, основанный на шаблонах, простое прослушивание того, как они пытаются разбить проблему на связанную с ней функциональность , даст результаты, к которым вы стремитесь.


1

Я склонен выбирать сценарий реального мира, что-то хорошо известное всем † и просить их идентифицировать сущности; вовлеченные актеры; какие взаимодействия существуют между ними; где можно выделить общие черты; какие свойства нужно учитывать.

Да, вы могли бы попросить их сесть и нарисовать UML, да, вы могли бы задать им вопросы для поиска по некоторым особенностям реализации ООП, чтобы посмотреть, смогут ли они «взяться за дело».

Но то, что работодателю действительно нужно в их команде, - это ум, который понимает концепции и может применить их к любой ситуации. Специфика может быть изучена быстро, когда понятия внедрены.


† Глубокое знакомство и отсутствие связи с кодом помогают: семья использует ванную комнату по утрам; готовить обед; автобусный маршрут на работу; сборка авто.


0

Что-то, что, кажется, работает довольно хорошо и на самом деле занимает всего несколько секунд: попросите их спроектировать объектную модель. Неважно для чего. Это может быть абсолютно тривиально. На самом деле, это, вероятно, должно быть тривиально, чтобы не затягивать тест без необходимости.

Если первое, что они пишут, это объект, то они уже опережают 99% своих коллег по пониманию ОО. Если первое, что они пишут, это класс, пожалуйста, попросите их выйти и отправить следующего кандидата и подумать, почему он называется ООП, а не КС.


Хотя я понимаю, что вы имеете в виду, я думаю, что я мог бы быть немного осторожен, воспринимая это буквально Когда я «свободно размышляю», проектирую решения, я склонен использовать нотации классов UML, даже если это не то, что я на самом деле имею в виду под своими диаграммами.
Кен Хендерсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.