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

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

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

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

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

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

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

event = eventQueue[ queueFront ] event =
HighestPriorityEvent()
event = eventQueue[ queueBack ] event = LowestPriorityEventQ
Смысл первых трех примеров в том, что абстрактный метод
доступа гораздо информативнее общей структуры. Если вы
используете структуры напрямую, вы одновременно делаете
слишком многое: во-первых, показываете, что выполняет
структура (переход к следующему элементу в связном списке), а
во-вторых - что происходит по отношению к сущности, которую
она представляет (выбор номера счета, следующего работника или
процентной ставки). Это слишком тяжелая ноша для простой
операции присваивания в структуре данных. Сокрытие информации
за абстрактными методами доступа позволяет коду самому
говорить за себя и заставляет читать программу на уровне
области определения задачи, а не на уровне деталей реализации.
Выполняйте доступ к данным на одном и том же уровне абстракции
Если вы используете метод доступа для выполнения какого-то
действия со структурой, все остальные действия должны
производиться с помощью таких методов. Если вы считываете
данные с помощью метода доступа, то и записывайте их с помощью
метода. Если вы вызываете InitStackO для инициализации стека и
PushStackO для добавления в него элементов, то вы создали
целостное представление данных. Если же вы извлекаете элементы
с помощью выражения value = array[ stackXop ], то это
представление данных противоречиво. Противоречивость усложняет
код для понимания. Создайте метод PopStackQ и используйте
вместо value = arrayf stackXop ].
В примерах выражений в табл. 13-1. две операции с очере- л "
^ к Перекрестка* ссылка
Примене-
дями событии происходят параллельно. Добавление в оче- ние мвТ0Д08
Д0С7уПа для очередь - наиболее сложная из этих двух операций в
таблице род событий предполагает
"в-
и потребует нескольких строк кода для поиска места вставки о
Сходимость создания класса
события, сдвига остальных элементов очереди для выделе- im'
ния места новому событию, и установки нового начала или
конца очереди. Удаление события из очереди по сложности будет
примерно таким же. Если во время кодирования сложные операции
будут помещены в мето-
334 ЧАСТЬ III Переменные
ды, а в остальных будет применяться прямой доступ к данным,
это создаст безобразное, нераспараллеливаемое использование
структуры. Теперь сравните пары выражений в табл. 13-2:
Табл. 13-2. Распараллеливаемое и нераспараллеливаемое
применение сложных данных
Нераспараллеливаемое Распараллеливаемое использование
использование сложных данных сложных
данных
event = EventQueue[ queueFront ] event -
HighestPriorityEventO
event = EventQueue[ queueBack ] event - LowestPriorityEventQ
AddEvent( event) AddEvent( event)
eventCount = eventCount - 1 RemoveEvent( event)
Может показаться, что эти принципы стоит применять только в
больших программах, однако методы доступа показали себя как
эффективный способ решения проблем с глобальными данными. В
качестве бонуса они делают код более читабельным и добавляют
гибкость.
Как уменьшить риск использования глобальных данных
Как правило, глобальные данные должны быть переменными класса,
который не был правильно спроектирован или разработан. В
редких случаях данные действительно должны быть глобальными,
но доступ к ним может осуществляться посредством оболочки
методов доступа, что позволит минимизировать потенциальные
проблемы. В крохотном числе оставшихся вариантов вам
действительно необходимы глобальные данные. В этих случаях вы
можете рассматривать принципы, перечисленные ниже, как
прививки, дающие возможность пить воду в зарубежной поездке:
они болезненны, но увеличивают шансы остаться здоровым.
Штшш ш. О сша- Разработайте соглашения по именованию, которые
швниях по именованию глобаяь- сделают глобальные переменные
очевидными Вы мо-
ных переменных с"* едраздвя жете избежать некоторых ошибок,
просто сделав очевидным
"Идентифицируйте глобальные факт, что вы работаете с
глобальными данными. Если вы ис-
переменшв" раздела 11А пользуете глобальные переменные для
нескольких целей
(например, как переменные и как замену именованных кон-
стант), убедитесь, что ваши соглашения по именованию делают
различия между этими типами использования.
Создайте хорошо аннотированный список всех глобальных
переменных
Если соглашение по именованию указывает, что данная переменная
является глобальной, будет полезно показать, что эта
переменная делает. Список глобальных переменных - один из
наиболее полезных инструментов, который может иметь
программист, работающий с вашей программой.
Не храните промежуточных результатов в глобальных переменных
Если вам нужно вычислить новое значение глобальной переменной,
присвойте ей окончательный результат в конце вычислений, а не
храните в ней результаты промежуточных расчетов.
ГЛАВА 13 Нестандартные типы данных
335
Не считайте, что вы не используете глобальные переменные,
поместив все данные в чудовищный объект и передавая его всюду
Предыдущая << 1 .. 166 167 168 169 170 171 < 172 > 173 174 175 176 177 178 .. 426 >> Следующая