Подтвердить что ты не робот

Как развивать навыки * реальной жизни?

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

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

Есть ли у кого-нибудь хорошие рекомендации (книги, онлайн-руководства, блоги, проходы и т.д.) для принятия следующего шага в развитии твердых навыков ООП?

Я работаю в основном в .NET(visual basic), но я приветствую предложения, которые включают различные платформы.

4b9b3361

Ответ 1

Прочитайте Рефакторинг Мартина Фаулера и примените его к своей собственной работе.

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

Ответ 2

Рассмотрите возможность изучения шаблонов проектирования. Хотя кажется, что они обычно не используются в корпоративных приложениях (я видел их более часто используемыми в API и Framework, чем встроенные в корпоративный код), они могут применяться для упрощения или более простого обеспечения программного обеспечения во многих ситуациях, если только разработчики знали, как их применять.

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

Существует Head First book о шаблонах дизайна, который преподает концепцию довольно просто, хотя, если вам нужна книга, которая действительно охватывает шаблоны проектирования в деталях, просмотрите "Книга с четырьмя шаблонами дизайна" , которая в основном делает основные шаблоны дизайна и упоминается почти каждый раз, когда тема воспитывается.

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

EDIT:
Я также хочу добавить, вы должны проверить книгу Code Complete 2. Это очень влиятельная книга в мире разработки программного обеспечения. Он охватывает множество различных концепций и теорий. Я узнаю что-то новое каждый раз, когда я его читаю. Это такая хорошая книга, что, если я читаю ее каждые 6 месяцев в году, я смотрю на нее с другой точки зрения, которая делает меня лучшим программистом, просто перечитав его. Независимо от того, насколько вы думаете, что знаете, эта книга заставит вас понять, насколько мало вы знаете. Это действительно отличная книга. Я не могу подчеркнуть, насколько вы должны владеть этой книгой.

Ответ 3

Если у вас уже есть основы, я считаю, что только опыт поможет вам в дальнейшем. Вы говорите, что не уверены, правильно ли вы применяете принципы, но нет ни одного правильного пути. Код, который вы пишете сегодня, вы увидите через 6 месяцев и задаетесь вопросом, почему вы написали его таким образом, и, вероятно, знаете о более чистом способе его выполнения. Я также гарантирую, что через 10 лет вы все равно будете изучать новые методы и приемы. Не беспокойтесь слишком много об этом, он придет, просто прочитайте столько, сколько сможете, и попробуйте применить то, что вы читаете в небольших кусках.

Ответ 4

В настоящее время я нахожусь на полпути через следующую книгу:

http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062

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

Я тоже прочитал книгу " Head First" и почувствовал, что мне гораздо лучше, если вы ее прочитали.

После нескольких лет опыта работы в мире, я теперь просматриваю книгу Крейга Лармана, которую я рекомендую быть совершенным "следующим шагом" для меня.

О присутствии "UML" в названии этой книги:

Если у вас есть положительные чувства или негативные чувства относительно нотации UML, пожалуйста, не позволяйте этому влиять на ваше решение купить книгу (ISBN 0131489062) в любом направлении.

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

Фактически, вот цитата, взятая непосредственно из книги:

Что важно знать, как думать и проектировать в объектах, что является совсем другим и гораздо более ценным навыком, чем знакомство с UML-нотацией. При построении диаграммы нам нужно ответить на ключевые вопросы: каковы обязанности объекта? С кем он сотрудничает? Какие шаблоны дизайна следует применять? Гораздо важнее знать разницу между UML 1.4 и 2.0!

Эта книга иногда кажется, что она "разговаривает" с ведущим архитектором или менеджером проекта. Я хочу сказать, что он предполагает, что читатель имеет значительный контроль над планированием и направлением программного проекта.

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

Ответ 5

Мое ООП-прозрение произошло из книги Грэди Буча, давным-давно. Внезапно я понял, почему объекты хороши.

В то время как полиморфизм холодный, инкапсуляция составляет 75% от того, почему объекты являются прохладными. Это похоже на интерфейс: вы видите кнопки, но не проводку. Перед объектами только самые дисциплинированные кодеры сохраняли свои грязные пальцы от внутренних бит процедур других людей (это называлось "структурированное программирование" ).

Объект упрощает выполнение правильной работы. Наследование и полиморфизм - это небольшие бонусы.

Один из способов узнать об объектах - это прочитать код других народов. Я многому научился, прочитав исходный код для платформы Delphi VCL. Даже просто просмотр документации для Java поможет вам понять, что должен делать один класс объектов и как он предназначен для использования другими объектами.

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

Наслаждайтесь!

Ответ 6

Честно говоря, повторное чтение старых документов Дэвида Парнаса о скрытии информации помогает мне в правильном состоянии. Тематические исследования могут быть не применимы напрямую, но вы должны иметь возможность получить из них полезные обобщения.

Ответ 7

Мое прозрение произошло, когда я попытался реализовать очень сложную задачу (динамически и рекурсивно строить SQL-заявления) в VB6. Лучший способ понять полиморфизм или наследование - это нужно и не сможет его использовать.

Ответ 8

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

Ответ 9

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

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

Ответ 10

Возможно, вам захочется некоторое время прочитать (и написать) несколько Smalltalk. Squeak - это бесплатная реализация, которая может показать вам мощь полностью объектно-ориентированной среды (в отличие от java или .net). Все источники кода библиотеки включены. Сам язык невероятно прост. Вы обнаружите, что java и С# медленно добавляют функции, хорошо известные Smalltalk с 1980 года.

Ответ 11

Tortoise HG - это хорошо разработанная часть программного обеспечения с открытым исходным кодом OO (написанная на Python).

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

После того, как вы поймете, что язык просмотрит программное обеспечение выше, и у вас появятся всевозможные эпифаки.

Ответ 12

Чтобы понять в принципе что-то тщательно, вам нужно иметь приличное знание, по крайней мере, одного уровня абстракции выше и одного уровня ниже него. В случае OO другие упомянули образцы дизайна как слой выше OO. Это помогает понять, почему OO полезно.

Что касается уровня ниже OO, попробуйте некоторое время играть с функциями более высокого порядка/позднего связывания и получить представление о том, как эти относительно простые конструкции используются. Кроме того, попробуйте понять, как OO реализуется под капотом (vtables и т.д.) И как это можно сделать в чистом C. Как только вы оцените ценность использования функций более высокого порядка и позднего связывания, вы быстро поймете, что OO просто удобный синтаксис для передачи вокруг множества связанных функций и данных, на которых они работают.