Совершенный код. Мастер-класс - Макконнелл С.
ISBN: 5-469-00822-3
Скачать (прямая ссылка):


легче читать. Такое упорядоченное применение
330 ЧАСТЬ III Переменные
глобальных данных - отличный пример программирования с
использованием языка, а не на языке (см. раздел 34.4).
Эмуляция перечислимых типов Вы также можете использовать
глобальные переменные для эмуляции перечислимых типов в таких
языках, как Python, которые напрямую такие типы не
поддерживают.
Оптимизация обращений к часто используемым данным Иногда
переменная так часто вызывается, что упоминается в списке
параметров каждого метода. Вместо того чтобы включать ее в
каждый список параметров, вы можете сделать ее глобальной.
Однако случаи, когда к переменной обращаются отовсюду, редки.
Обычно она используется ограниченным набором методов. Их вы
можете объединить в класс вместе с данными, с которыми они
работают. Позднее мы вернемся к этому вопросу.
Исключение бродячих данных Иногда вы передаете данные методу
или классу только для того, чтобы передать в другой метод или
класс. Например, у вас может быть объекг-обработчик ошибок,
применяемый в каждом методе. Если метод в середине цепочки
вызовов не использует этот объект, он называется "бродячим"
(tramp data). Применение глобальных переменных помогает
исключить бродячие данные.
Используйте глобальные данные только как последнее средство
Прежде чем вы решите использовать глобальные данные,
рассмотрите следующие альтернативы.
Начните с объявления всех переменных локальными и делайте их
глобальными только по необходимости Изначально сделайте все
переменные локальными по отношению к конкретным методам. Если
выяснится, что они нужны еще где-то, сделайте их сначала
закрытыми или защищенными переменными класса, прежде чем вы
решите сделать их глобальными. Если в конце концов выяснится,
что их придется сделать глобальными, сделайте, но только после
того, как в этом убедитесь. Если вы с самого начала объявите
переменную глобальной, вы никогда не сделаете ее локальной, но
если она сначала будет локальной, вам, возможно, не
понадобится делать ее глобальной.
Различайте глобальные переменные и переменные-члены класса
Некоторые переменные действительно глобальны в том плане, что
к ним обращаются из любого места программы. Другие - на самом
деле классовые переменные - интенсивно используются только
некоторымо набором методов. Вполне нормально обращаться к
классовой переменной из нескольких методов сколь угодно интен-
сивно. Если методу вне класса нужно использовать эту
переменную, предоставьте ее значение посредством метода
доступа. Не обращайтесь к членам класса напрямую (как если бы
эти переменные были глобальными), даже если ваш язык про-
граммирования это позволяет. Этот совет равносилен
высказыванию "Модуляри- зируйте! Модуляризируйте!
Модуляризируйте!".
Используйте методы доступа Создание методов доступа - основной
подход для решения проблем с глобальными данными (см.
следующий раздел).
ГЛАВА 13 Нестандартные типы данных
331
Используйте методы доступа вместо глобальных данных
Все, что вы можете сделать с глобальными данными, вы можете
сделать лучше, используя методы доступа. Применение методов
доступа - основная технология реализации абстрактных типов
данных и достижения сокрытия информации. Даже если вы не
хотите создавать полноценный абстрактный тип данных, вы все
равно можете использовать методы доступа для централизации
управления данными и для защиты от изменений.
Преимущества методов доступа
Использование методов доступа имеет несколько преимуществ.
¦ Вы получаете централизованный контроль над данными. Если
позднее вы обнаружите более подходящую реализацию структуры,
вам не придется изменять код везде, где она упоминается.
Изменения не всколыхнут всю вашу программу - они останутся
внутри методов доступа.
¦ Вы можете быть уверены, что все ссылки на переменную
тг ~ Перекрестная ссылка Об
изоля-
изолированы. Добавляя элемент в стек с помощью таких ц^нных см
раадп " 5
выражений, как stack.array[ stack.top ] = newElement, вы
легко можете забыть проверить переполнение стека и допустить
серьезную ошибку. Используя же методы доступа (скажем,
PushStack( newElement)), вы можете написать проверку
переполнения стека в методе PushStackQ. Проверка будет
выполняться автоматически, и вы сможете про нее забыть.
¦ Вы автоматически получаете главные преимущества со-
, Перекрестная ссылка 0
сокры-
крытия информации. Методы доступа представляют со- ш информации
ш подраадел
бой примеры сокрытия информации, даже если вы и не
"Скрывайте секреты {к
аопро-
намеревались использовать их в этих целях. Вы можете су о
сокрытии информации}"
изменять содержимое метода доступа, не затрагивая раздела 5*3.
остальную часть программы. Эти методы позволяют вам
отремонтировать интерьер вашего дома, оставив фасад прежним,
так что ваши друзья смогут его узнать.
¦ Методы доступа легко преобразуются в абстрактные типы
данных. Одно из преимуществ этих методов в том, что вы
можете создавать более высокий уровень абстракции, чем при


