Будучи основным разработчиком на протяжении нескольких лет, приложения для кодирования, видя диаграммы классов, диаграммы последовательностей, я решил улучшить себя, сделав следующий шаг проектирования.
Поскольку я разработчик 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
Кроме того, вы можете использовать модульное тестирование, как инструмент для улучшения дизайна класса.