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

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

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

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

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

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

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 195 196 197 198 199 200 < 201 > 202 203 204 205 206 207 .. 426 >> Следующая

Связанные темы
¦ Сокрытие информации: подраздел "Скрывайте секреты (к вопросу
о сокрытии информации)" раздела 5.3
¦ Проектирование классов: глава 6
¦ Использование таблиц решений для замены сложной логики:
раздел 19.1
¦ Замена сложных выражений табличным поиском: раздел 26.1
Табличный метод - это схема, позволяющая искать информацию в
таблице, а не использовать для этого логические выражения,
такие как if и case. Практически все, что вы можете выбирать
посредством логических операторов, можно выбирать, применяя
таблицы. В простых случаях логические выражения проще и по-
нятней. Но при усложнении логических построений таблицы
становятся все привлекательнее.
Если вы уже знакомы с табличными методами, считайте эту главу
обзором. В этом случае вы можете изучить "Пример гибкого
формата сообщения" (раздел 18.2) в качестве иллюстрации того
факта, что объектно-ориентированный дизайн не обязательно
лучше других вариантов только потому, что он объектно-ориенти-
рованный. После этого можете переходить к обсуждению общих
вопросов управления в главе 19.
ГЛАВА 18 Табличные методы 405
18.1. Основные вопросы применения табличных методов
При определенных обстоятельствах табличный код проще, чем
сложные логические выражения, легче поддается изменению и
эффективнее. Допустим, вы хотите классифицировать символы,
выделив буквы, знаки препинания и цифры. Вы можете
использовать сложную логическую последовательность вроде этой:
Пример использования сложной логики для классификации символов
(Java)
if ( ( ( 'а' <= inputChar ) && ( inputChaг <= 'z' ) ) ||
( ( 'А' <= inputChar ) && ( inputChar <= 'Z' ) ) ) { charType
= CharacterType.Letter;
}
else if ( ( inputChar == ' 1 ) || ( inputChar == 1,'
) ||
( inputChar '' ) || ( inputChar == '!' ) || (
inputChar == '(' ) II
( inputChar == ')' ) II ( inputChar == ':' ) || (
inputChar == 1; ' ) ||
( inputChar == '?' ) || ( inputChar ) ) {
charType = CharacterType.Punctuation;
}
else if ( ( 'O' <= inputChar ) && ( inputChar <= '9' ) ) {
charType = CharacterType.Digit;
Если бы вместо этого фрагмента вы использовали таблицу
подстановки, то поместили бы тип каждого элемента в массив и
обращались бы к нему по коду символа. Сложный фрагмент кода,
представленный выше, заменялся бы на такое выражение:
Пример использования таблицы подстановки для классификации
символов (Java)
charType = charTypeTablef inputChar ];
Этот фрагмент предполагает, что массив сЬагТуреТаЫе был
заранее заполнен. Вы поместили знания, доступные программе, в
данные, а не в логику: в таблицу, а не в условия if.
Два вопроса применения табличных методов
При применении табличных методов перед вами стоят два основных
вопроса. Во- первых, вам надо решить, как будет выполняться
поиск записей в таблице. Вы можете использовать какие-либо
данные для прямого доступа к таблице. Так, если вам нужно
систематизировать данные по месяцам, то выбор ключа для
таблицы месяцев очевиден. Вы можете использовать массив с
индексом от 1 до 12.
Другие данные затруднительно использовать для прямого поиска
табличной записи. Так, для классификации информации по номеру
социального страхования (SSN) вы не можете использовать этот
номер в качестве ключа непосредственно, если, конечно, вы не
собираетесь хранить в таблице 999-99-9999 записей. Вам
понадобится более сложный подход. Вот какие способы,
применяются для поиска записи в таблице:
406 ЧАСТЬ IV Операторы
¦ прямой доступ;
¦ индексированный доступ;
¦ ступенчатый доступ.
Каждый из этих вариантов доступа подробно описан ниже.
Второй вопрос, который нужно решить при использовании
табличных методов: что хранить в таблице. Иногда результатом
поиска в таблице являются данные - тогда можно хранить в
таблице сами данные. Если же результатом поиска является
действие, код, который описывает это действие, можно хранить,
а в некоторых языках можно хранить ссылку на метод, выпол-
няющий это действие. В каждом из этих случаев таблицы
усложняются.
18.2. Таблицы с прямым доступом
Как и все таблицы подстановки, таблицы с прямым доступом
предназначены для замены более сложных логических структур.
Они имеют "прямой доступ", потому что вам не нужно ходить по
кругу, чтобы найти в таблице необходимую информацию. Вы можете
непосредственно выбрать нужную запись (рис. 18-1).

Рис. 18-1. Как следует из ее имени, таблица с прямым доступом
позволяет обращаться к требуемому элементу напрямую
Пример определения количества дней в месяце
Допустим, вы хотите получить число дней в месяце (для простоты
забудем о високосных годах). Разумеется, создание большого
условия if - неуклюжий способ решения этой проблемы:
Пример неуклюжего способа определения количества дней в месяце
(Visual Basic)
If ( month = 1 ) Then
days
= 31


Else
lf (
month
= 2
)
Th
en
days
= 28


Else
lf (
month
= 3
)
Th
en
days
= 31


Else
lf (
month
= 4
)
Th
en
days
= 30


Else
lf (
month
Предыдущая << 1 .. 195 196 197 198 199 200 < 201 > 202 203 204 205 206 207 .. 426 >> Следующая