Как создать объектно-ориентированные навыки?

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

Например, мне сложно было разработать конвертер валют.

Мои вопросы к SO:

  • Опыт работы с дизайном могут быть приобретены?
  • Будут изучать книги/блог/материал через интернет и т.д. помощь?
  • Требуется ли домен? знание приложения, являющегося разработаны?
  • Знание шаблонов дизайна, принципов?
  • Изучение книги "Завершить код"
  • Необходимы навыки решения проблем?

Короче говоря, учитывая проблему, я просто хочу решить ее объектно-ориентированным способом.

Ответ 1

Вы должны сделать плохой дизайн OO, прежде чем сможете сделать хороший дизайн OO.

В фантастическом проекте возьмем конвертер валют и медленно перемещаем код для использования концепций ОО. OO - это творческий процесс: нет неправильных ответов, но хуже и лучше. В основном, когда ваш код сохраняет функциональность и становится короче/проще для чтения, это лучше. Когда он получает гибкость, не добавляя больше кода, это тоже лучше. Но это творческий процесс. Используйте систему управления версиями, такую ​​как GIT, чтобы иметь возможность "отменить", попробуйте прочесть и СДЕЛАТЬ ОШИБКИ. Дизайн OO - это процесс.

  • Опыт работы с дизайном могут быть приобретены?

Да.

  • Будет ли обучение книги/блог/материал через Интернет и т.д. помочь?

Да.

  • Требуется ли домен? знание приложения, являющегося разработаны?

Да, но я думаю, что знание домена слишком хорошо может испортить хороший дизайн. При работе с программистами Airline я заметил, что известные, неоспоримые абстракции ( "билет", "резервирование" ) тормозили хороший дизайн OO. Ваша модель OO не модель реального мира. Это модель для вашей программы.

  • Знание шаблонов проектирования, принципы?

Да, лучше всегда, всегда.

  • Изучение 'Code Complete' книга?

Многие говорят, что это отличная книга. Но вы читали Итало Кальвино? Или Хорхе Луис Борхес? Всевозможные книги могут помочь.

  • Необходимость решения проблем навыки?

Нет. Вы получаете навыки решения проблем, применяя OO (или любую другую парадигму).

Ответ 2

Совершенно очевидно, что если вы хотите чему-то научиться, вам нужно практиковать. Если вы хотите узнать, как стать лучшим программистом, практическое программирование поможет. И если вы хотите узнать, как стать лучшим программистом OO, практика OOP, очевидно, поможет вам больше всего. Умение решать проблемы и знания домена - это то, что должен иметь любой хороший программист, а не только для ООП. И есть много хороших книг, они помогут вам, возможно, если вы не являетесь человеком, который "не менее ориентирован на то, чтобы стать чем-то".

Здесь - список книг по программированию. Из этого списка "Шаблоны проектирования" и "Рефакторинг", похоже, очень сфокусированы на ООП (я не читал "Первые образцы дизайна", возможно, это тоже). И книга, которую я больше всего изучил (ООП, функциональные и другие концепции), я думаю, это "Структура и интерпретация компьютерных программ".

Ответ 3

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

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

Ответ 4

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

Ответ 5

  • По опыту можно приобрести навыки дизайна?

Опыт и врожденные способности - некоторые люди просто не могут этого сделать.

  • Будут ли изучать книги/блог/материал через Интернет и т.д.?

Конечно. Но они не превратят вас в бога ОО.

  • Требуется ли знание домена для разрабатываемого приложения?

Либо вам нужно это получить, либо вам нужен доступ к тому, кто это делает.

  • Знание шаблонов дизайна, принципов?

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

  • Изучение книги "Завершить код"

Я щелкнул по нему в книжном магазине один раз.

  • Необходимы навыки решения проблем?

Очевидно, да, я бы подумал.

Ответ 6

Я предлагаю вам изучить Smalltalk. ДА.. Я знаю, что это немного устарело, но я думаю, что это единственная среда для экспериментов, оценки и "развлечения" с ориентацией объектов.

В Smalltalk все из IDE является объектом. Вы можете думать об объектах, не тратя время на такие детали, как заголовок/исходные файлы, компиляция и т.д.

Загрузите копию Squeak Smalltalk (http://www.squeak.org/) и начните практиковать

Ответ 7

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

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

Ответ 8

Чтобы набрать свои очки - я думаю, что 2-6 отлично, и я думаю, что любой, кто пишет код, должен прочитать код в полном объеме, даже если его не OO. Но, к сожалению, кажется, что пункт 1 является самым важным!!!

Я думаю, что проблема в нашей профессии. Мы учимся на работе, а не на изучении отличного кода. Таким образом, по сути, все реконструируют колесо с точки зрения обучения.

Ответ 9

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