Реклама:

Если доступная память недостаточна для считывания в нее всех записей или же этот процесс оказался бы неприемлемо медленным из-за слишком большого количества записей, то может возникнуть необходимость в применении другого метода. Наилучшее решение состояло бы в использовании одной из многих доступных отличных подпрограмм сортировки.

Итак, мы видим, что применительно к этому простому примеру несоответствия наша основная методика конструирования принесла мало пользы. В сущности, мы были вынуждены отбросить ее прочь и просто воспользоваться той же нотацией для решения рассматриваемой проблемы более интуитивным способом. В подобных ситуациях нет ничего плохого в таком подходе: в конечном итоге именно так многие программисты работали в течение десятилетий! Однако существуют и другие случаи несоответствия, допускающие более методический подход, пользоваться которым мы учились до сих пор, с внесением в него немногих дополнительных особенностей.

Предположим, что имеется примитивная операционная система, разумеется, отнюдь не такая, которую признал бы приемлемой кто-нибудь из основных производителей операционных систем. Эта операционная система требует чтения блоков данных по 500 символов за один раз без каких-либо изменений. Возможно, более реальной причиной такого режима могло бы оказаться ограничение, налагаемое некоторой конкретной частью аппаратуры. К сожалению, наша информация появляется записями, содержащими по 150 символов. Мы желаем сконструировать программу, которая считывает информацию с файла и представляет ее в формате отчета, как показано на рис. 7.4.

Кинг Д. Создание эффективного программного обеспечения

Рис. 7.4.Формат отчета.

Этот очень простой отчет начинается с заголовка, включает по одной строке для каждой записи и кончается завершителем. (В данной ситуации мы пренебрежем проблемой разделения на страницы. Отчет всегда будет умещаться на одной странице.)

Структуры данных для входных записей и для отчета показаны на рис.7.5.

На рис. 7.5 также указаны и соответствия. Очевидно, что существует соответствие между входом и отчетом. Кроме того, на самом низком уровне имеется соответствие между символами в обеих структурах. Однако отсутствует соответствие между блоком и строкой для записи вследствие наличия 500 символов в блоке и 150 символов в строке, не существует способа выровнять эти два не соответствующих между собой компонента как повторение один другого или как части одной и той же последовательности или выбора.

У читателя может возникнуть вопрос, зачем включать БЛОК в структуры данных, если он вызывает так много трудностей. Ответ состоит в том, что мы должны ЧИТАТЬ блоки и поэтому в конечном счете компонент БЛОК необходим в нашей структуре программы, в которую мы хотим включить оператор «Читать». Аналогично, нам необходим компонент СТРОКА ДЛЯ ЗАПИСИ, поскольку мы будем писать строки. Однако некоторую надежду вселяет наличие соответствия на нижнем уровне между компонентами СИМВОЛ. Этим соответствием можно воспользоваться.

Кинг Д. Создание эффективного программного обеспечения

Рис. 7.5. Структуры данных для программы генерации отчета.

Тип несоответствия, который рассмотрен в связи с проблемой отчета, известен под названием «столкновение структур». Данный конкретный тип далее определяется как «граничное столкновение*, потому что имеется соответствие между основными объектами нижнего уровня; отсутствует соответствие только между границами, налагаемыми на эти объекты нашей проблемой. Другой типичный пример граничного столкновения возникает, когда границы страниц выходного отчета не соответствуют никакому группированию данных на входе. Если эта ситуация остается нераспознанной, то часто появляются странные распечатки, в которых строки напечатаны на линиях перфорации, а заголовки - посреди групп связанных строк информации.


⇐ Предыдущая страница| |Следующая страница ⇒