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

Исходя из C в С++

HI все. Недавно я начал новую работу, где я должен работать с С++/Я занимаюсь программированием на языке C за последние 5 лет. Я ищу способы довести меня до приемлемого уровня в ООП. У меня есть все основные понятия С++ и OOP, но у меня нет большого опыта реального проектирования классов. То, что я действительно ищу, - это способы изучения дизайна библиотеки классов, поскольку я буду работать в команде, которая пишет библиотеки С++ для использования другими программистами. Пожалуйста, предложите такие принципы, как "назначение ответственности", которые могут помочь мне в разработке классов в целом.

4b9b3361

Ответ 1

Дайте ссылку на Боба Мартина SOLID принципы:

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

Ответ 2

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Большинство "принципов ООП" легко сводятся к абсурду, если вы попытаетесь точно проследить за ними программу. Рефакторинг - это еще одна история.

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

Ответ 7

Разработка иерархий классов С++ для других пользователей - это минное поле. Я бы очень рекомендовал прочитать некоторые из распространенных ошибок в дизайне классов. Две книги, которые я предлагаю:

  • Стандарты кодирования С++ (Херб Саттер и Андрей Александреску). Упакован полный конкретных примеров того, как правильно создавать классы в удобном для понимания способом.
  • Эффективный С++ (Скотт Майерс). Как написать правильный С++, начиная с перехода с C на С++. Классика.

Ответ 9

В зависимости от того, как STL ориентируется на вашу новую работу, вы получите либо похвальную, либо застреленную за чтение: Modern С++ Design от Alexandrescu.

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

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

Ответ 10

Прошло несколько лет, чтобы овладеть С++. Предлагаемые книги помогут. Я также предлагаю, чтобы вы читали Исключительные серии С++ с Herb Sutter.

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

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

Ответ 12

Недавно я начал работать с С++, и это то, что я сделал: Во-первых, я получил книгу С++ In Action от коллеги и прошел через часть "Язык", выполняя все упражнения. Глава "Техника" также важна.

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

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