Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 165 166 167 168 169 170 < 171 > 172 173 174 175 176 177 .. 426 >> Следующая

использовании глобальных данных напрямую. Например, вместо
кода if lineCount > MAX JUNES вы сможете, используя метод
доступа, написать if PageFullQ. Это небольшое изменение
документирует цель проверки if lineCount прямо в коде
программы. Оно дает небольшой выигрыш в читабельности, но
постоянное внимание к таким деталям и создает различие между
красиво написанным ПО и наскоро слепленным кодом.
Как использовать методы доступа
Здесь представлена краткая версия теории и практики методов
доступа: Скройте данные в классе. Объявите их с помощью
ключевого слова static или аналогичного, чтобы гарантировать
их существование в единственном экземпляре. Напишите методы,
позволяющие получать и изменять данные. Потребуйте, чтобы код
вне класса использовал эти методы, а не данные напрямую.
Например, если у вас есть глобальная статусная переменная
g_globalStatus, описывающая общее состояние программы, вы
можете создать два метода доступа:
12-403
332 ЧАСТЬ III Переменные
globalStatus.GetO и globalStatus.SetQ, каждый из которых
делает то, что сказано в ее названии. Эти методы обращаются к
переменной, спрятанной внутри класса, заменяющего
g_globalStatus. Остальная часть программы может получать все
преимущества бывшей глобальной переменной, вызывая
globalStatus.Get() и global- StatusSetQ.
Если язык не поддерживает классы, вы все равно можете
Пеаешстиая ссылка Огозниме-
ние доступа к глобальным те- создавать методы доступа для
манипуляции глобальными
репейным, лаже если ваш язык данными. Однако вам придется
устанавливать ограничения
не поддерживает т напрямую, доступа к глобальным данным с
помощью стандартов ко-
- пример программирования дирования, а не встроенных
средств языка,
с использованием языка, а не
на языке (см. раздел 344). (r)от несколько основных принципов
применения методов
доступа для сокрытия глобальных переменных в языках, не
имеющих встроенной поддержки этого.
Требуйте, чтобы весь код обращался к данным через методы
доступа Хорошим соглашением будет начинать имена всех
глобальных переменных с префикса g_, и в дальнейшем требовать,
чтобы никакой код не обращался к переменным с префиксом g_
напрямую, кроме методов доступа к этим переменным. Весь
остальной код работает с этими данными через методы доступа.
Не валите все глобальные данные в одну кучу Если вы сложите
все глобальные данные в одну большую кучу и напишете для них
методы доступа, вы решите проблему глобальных данных, но
утратите некоторые преимущества абстрактных типов данных и
сокрытия информации. Раз уж вы пишете методы доступа, обду-
майте, к каким классам принадлежит каждая глобальная
переменная, и затем упакуйте данные и методы доступа к ним в
этот класс.
Управляйте доступом к глобальным переменным с
помощьюблокировок
По аналогии с управлением параллельным доступом к
многопользовательской базой данных, блокировка требует, чтобы
перед вызовом или обновлением значения глобальной переменной
ее помечали для изменений (check out). После использования
переменную можно освободить (check in). Если пока она занята
(т. е. помечена для изменений), другая часть программы
попытается к ней обратиться, процедура блокировки выводит
сообщение об ошибке или генерирует исключение.
Такое описание механизма блокировок опускает многие
Перекрестная ссылка 0 планировании различий между ра&ь тонкости
в написании кода, полностью поддерживающего
чей и промышленной версиями параллельное выполнение. По этой
причине упрощенные
программы см. подраздел <0- схемы блокировок вроде этой
наиболее полезны на стадии
планируйте удаление ошдоч- разработки. Пока схема тщательно
не продумана, она ско-
м ^ее всего не будет достаточно надежна для работы в
про-
же раздел . . мышленной версии. При вводе программы в
эксплуатацию
такой код должен быть заменен на более безопасный и вы-
полняющий более элегантные действия, чем вывод сообщений об
ошибках. Так, при обнаружении ситуации, когда несколько частей
программы пытаются заблокировать одну и ту же глобальную
переменную, он мог бы записать сообщение об ошибке в файл.
ГЛАВА 13 Нестандартные типы данных 333
Такой способ защиты во время разработки довольно легко
реализовать, если вы используете методы доступа. Но это было
бы затруднительно сделать, если бы вы обращались к данным
напрямую.
Встройте уровень абстракции в методы доступа Разрабатывайте
методы доступа в области определения задачи, а не на уровне
деталей реализации. Этот подход позволяет улучшить
читабельность, а также страхует от изменения деталей
реализации.
Сравните пары выражений в табл. 13-1:
Табл. 13-1. Обращение к глобальным данным напрямую и с помощью
метода доступа
Непосредственное использование Обращение к глобальным
данным через
глобальных данных методы доступа
node = nodenext account = NextAccount( account)
node = nodenext employee = NextEmployee( employee )
node = nodenext rateLevel = NextRateLevel( rateLevel)
Предыдущая << 1 .. 165 166 167 168 169 170 < 171 > 172 173 174 175 176 177 .. 426 >> Следующая