Хорошие задачи/задачи/упражнения для обучения или улучшения навыков объектно-ориентированного программирования (ООП)

Что представляет собой хороший вызов для улучшения ваших навыков в объектно-ориентированном программировании?

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

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

Решение проблем может быть затем опубликовано в качестве ответов на вопрос "Как..." и связано с этим.

Например:

  • Вызов - реализация стека с последним в первый раз
  • Уровень навыка - начинающий
  • Обоснование - дает опыт работы с объектами

Ответ 1

Навыки построения в объектно-ориентированном дизайне - бесплатная книга, которая может быть полезной. Описание выглядит следующим образом

"Цель этой книги - помочь начинающему дизайнеру, предоставив им последовательность интересных и умеренно сложных упражнений в дизайне OO. Эта книга также может помочь менеджерам повысить уровень комфорта при разработке программного обеспечения OO. приложения, которые мы будем строить, являются шагом выше тривиального и потребуют тщательной мысли и дизайна. Кроме того, поскольку приложения в основном носят рекреационный характер, они интересны и интересны. Эта книга позволяет читателю исследовать процессы и артефакты дизайна OO до крайних сроков проекта сделать хороший дизайн кажутся невозможными".

Ответ 2

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

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

Ответ 3

Вызов: напишите обертку для вашего веб-сайта/сервисного API по выбору на выбранном вами языке, который еще не существует (например, API ZenDesk, написанная на С#). Освободите оболочку как открытый источник для других пользователей.

Уровень навыка: от начального до среднего

Обоснование. Чтобы узнать, как экстраполировать сторонний API веб-сервисов в значимый набор объектов/классов, упростить повторное использование этого API на выбранном вами языке.

Ответ 4

После того, как вы изучили основы, изучите книгу моделей "Банда из четырех".

http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_1? е = UTF-8 & s = книги & QID = 1221488916 & ср = 8-1

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

Ответ 5

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

Ответ 6

Я нашел CRC-карты, чтобы быть достаточно эффективным в обучении, обучении и создании хорошего дизайна OO.

Ответ 7

Конечно, хороший вызов, хотя и менее доступный, чем назначение "начать с нуля", заключается в реорганизации какого-либо существующего кода, который либо не использует наследование, либо не использует его очень сильно, чтобы более эффективно использовать наследование. Процесс рефакторинга будет раскрывать много преимуществ и ошибок, поскольку это, безусловно, имеет для меня мой последний проект. Это также побудило меня понять концепции лучше, чем в прошлых проектах, где я создал свои собственные объектно-ориентированные проекты.

Ответ 8

Задача имеет очень мало общего с тем, что она "ООП", это больше в том, как вы ее оцениваете.

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

Самое главное, следите за существованием сеттеров и геттеров (указывая на то, что вы работаете с значениями из класса и не просите класс работать с его собственными значениями) - или используя "extends" без применения принципа замены Лискова, такие вещи.