Прибытие от C до [закрытого] C++

ПРИВЕТ все. Я недавно запустил новое задание, где я, как предполагается, работаю с C++ / я делал программирование на языке C в течение прошлых 5 лет. Я ищу способы получить меня до допустимого уровня в ООП. Я имею все фундаментальные понятия C++ и ООП, но не имею большого опыта фактической разработки класса. То, что я действительно ищу, является способами изучить библиотеку классов, разрабатывая, поскольку я буду работать в команде, которая пишет библиотеки C++ для других программистов для использования. Предложите принципы как "присвоение ответственности", которое может помочь мне разработать классы в целом.

12
задан Ozan 21 December 2009 в 07:53
поделиться

12 ответов

Дайте взгляд Бобу Мартину Принципы SOLID :

  • S RP Принцип единой ответственности: класс должен иметь ее, и только одна причина для изменения.
  • O CP Принцип открытости и закрытости: вы должны иметь возможность расширять классы поведение, не изменяя его.
  • L SP Принцип подстановки Лискова: Производные классы должны быть заменяемые на их базовые классы.
  • I SP Принцип разделения интерфейса: сделайте мелкозернистый интерфейсы, которые зависят от клиента.
  • D IP Принцип инверсии зависимостей: зависит от абстракций, а не от на конкрециях.
14
ответ дан 2 December 2019 в 03:32
поделиться

Я знаю, что это не тот ответ, который вы искали; это больше похоже на расширение других ответов (уже сделано и еще впереди). Я подумал, что добавлю кое-что общего ...

  • Напишите одно объявление класса для каждого файла .hpp, одно определение класса для каждого файла .cpp. Назовите файлы, как класс, который они содержат. (Удивительно и досадно обнаружить, как много кода не соответствует этому основному правилу.)
  • Имейте в виду, что C ++ - это многопарадигмальный язык. Некоторые вещи лучше решить без иерархии классов. (Некоторые вещи требуют шаблонов, некоторые лучше всего делать в старом добром процедурном стиле.)
  • Узнайте о библиотеках Boost и о том, как они работают. Они являются хорошей демонстрацией хорошо написанного C ++, особенно со стороны пользовательского интерфейса. И они также полезны в вашей повседневной работе.
  • Прочтите «Эффективный C ++», «Более эффективный C ++» и «Эффективный STL» Скотта Мейерса. Если сомневаетесь, просто возьмите первый, и вы поймете, почему вам следует прочитать два других самостоятельно.

Не удержался от этих основ, увидев новичка в языке, который на самом деле просит совета перед тем, как попасть в жребий вредных привычек. ; -)

12
ответ дан 2 December 2019 в 03:32
поделиться

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

1
ответ дан 2 December 2019 в 03:32
поделиться

В зависимости от того, как ориентирована ваша новая работа на STL, вас либо похвалят, либо расстреляют за чтение: Современный дизайн C ++ Александреску.

Даже если вы не используете в нем какие-либо шаблоны, это откроет вам новый мир C ++.

Я бы поставил эту книгу второй в вашем списке для чтения после нескольких книг Мейерса. Александреску довольно ... напряженный.

1
ответ дан 2 December 2019 в 03:32
поделиться

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

Я обнаружил, что C ++ - отличный инструмент, но только после того, как я действительно научился его использовать. Прочтите все ссылки, предложенные здесь другими, и ничто не заменит практику!

3
ответ дан 2 December 2019 в 03:32
поделиться

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

Большинство «принципов ООП» легко сводятся к абсурду, если вы попытаетесь разработать программу, следуя их точно. Другое дело - рефакторинг.

В противном случае убедитесь, что вы действительно знаете C ++ и STL. Хорошо это или плохо, но STL - это то, что ожидается от кода C ++.

1
ответ дан 2 December 2019 в 03:32
поделиться

См. Эту ссылку. Этот PDF-файл состоит из «Принципов проектирования и Шаблоны проектирования" http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf

Ссылка выше вам очень поможет.

1
ответ дан 2 December 2019 в 03:32
поделиться

Недавно я тоже начал работать с C ++, и вот что я сделал: Сначала я получил книгу C ++ в действии от коллеги и прошел через ее часть «Язык», выполняя все упражнения. Глава «Методы» также важна.

Затем, то, что мне больше всего помогло, я думаю, это чтение большей части уже написанного моей командой кода и попытки понять причину всего в нем. Если члены вашей команды умеют хорошо кодировать, это поучительно. И в любом случае, это определенно поможет вам понять цель и методы вашего проекта, а также то, что от вас ожидается.

Я считаю, что вам все равно придется читать часть кода проекта (чтобы использовать библиотечные функции , реализовать аналогичные функции или добавить к существующему коду), но иногда люди пропускают эту часть или делают это очень поверхностно.

0
ответ дан 2 December 2019 в 03:32
поделиться

Чтобы стать специалистом по C++, потребуется несколько лет. В этом помогут книги, которые были предложены. Я также предлагаю вам прочитать Исключительную серию Херба Саттера на С++.

На короткий срок вы должны найти наставника на С++, который поможет вам освоиться в новой компании. У каждой компании своя "культура" вокруг С++. Дос и не дос. Это может быть более актуально для вашей работы, чем то, что вы читаете. Например, ваша компания может не использовать STL, так что обучение может оказаться всего лишь академическим упражнением. Многие компании практикуют программирование "Cargo Cult" - в данном случае, избегая мощных, но пугающих особенностей языка - так что вы можете быть разочарованы тем, что не можете использовать то, что вы узнали из книг.

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

.
1
ответ дан 2 December 2019 в 03:32
поделиться

Проектирование иерархий классов C++ для использования другими - это минное поле. Настоятельно рекомендую прочитать о некоторых распространенных подводных камнях при проектировании классов. Две книги, которые я предлагаю:

  • C++ Стандарты кодирования (Херб Саттер и Андрей Александреску). Упакованная конкретными примерами того, как легко создавать нужные классы.
  • Effective C++ (Скотт Майерс). Как писать корректный С++, начиная с перехода от Си к Си++. Классика.
1
ответ дан 2 December 2019 в 03:32
поделиться