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

Сколько классов должен программист помещать в один файл?

На вашем объектно-ориентированном языке какие руководящие принципы вы придерживаетесь для группировки классов в один файл? Вы всегда даете каждому классу отдельный файл? Вы объединяете тесно связанные классы? Вы когда-нибудь задавали пару реализаций интерфейса в одном файле? Вы делаете это в зависимости от того, сколько строк кода может быть реализовано или как "загромождено" оно может выглядеть для пользователя класса? Или пользователь предпочел бы иметь все на одном месте?

4b9b3361

Ответ 1

Лично я предлагаю один класс для каждого файла, если вторичные классы не являются частными для основного класса в файле. Например, вложенные классы в С# останутся в родительском классе, но классы полезности, которые могут быть полезны в другом месте, будут разбиты на их собственный файл или даже пространство имен.

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

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

Ответ 2

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

Ответ 3

1 класс = 2 файла. Для .h и .c, вам очень повезло:)

Ответ 4

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

В С# и Java люди склонны придерживаться одного файла для каждого класса.

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

В С++ реализация класса отделена от определения класса, поэтому каждый класс {/body/} меньше, чем на другом языке, и это означает, что классы более удобны для группировки в одном файле.

В С++, если вы пишете библиотеку (например, стандартную библиотеку шаблонов), вы можете поместить все классы в один файл. Пользователям нужно только включить один заголовочный файл, и тогда они получат все классы, поэтому с ними легче работать.

Там баланс. Ответ - это то, что легче всего понять и поддерживать. По умолчанию имеет смысл иметь один класс для каждого файла, но есть много случаев, когда более практично работать со связанным набором классов, если они определены в одном файле.

Ответ 5

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

Я отмечаю, что на данный момент я пишу код в основном на Python, и это влияет на мой дизайн. Python очень гибкий в том, как я могу разделить материал на модули и имеет хорошие инструменты для управления пространствами имен вещей. Например, я обычно помещаю весь код для приложения в модуль Python (каталог с __init__.py) и имеет модуль импорта конкретных имен из подмодулей. API-интерфейс выглядит примерно как applib.PluginManager, а не applib.pluginstuff.PluginManager.

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

Ответ 6

Один класс = один файл. Всегда. Кроме того, когда один класс = несколько файлов в С# или класс содержит внутренние классы и т.д., Конечно;)

Ответ 7

Один из файлов - наш стандарт. Единственное исключение состоит в том, что для класса и его типизированной коллекции мы помещаем их вместе.

С течением времени я пришел, чтобы переодеться, что "маленький класс" всегда имеет тенденцию расти. И тогда вы захотите разбить их, сбив с толку всех остальных в команде (и себе).

Ответ 8

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

Ответ 9

Один класс для каждого файла кажется стандартным. Именно так я обычно и делаю это.

Было несколько раз, когда я отклонился от этого. В частности, когда меньший класс является членом другого класса. Например, при разработке структуры данных я бы, скорее всего, реализовал класс "node" в том же файле, что и класс "bigstructure".

Ответ 10

На вашем объектно-ориентированном языке какие рекомендации вы придерживаетесь для группировки классов в один файл?

Это зависит. В командной работе я стараюсь следовать командным стандартам; в сольной работе я больше склоняюсь к чему-нить.

В сольной работе, затем...

Вы всегда даете каждому классу отдельный файл? Вы объединяете тесно связанные классы? Вы когда-нибудь задавали пару реализаций интерфейса в одном файле?

Нет. Иногда. Да.

Выполняете ли вы это на основе того, сколько строк кода может быть реализовано или как "загромождено" оно может выглядеть для пользователя класса? Или пользователь предпочел бы иметь все на одном месте?

В основном он основан на:

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

Ответ 11

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