Организация большого проекта C ++ - PullRequest
3 голосов
/ 08 апреля 2011

Должен ли весь код C ++ в проекте быть инкапсулирован в один класс, а main просто вызывает этот класс? Или основная функция должна объявлять переменные и классы.

Ответы [ 6 ]

11 голосов
/ 08 апреля 2011

Если вы собираетесь построить большой проект на C ++, вам следует как минимум прочитать Large Scale C ++ Software Design от Джона Лакоса об этом.Он немного староват, но звучит так, как будто вы могли бы извлечь из него пользу.

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

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

1 голос
/ 08 апреля 2011

В C ++ вы должны избегать помещения всего проекта в один class, независимо от того, большой он или маленький. В максимуме вы можете попробовать положить его в 1 или 2 namespace (который может быть разделен по файлам). Преимущество наличия нескольких классов,

  1. Лучше ремонтопригодность вашего кода
  2. Помещение классов в несколько файлов .h и .cpp (т.е. небольших модулей) поможет вам быстрая отладка
  3. Если весь код в одном классе и где-то сделаны изменения, тогда нужно скомпилировать весь проект. Вместо этого, если проект находится в разных модулях, можно просто скомпилировать модуль, в котором вносятся изменения. экономит время .
1 голос
/ 08 апреля 2011

Если вы можете поместить весь свой проект в один класс, не сходя с ума, ваше определение «большой» может отличаться от того, что здесь делают большинство людей. Это хорошо - просто имейте в виду, когда вы спрашиваете людей о «большом» проекте на С ++, они будут предполагать, что вы говорите о чем-то, что требует нескольких человеко-лет.

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

Веселись и не бойся немного поэкспериментировать.

1 голос
/ 08 апреля 2011

Если этот класс действительно имеет смысл, конечно, но, по крайней мере, IME, это довольно редкое исключение, а не общее правило.

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

Если вы действительно имеете в виду «должен ли весь код содержаться в одном классе?», То ответ почти наверняка звучит как «нет», за исключением действительно крошечных проектов. Большая часть дизайна классов в C ++ (и большинстве других ОО-языков) совершенно бессмысленна, если весь код находится в одном классе.

1 голос
/ 08 апреля 2011

для больших проектов C ++ вы должны создать много классов!

main должна просто начать работу (возможно, выполнить несколько вспомогательных операций), а затем вызвать класс, который запустит остальную часть системы

0 голосов
/ 08 апреля 2011

Нет! Каждая пара файлов заголовка / реализации должна представлять один класс. Размещение большого проекта в одном файле - это верный путь к катастрофе: проект станет непригодным для эксплуатации, а компиляция займет много времени. Разбейте ваш код на части подходящего размера.

Основная функция не должна объявлять классы, скорее, файл, который она содержит (часто называемый чем-то вроде main.cpp, driver.cpp, projectname .cpp), должен использовать директивы #include, чтобы сделать компилятор прочитайте объявления в заголовочных файлах. Подробнее об отдельной модели компиляции в C ++.

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

...