| Иерархическая организация имён
Иерархическая организация имён -- Способ описания иерархических объектов в неиерархических средах
Содержание
Введение
На данный момент я уже не могу толком припомнить, откуда возникла идея
иерархической организации имен.
Скорее всего она даже не возникла сразу.
Иерархическая организация имен в программах является выражением моего опыта
составления имен в программах.
Дальше я буду говорить о тех предпосылках, которые подтолкнули меня к
формулировке идеи иерархической организации имен в программах.
Когда вносишь изменения в чужой проект, как-то чувствуешь себя не совсем
уверенно, добавляя туда новые имена: а не использовано ли это имя где-нибудь
еще. При использовании иерархической организации такой неуверенности не может
быть - по имени однозначно определяется не только его назначение, но и место
расположения.
Другой вариант, в котором нам может оказаться полезной иерархическая
организация имен - это когда мы хотим описать некоторый иерархический объект
в неиерархической системе. Сама по себе система не меняется от того,
что мы как-то по особенному составляем имена. Но уже в самих именах мы можем
задать отношения «родитель» - «потомок», описав таким образом иерархические
отношения между соответствующими объектами.
Большинство систем программирования, если в них не использовать объектное
программирование, являются как раз такими неиерархическими средами:
глобальные имена в них рассматриваются как линейный список и не подчинены
никакой иерархии.
Не нужно акцентировать внимание на «если не использовать ООП» и говорить,
что иерархическая организация имен не нужна, потому что можно использовать ООП.
Во-первых, иерархическая организация имен применяется для составления имен не
только в программах, но для описания любых иерархических объектов в
неиерархических средах.
Во-вторых, ООП не всегда доступно и не всегда оправдано.
Почему, например API практически любой по размеру системы - это практически
всегда линейный набор функций? Нет сомнений, что внутри большие системы пишутся
с использованием ООП, но снаружи это - линейный набор функций.
В-третьих, даже с использованием ООП легко могут возникнуть объекты
с огромным количеством методов и свойств. Внутри одного объекта мы все равно
получаем неиерархический линейный список.
В терминах способов представления деревьев в базах данных можно было бы
сказать, что я использую материализованные пути для представления
иерархических объектов.
Можно заметить, что некоторое подобие иерархической организации имен
уже используется, например, в интерпретаторе PHP. Например,
все функции для работы с базой данных MySQL там называются, начиная с префикса
“mysql_”. Все что сделал я - это сформулировал идею,
почему при иерархической организации имен префикс должен быть именно таким,
несколько расширил ограничения, предложив способ составления
префикса имени в случае, если в имени содержится несколько слов,
а так же предложил использовать этот способ организации имен для составления
всех имен в программах.
Иерархическая организация имен в программах позволяет составлять такие имена,
по которым можно однозначно определить, для чего эти имена предназначены;
существует так же и обратная связь - из предназначения можно однозначно
определить, каким будет имя. Как одно из следствий мы получаем то свойство,
что теперь у нас все имена в программах - заведомо уникальны.
Такие имена более понятны и проще запоминаются за счет того, что человеческая
память тоже устроена иерархически: человеку проще запомнить детали, когда он
понимает всю картину в целом. При иерархической организации имен так и
получается, что родительское имя описывает всю картину в целом, а дочерние
имена - это детали.
Основные определения
Имя состоит из слов.
Иерархическая организация имен не лимитирует использование прописных и
строчных букв, способ разделения слов и то, какие слова использовать в
именах. Для иерархической организации важно только то, что слова есть,
и эти слова как-то разделены между собой.
Уровень имени - это количество слов, использованных в этом имени.
Имя А является родительским по отношению к имени Б, если уровень
имени Б больше, чем уровень имени А и первые (слева) слова имени Б совпадают
со словами имени А в том же порядке. Например, имя debug является
родительским для имен debug_info, debug_mode,
debug_log, debug_error_get,
debug_error_set и т.п. Имя debug_error, в свою
очередь, является родительским для debug_error_get,
debug_error_set.
Имя А является дочерним по отношению к имени Б, если имя Б является
родительским по отношению к имени А.
Имена принадлежат одной группе имен, если у этих имен есть некоторое
общее родительское имя.
Это общее родительское имя является именем группы.
Например, имена debug_error_get, debug_error_set
являются именами группы debug_error или группы debug.
Имена debug_info, debug_mode,
debug_log и debug_error
являются именами группы debug.
Мощность группы А - общее количество
имен в этой группе.
Префикс имени - это слово, которое записывается самым первым в имени
и не учитывается при определении уровня,
родства и принадлежности
группе. Префиксы используют, например, для
указания типов переменных или полей: i_count,
b_valid, is_protect. i,
b, is - префиксы.
Смотрите также
Стандарты кодирования PEAR:
http://pear.php.net/manual/ru/standards.php
Соглашения об именах Microsoft:
http://msdn.microsoft.com/library/en-us/Axapta/PSTD/PSTD_Naming_conventions.asp
Гид по оформлению кода Object Pascal. Соглашения об именах:
http://edn.embarcadero.com/article/10280#3.0
| Программное обеспечение | Дизайн сайтов | |