Имена классов, начинающиеся с C - PullRequest
10 голосов
/ 19 февраля 2010

MFC имеет все имена классов, начинающиеся с C. Например, CFile и CGdiObject. Кто-нибудь видел, чтобы его использовали в другом месте? Существует ли официальное руководство по соглашению об именах от Microsoft, которое рекомендует этот стиль? Идея возникла из MFC или это был какой-то другой проект?

Ответы [ 12 ]

17 голосов
/ 19 февраля 2010

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

Например, btnSubmit можно описать кнопкой с именем Submit (которая будет сопровождаться lblSubmit для метки рядом с кнопкой)

Но такие вещи, как CMyClass для класса и uiCount для беззнакового целого числа с именем count, не помогают программистам, а просто приводят к чрезмерной расточительности ввода.

15 голосов
/ 19 февраля 2010

Нечто похожее используется в Symbian C ++, где существует соглашение:

T-классы являются «значениями», например, TChar, TInt32, TDes

R-классы являются дескрипторами ядра (или других) ресурсов, например RFile, RSocket

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

Классы C - это почти все остальное, и они происходят от CBase, в котором есть кое-что, что может помочь в обработке ресурсов.

HBufC существует главным образом для создания запутанных сообщений на форумах Symbian, и его собственный префикс - это только начало. H означает «да?» Или, возможно, «Хо, хо! У тебя нет STL!» ; -)

Это близко по духу к венгерской нотации Apps, а не к венгерской нотации Systems. Префикс говорит вам кое-что о классе, который вы можете найти в документации, но который вы не знали бы иначе. Весь смысл назначения чего-либо в программировании состоит в том, чтобы предоставлять такие подсказки и напоминания , в противном случае вы просто назвали бы свои классы "Class001", "Class002" и т. Д.

Systems Hungarian просто сообщает вам тип переменной, которую IMO не может не волновать, особенно в языке, подобном C ++, где типы имеют тенденцию либо постоянно повторяться, либо полностью скрываться параметрами шаблона. Его аналог при именовании типов - это практика Java именования всех интерфейсов с помощью I. Опять же, меня это не очень радует (как и стандартные библиотеки Java), но если вы собираетесь определить интерфейс для каждого класса В дополнение к интерфейсам, которые фактически используются для полиморфизма в не тестовых ситуациях, вам нужен способ различать их.

13 голосов
/ 19 февраля 2010

Это был старый стиль кодирования C ++, и MFC, вероятно, был одним из последних, кто использовал его.

Обычно это просто соглашение C ++ (и, возможно, нескольких других языков), и, следовательно, оно начало терять популярность, так как языки стали более совместимыми через COM и затем .NET.

Вы все еще видите, что это двоюродный брат, префикс "I" для интерфейсов, довольно часто. Мне всегда было интересно, что «Я» выжило, когда умер «С», но это, вероятно, было связано с тем, что интерфейсы использовались так сильно в совместимости COM.

6 голосов
/ 19 февраля 2010

Я помню, что компиляторы Borland связывались с библиотеками, где имена классов начинались с 'T'. Вероятно, для "типа":)

5 голосов
/ 19 февраля 2010

Хотя MFC и множество программного обеспечения, написанного для Windows, использовали соглашение «C» для классов, обычно вы не найдете последнее в программном обеспечении, написанном для платформ UNIX. Я думаю, что эта привычка очень сильно поощрялась Visual C ++. Я помню, что Visual C ++ 6.0 добавлял префикс «C» к любым классам, созданным с помощью мастера классов.

5 голосов
/ 19 февраля 2010

Несколько лет назад соглашение об именах имело решающее значение для определения класса, типа даже группировки класса. Не забывайте тогда, что не было никакого пространства имен и / / ограниченного числа значений. C - это форма венгерской нотации, но она, безусловно, стала популярной у MFC. Borland и Delphi использовали T - в качестве префикса для Типа

4 голосов
/ 19 февраля 2010

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

Интересно, что это, очевидно, противоречиво не только вне MS, но и внутри .

2 голосов
/ 19 февраля 2010

Смотри здесь: http://www.jelovic.com/articles/stupid_naming.htm для длинной статьи по этому вопросу.

0 голосов
/ 14 сентября 2018

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

0 голосов
/ 14 августа 2011

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

...