Поиск

Стандарты соглашения по назначению имен

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

Венгерская нотация

Венгерскую нотацию использует большинство разработчиков на С и C++ (включая и М1сго5ой'овцев). Эта система формирования имен создана сотрудником Microsoft Чарльзом Симони (Charles Simonyi). В начале 1980-х Microsoft приняла на вооружение систему, основа которой взята из докторской диссертации Симони "Meta-Programming: A Software Production Method" ("Мета-программирование: способ производства программного обеспечения").

Согласно венгерской нотации к имени переменной добавляется приставка, показывающая ее тип. Однако не каждый тип имеет свой стандартный префикс. Кроме того, появление новых языков и новых типов требует создания новых приставок. Поэтому немудрено, что со временем мы станем сталкиваться с префиксами, которые никогда нам раньше не встречались. (Между прочим, термин "Венгерская нотация" как бы показывает, что префиксы делают переменные такими, как будто они написаны на языке, отличном от английского; к тому же г-н Симонии родом из Венгрии.)

Возможно, наиболее важной публикацией, агитирующей в пользу венгерской нотации, была первая книга, которую прочитал почти каждый разработчик под Windows и OS/2. Это книга Чарльза Петцольда (Charles Petzold) "Programming Windows" (Microsoft Press), в которой один из диалектов венгерской нотации применяется во всех демонстрационных приложениях. Более того, и Microsoft пользуется этой системой обозначений в собственных разработках. С MFC родилась очередная серия специфичных для C++ префиксов, продлив жизнь венгерской нотации. Так почему бы и нам не продолжить применение венгерской нотации? Тем более что эта система обозначений удобна в ситуациях, где желательно знать тип и/или область видимости применяемой переменной. Однако, как вы узнаете в главе 4, все типы в С# являются объектами и основаны на .NET-классе System.Object. Поэтому все переменные имеют основной набор функциональных возможностей и поведенческих характеристик. Поэтому венгерская нотация в среде .NET теряет свою привлекательность.

ПРИМЕЧАНИЕ
Любопытные и те, кто страдает от бессонницы, могут почитать материалы о венгерской нотации по адресу http://msdn.microsqft.com/library/techart/hunganotat. htm.

Стили "Паскаль" и "верблюд"

Разработчики С# не связаны "жестким" стандартом, но из уже созданного ими видно, что они следуют набору условных обозначений, придуманных сотрудником Microsoft Робом Кэроном (Rob Caron), предложившим при обозначении переменных использовать смесь техник "Паскаль" и "верблюд". В статье "Coding Techniques and Programming Practices" ("Технологии и практика программирования"), имеющейся в MSDN ( http://msdn.microsoft.com/library/techart/cfr.htm) , он предлагает для имен методов применять технику "Паскаль", где первый символ изображается прописной буквой, и для имен переменных — технику "верблюд". В демо-приложениях этой книги я так примерно и поступаю. Поскольку же в С# есть не только переменные и методы, в следующих разделах вы найдете перечень других элементов языка и соответствующих им нотаций.

ПРИМЕЧАНИЕ
Дополнительные сведения по этой теме см. в руководстве по .NET Framework, включенному в документацию по .NET Framework SDK, в разделе .NET Framework Developer Specificati-ons\.NET Framework Design Guidelines\Naming Guidelines.

Пространства имен

Название пространства имен должно соответствовать имени вашей компании или названию программы, и первая буква должна быть прописной, например, Microsoft. Если же вы занимаетесь распространением компонентов ПО, назовите пространство имен верхнего уровня именем вашей компании, а для каждого продукта создайте пространство имен следующего уровня со своими вложенными типами, исключив тем самым конфликты имен с другими продуктами. Пример тому есть в .NET Framework SDK: Microsoft. Win32. Такая техника приводит к нескончаемым цепочкам имен, однако благодаря директиве using пользователям вашего кода не придется вводить их целиком. Так, если компания Trey Research распространяет два продукта — электронную таблицу (grid) и базу данных (database), пространства имен будут иметь названия Тгеу-Research.Grid и Trey Research. Database.

Классы

Поскольку объекты являются как бы живыми, дышащими организмами, наделенными некоторыми способностями, в названиях классов применяйте имена существительные, которые описывают предметную область класса. Если класс представляет более общее понятие (т. е. не определяется только спецификой предметной области), например, при создании типа SQL-строки, используйте технику "Паскаль".

Методы

Применяйте технику "Паскаль" для всех методов. От методов ожидают выполнения некоей работы. Поэтому пусть в именах методов отражается то, что они делают. Например, Printlnvoice или OpenDatabase.

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

if (IsWorkStationLocked) ...
Аргументы метода

Применяйте технику "Паскаль" для всех аргументов. Называйте аргументы выразительно, чтобы при работе IntelliSense пользователь мог сразу понять, для чего нужен каждый аргумент.

Интерфейсы

Применяйте технику "Паскаль" для всех интерфейсов. Стало традицией добавлять к имени интерфейса прописную букву "I", например, Кот-рагаЫе. (Это соглашение, пожалуй, единственное в С#, хоть как-io соответствующее венгерской нотации.)

Многие разработчики применяют одни и те же правила формирования имен и для интерфейсов и для классов. Однако между этими элементами существует фундаментальное философское различие. Классы представляют собой инкапсуляцию данных и функций, работающих с этими данными. Интерфейсы же представляют поведение объекта. Делая реализацию интерфейса, вы заявляете о готовности некоего класса продемонстрировать такое поведение. Поэтому в именах интерфейсов принято употреблять имена прилагательные. Например, интерфейс, объявляющий методы упорядочения данных, можно назвать таким образом: ISerializable.

Члены класса

Для разработчиков на С# это, пожалуй, самый неприятный вопрос. Те, кто работал с C++ и MFC, привыкли добавлять к именам членов приставку т_. Однако я советую вам обратиться к технике "верблюда", в которой первая буква не является прописной. Если у вашего метода есть аргумент Foo, то согласно этой технике вы сможете отличить его от внутреннего представления переменной, создав внутренний член/оо.

Не стоит добавлять к имени переменной имя класса. Пусть, например, есть класс Author. Можно создать член этого класса с именем Author-Name, но тогда его полное имя будет Author.AuthorName. Тогда как достаточно назвать этот член просто Name.

Подведем итоги

Написание, компиляция и выполнение Сопрограммы — первый важный шаг в освоении языка. Вообще-то неважно, чем вы редактируете исходные файлы, однако лучше всего воспользоваться преимуществами редактора и среды разработки, предназначенных специально для С#. Знание параметров и ключей С#-компилятора позволит вам управлять процессом создания MSIL-кода, генерируемого компилятором. Этот код можно изучить с помощью такого инструмента, как ILDASM из пакета Microsoft .NET Framework SDK.

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