Як би ви оцінили навички об'єктно-орієнтованого дизайну? [зачинено]


11

які розуміння чи запитання приведуть вас до визначення навичок OOAD людини.


Запитайте їх, якщо вони краплять свої.
Робота

Відповіді:


10

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

Якщо вам потрібно розпочати дискусію, запитайте, що людина думає про якийсь аспект коду, але не з головним питанням.

Важливо пам’ятати, що дискусія важлива, а не те, що ви знали відповіді заздалегідь. Будь-який гідний розробник повинен мати можливість вказати на щось про код, про який ви навіть не думали раніше.


Мені подобається цей метод інтерв'ю, де це обговорення, а не питання Q&A.
Рохан Монга

5

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

Чудовий приклад - згадуваний Стівом Йегге в одному зі своїх публікацій в блозі - це попросити людину придумати об'єктну модель для XML.


Не могли б ви надіслати мені посилання :)
Рохан Монга

1
@bronzebeard - Тримай - sites.google.com/site/steveyegge2 / ... . Він насправді розповідає про OO-моделювання HTML - але я думаю, що XML може бути більш жорсткою версією цього питання :)
talonx

4

Маючи хороші знання всіх найпопулярніших моделей дизайну, можна довести, що кандидат фактично шукав рішення своїх дизайнерських проблем.

Вміти їх обговорювати і знати, коли їх застосовувати чи ні - це хороший показник того, що він їх розуміє.

Попросити його, наприклад, звичаїв у його минулому досвіді також може допомогти.


Це тест на знання того, як працює перевантаження в C #, але навряд чи тест на навички дизайну OOAD.
користувач281377

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

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

@Michael: так, це звичайно, тому спочатку краще запитати, як вирішити певну проблему, а потім поговорити про власне найменування шаблону. Я знаю, що багато людей використовують шаблон стратегії щодня і не знають, що це називається так. Вони просто "створили" це просто думкою, як це робила початкова група з чотирьох. Різниця полягає в тому, що останній написав книгу на цю тему.

Зауважимо, Банда четвірок отримала схему бачення коду ОО, який використовується в інших проектах. Вони ні в якому разі не беруть на себе кредити жодної з конструкцій, лише розпізнаючи їх і описуючи їх послідовно.
Макнейл

3

Не дайте вікторини словника. "Визначити спадщину" або "назвіть 3 особливості дизайну ОО" - це питання, які нічого не скажуть про навички особистості, лише про те, як довго він / вона останній раз читав підручник. Я зустрічав декількох чудових програмістів, які використовують ці навички щодня, але задушиться, якби попросили дати формальне визначення.


2

Попросить його записати бізнес-об’єкти, класи та інтерфейси / методи для кімнати чи будь-якої іншої віртуальної сутності


2

Якщо можливо, попросіть зразок коду.

В іншому випадку знайдіть який-небудь процедурний код, який можна використати як приклад (або погано розроблений код OO), а потім запитайте їх, як вони переробляти, узагальнювати та вдосконалювати. Переконайтеся, що програма має додатковий контекст, щоб перероблення могло бути значущим.

Зрештою, те, що ви тестуєте-- дизайн - є суб'єктивним. Таким чином, ваше оцінювання повинно бути відкритим, щоб передбачити кілька можливих хороших рішень, а не лише одне. Потім подумайте про можливі зміни до вимог, які б змусили змінити інтерфейс: як вони з цим поводяться?


1

Прочитайте книгу «Голова перших моделей дизайну». Усі приклади в книзі починаються з об'єктно-орієнтованої проблеми і потім закінчуються в дизайні. Вони також розповідають, чому деякі концепції ООП досягають обмежених результатів і чому деякі кращі за інші.

Незважаючи на те, що книга «Шаблон дизайну», ця книга сповнена проблем OOP :-)


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

1

Почнемо з просто: що це за OOP?

Ви можете почати, запитавши про основні умови OOP: абстракція, поліморфізм, успадкування та інкапсуляція. Гарна їжа для роздумів, щоб зігріти їх.

Дайте їм проблему

Далі, представіть їм проблему, яка, ймовірно, включає закономірності. Не обов'язково називати або використовувати шаблони, але їх підхід, швидше за все, дасть певні результати, якщо вони мають досвід роботи в цій галузі.

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

На той час, коли ви закінчили спілкуватися

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

то у вас буде досить гарна ідея, якщо вони зрозуміють, що OOD.

Поставте їм знову ту ж проблему, але цього разу попросіть інший дизайн

Тепер попросіть їх переробити систему без використання шаблону спостерігача (якщо вони про це згадували) - вони можуть обрати підхід до ланцюжка відповідальності або, можливо, шаблону команд. Вас не цікавить, які ви знаєте, що вони розуміють принципи, які вони стосуються.

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


1

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

Так, ви можете попросити їх сісти і намалювати UML, так, ви можете задати їм запитання щодо певних специфік впровадження OOP, щоб побачити, чи можуть вони "вдарити на землю".

Але те, що роботодавцю дійсно потрібно в їх команді, є розум, який розуміє пов'язані з цим поняття і може застосувати їх до будь-яких результатів. Особливості можна дізнатися швидко, коли вбудовуються поняття.


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


0

Щось, здається, працює досить добре, а насправді займає лише кілька секунд: попросіть їх розробити модель об'єкта. Не важливо для чого. Це може бути абсолютно тривіально. Насправді це, мабуть, має бути тривіально, щоб не перетягувати тест без потреби.

Якщо перше, що вони пишуть, - це об'єкт, вони вже випереджають 99% своїх ровесників у розумінні ОО. Якщо перше, що вони пишуть, - це клас, будь ласка, попросіть їх вийти та відправити наступного кандидата та поміркуйте, чому це називається OOP, а не COP.


Хоча я розумію, що ви маєте на увазі, я думаю, що я можу бути трохи обережним, щоб зрозуміти це буквально. Коли я дизайнерські рішення "вільного мислення", я схильний використовувати позначення класів UML, навіть якщо це не те, що я насправді маю на увазі під своїм діаграмуванням.
Кен Хендерсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.