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

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

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

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

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

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

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

пример для метода, считывающего и печатающего сообщение о
температуре бакена:
Напечатать "Сообщение о температуре бакена".
Прочитать значение с плавающей запятой.
Напечатать "Средняя температура".
Напечатать значение с плавающей запятой.
Прочитать значение с плавающей запятой.
Напечатать "Диапазон температур".
Напечатать значение с плавающей запятой.
Прочитать целое значение.
Напечатать "Количество проб".
Напечатать целое значение.
Прочитать символьную строку.
Напечатать "Местонахождение".
Напечатать символьную строку.
ГЛАВА 18 Табличные методы 413
Прочитать время суток.
Напечатать "Время измерения".
Напечатать время суток.
Это код только для одного типа сообщений. Для каждого из
оставшихся 19 типов нужно реализовать похожий код. И если
будет добавлен 21-й тип сообщения, потребуется добавить 21-й
метод или подкласс - в любом случае новый тип сообщения
потребует изменения существующего кода.
Табличный подход
Табличный подход экономичнее предыдущего. Метод чтения
сообщений состоит из цикла, который считывает заголовок
каждого сообщения, декодирует его идентификатор, находит
описание сообщения в массиве Message, а затем всегда вызывает
один и тот же метод для декодирования сообщения. Этот подход
позволяет описать формат каждого сообщения в форме таблицы, а
не задавать его жестко в логике программы. Это упрощает
первоначальное программирование, создает меньше кода и
облегчает сопровождение программы без изменения кода.
Применение этого подхода начинается с перечисления типов
сообщений и типов полей. В C++ вы можете определить типы всех
возможных полей таким образом:
Пример определения типов данных сообщения (C++)
enum FieldType {
FieldType_FloatingPoint,
FieldType_Integer,
FieldType_String,
FieldType_TimeOfDay,
FieldType_Boolean,
FieldType_BitField,
FieldType_Last = FieldType_BitField
};
Вместо жестко закодированных методов печати каждого из 20
видов сообщений можно создать горстку функций для печати
основных типов данных: чисел с плавающей точкой, целых чисел,
символьных строк и т. д. Вы можете описать содержимое каждого
типа сообщения в таблице (с указанием имени каждого поля), а
затем декодировать все сообщения на основе этого описания.
Элемент таблицы, содержащий сведения об одном типе сообщений,
может выглядеть так:
Пример определения элемента таблицы, описывающего сообщение
Message Begin NumFields 5
MessageName "Buoy Temperature Message"
Field 1, Floatingpoint, "Average Temperature"
Field 2, Floatingpoint, "Temperature Range"
Field 3, Integer, "Number of Samples"
Field 4, String, "Location"
Field 5, TimeOfDay, "Time of Measurement"
Message End
414 ЧАСТЬ IV Операторы
Эта таблица может быть жестко закодирована в программе (в этом
случае значения всех элементов будут присвоены переменным) или
читаться из файла при запуске программы или позже.
Поскольку определения сообщений поступают в программу извне,
то вместо внедрения информации в логику программы мы внедрили
ее в данные. Данные обычно гибче программной логики: их легко
изменять, если меняется формат сообщения. Если нужно добавить
новый вид сообщений, вы можете просто добавить еще один
элемент в таблицу данных.
Вот псевдокод цикла верхнего уровня для табличного подхода:
Первые три строки такие же, как и при логическом подходе.
Пока есть сообщения для чтения, прочитать заголовок сообщения,
декодировать идентификатор сообщения из заголовка, найти
описание сообщения в таблице описаний сообщений,
прочитать поля сообщения и напечатать их, основываясь на
описании сообщения.
Конец цикла Пока
В отличие от псевдокода при логическом подходе в этом случае
псевдокод не сокращен, так как логика гораздо проще. Логика
более низкого уровня содержит метод, который интерпретирует
сообщение на основе таблицы описаний сообщений, считывает
данные сообщения и печатает его. Этот метод более общего вида,
чем методы печати сообщений при логическом подходе, но он не
намного сложнее и заменяет собой все 20 методов:
Пока не все поля напечатаны,
получить тип поля из описания сообщения.
Выбор ( типа поля )
вариант: ( число с плавающей запятой ) прочитать значение с
плавающей запятой, напечатать метку поля, напечатать
значение с плавающей запятой.
вариант: ( целое число ) прочитать целое значение, напечатать
метку поля, напечатать целое значение.
вариант: ( символьная строка ) прочитать символьную строку,
напечатать метку поля, напечатать символьную строку.
вариант: ( время суток ) прочитать время суток, напечатать
метку поля, напечатать время суток.
вариант: ( логическое значение ) прочитать значение флажка,
ГЛАВА 18 Табличные методы 415
напечатать метку поля, напечатать значение флажка.
вариант: ( битовое поле ) прочитать битовое поле, напечатать
метку поля, напечатать битовое поле.
Конец Выбора Конец цикла Пока
Нужно признать, что этот метод с шестью вариантами выбора
длиннее, чем отдельный метод для печати температуры. Но это
единственный метод, который вам необходим. Вам не нужны
Предыдущая << 1 .. 198 199 200 201 202 203 < 204 > 205 206 207 208 209 210 .. 426 >> Следующая