Как стать хорошим в объектно-ориентированном анализе и дизайне (OOAD)?


26

Стать хорошим анализатором и дизайнером может очень помочь разработчику. Но для этого есть определенные препятствия. Не все заинтересованы в OOAD, и не каждый, кто интересуется, знает путь. Должен ли хороший OOAD знать несколько языков OO? Или он / она провалил проекты? Как можно стать хорошим OOAD?

Ответы:


34

Люди, которые не заинтересованы, создают свои собственные препятствия. Я не могу беспокоиться об этом.

Для тех, кто не знает пути, я предлагаю:

  • Я обнаружил, что каждый язык OO, который я изучаю, делает меня лучшим разработчиком OO. Многое можно перенести с каждого языка на другой, если вы найдете сообщество.
  • Вы учитесь больше на неудачах, чем на успехах, но стараетесь делать это в свое время. Профессионально доверяйте тем, у кого больше опыта, хотя бы иногда, но не бойтесь спрашивать «почему?».
  • Изучите все пять принципов SOLID и поймите, почему они существуют. Ни одно из них не является правилом, но они являются хорошим руководством, когда вы потерялись.
  • Test Driven Development значительно улучшила мои навыки проектирования ОО, чем все, что я когда-либо изучал.
  • Вы не будете в лучшем положении, пока вы не перешли от низшей подготовки к чрезмерной, а затем нашли правильный баланс (ближе к последнему).
  • На самом деле, поцарапайте это, вы никогда не будете так хороши, как вы будете два года спустя.
  • Прочитайте много книг и блогов, но не принимайте ничего как Евангелие. Эта отрасль еще не нашла и, возможно, никогда не найдет идеального пути.
  • Обязательно изучайте шаблоны проектирования, но не ищите места для их использования, просто используйте их как посредник в общении.

Надеюсь, что это поможет.


1
Хороший список @pdr. +1
Саид Нимати

5
+1 «до сих пор не нашел и, возможно, никогда не найдет идеальный путь».
ocodo

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


Спасибо У меня есть вопрос для твердого обсуждения programmers.stackexchange.com/questions/155852/…
LCJ

5

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

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

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

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

ИМХО, если вы не понимаете или не желаете изучать ОО, вы будете недостаточно экипированы на поле битвы жизни. Все больше и больше компаний используют новые языки OO. Я не вижу причин не знать модель OO в этот день.

В зависимости от того, как человек учится, это зависит от того, как он хочет изучить модель. Лично я учусь лучше всего, когда кто-то учит меня, и поэтому посещение занятий по Java I и Java II действительно имело большое значение для меня. Я бы порекомендовал пройти факультатив по программной инженерии в колледже или просто выйти в интернет и поискать учебные пособия, если у вас нет доступа к курсам колледжа или вы хотите учиться в свободное время.

Когда я вспоминаю, как мне это описали, я говорю; яблоко - это яблоко, а апельсин - это апельсин. Да, они оба падают с деревьев, но это два совершенно разных плода, и в этом ваша гармония.


1
Вы имели в виду неудачу с функциональным программированием или неудачу с процедурным программированием?
Эндрю Гримм

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

То есть вы определенно имели в виду функциональное программирование, а не процедурное программирование?
Эндрю Гримм

Не ОО программирование.
Стайлер

2
Я бы определенно предложил отредактировать это, так как не-OO! = Функционал в любом случае. Вещи могут быть и тем и другим.
Маг

0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.