Для определения пользователем горячих клавиш для других интерфейсных элементов используется компонент THotKey. Для выбора даты может использоваться один из двух компонентов - TDateTimePicker или TMonthCalendar. Эти компоненты отличаются внешним видом на этапе выполнения.
Для включения в форму стандартной панели состояния используется компонент TStatusBar. Ее содержимое может состоять из одной строки (это определяется установкой свойства SimplePanel), или из неспольких отдельных панелей, которые формируются в редакторе панелей. Этот редактор вызывается путем выбора в контекстном меню пункта Panels Editor.
Программирование на языке высокого уровня 09.03.01 |
61 |
Раздел 8. Технология создания программ на языке программирования высокого уровня. Лекции
38-42.
Тема 49. Восходящая разработка программ. Достоинства и недостатки.
Традиционно проектирование программного приложения производится сверху вниз, а программирование – снизу вверх, реализуя тем самым восходящий подход.
Уровень1
|
|
|
|
|
|
|
|
Уровень 2 |
|
|
Уровень 2 |
|
Уровень 2 |
||
|
|
|
|
|
|
|
|
Уровень 3 |
|
Уровень 3 |
|
|
|
При этом подходе вначале изготавливаются модули самого низкого уровня. Далее эти модули проверяются, для чего выполняется набор тестов или отладочных программ. После изготовления и проверки программ самого низкого уровня выполняется программирование модулей следующего уровня. Каждый следующий уровень помогает удостовериться в правильности предположений, сделанных в программах нижних уровней и выявить в них несоответствия или упущения.
Основная трудность при восходящем подходе состоит в том, что каждый модуль может правильно работать при выполнении тестов, рассчитанных на проверку данного модуля, но терять свою работоспособность при включении в общий программный проект. Одной из причин такой ситуации является изменение технического задания в ходе выполнения проекта. Кроме того, часто встречается разная интерпретация разными программистами тех или иных частей технического задания. Иногда некоторые особенности реальных данных или возможные ошибки пользователей при работе с интерфейсными программами не учитываются разработчиками на этапе программирования модулей.
Другой проблемой восходящего подхода является концентрация трудностей на последней фазе работы над программным проектом в условиях острой нехватки времени.
При возникновении подобных ситуаций применяются следующие решения:
-вносятся изменения в уже написанные программные модули;
Программирование на языке высокого уровня 09.03.01 |
62 |
-перепрограммируется большая часть модулей;
-вносятся изменения в проект, чтобы сделать его соответствующим готовой программе.
В некоторых ситуациях результатом фазы интеграции является полное изменение всего проекта, включая заново выполненное разбиение на модули.
Тема 50. Нисходящая разработка программ
При нисходящей разработке и проектирование, и программирование ведутся сверху вниз. Такой способ разработки помогает тщательно исследовать законченную программу, так как интеграция и тестирование идут непрерывно в течение всей разработки. Так как модули разрабатываются сверху вниз, то вместо программ нижнего уровня используются так называемые программные заглушки. На изготовление таких заглушек не тратится большое количество ресурсов, так как они требуются только для того, чтобы позволить программе верхнего уровня быть выполненной
ипроверенной.
Врамках нисходящего подхода возможно несколько вариантов последовательного программирования модулей.
Уровень1 |
1 1 |
|
|
|
|
|
|
|
|
|
|
|
Уровень 2 |
2 2 |
|
|
Уровень 2 |
3 3 |
|
|
Уровень 2 |
4 6 |
|
|
|
|
|
|
|
|
|
|
|
|
Уровень 3 5 4 |
|
Уровень 3 |
6 5 |
|
|
|
|
При иерархическом подходе порядок программирования и тестирования модулей определяется их расположением в схеме иерархии. Сначала программируются и тестируются все модули одного уровня, после чего происходит переход на уровень ниже. При тестировании модулей верхнего уровня для модулей следующего уровня используются программные заглушки. Иерархический подход не регламентирует порядок создания модулей в пределах одного уровня.
При операционном подходе модули разрабатываются в порядке их выполнения в готовой программе. Преимуществом этого подхода, в частности, является минимизация трудностей, связанных с зависимостью по данным, то есть необходимостью использовать в модуле данные, подготовленные или измененные другим модулем. Поскольку модули обычно добавляются в порядке исполнения, то при таком подходе вначале создаются модули, порождающие данные для последующих модулей.
Программирование на языке высокого уровня 09.03.01 |
63 |
Основным недостатком иерархического подхода является то, что основная масса модулей реализуется в конце проекта, что может затруднить программирование и тестирование, а при операционном подходе разработчики модулей «выстраиваются в очередь», что может привести к несвоевременной реализации модулей.
Наилучшим подходом при разработке программы является комбинация иерархического и операционного способов. Для следования этому подходу необходимо проверять следующие условия:
1)должен существовать путь управления к модулю, программируемому в настоящий момент, то есть такая цепочка модулей, уже вошедшая в работающую программу, через которую управление может быть передано новому модулю;
2)должны быть доступны значения всех данных, требуемых от модулей или их заглушек, создающих или изменяющих эти данные.
Определяя порядок разработки модулей, следует учитывать шесть факторов:
1)зависимость по данным;
2)доступные ресурсы;
3)требование обеспечить выдачу результатов модулей, проверяемых раньше;
4)необходимость прежде всего обеспечить готовность вспомогательных модулей;
5)сложность модулей – при прочих равных следует начинать со сложных модулей;
6)обработка исключительных ситуаций, связанных с
неправильными данными – модули, обрабатывающие правильные данные, должны программироваться и тестироваться раньше модулей, имеющих дело с неправильными данными.
Темы 51-52. Модульное программирование. Основные принципы разбиения программы на модули. Элементы стиля программирования
Модуль – это последовательность логически связанных фрагментов, оформленных как отдельная часть программы. Основными преимуществами модульного программирования являются:
1)возможность разделения работы между несколькими программистами;
2)возможность создания библиотек модулей для их дальнейшего использования;
3) |
увеличение |
числа контрольных точек |
для наблюдения |
за |
ходом выполнения проекта; |
|
|
||
4) |
облегчение тестирования. |
|
|
|
Модуль имеет |
три основных атрибута: он |
выполняет одну |
или |
|
несколько функций, обладает некоторой логикой и используется в одном или нескольких контекстах. Функция – это внешнее описание модуля; описывается, что делает модуль, но не как это делается. Логика описывает внутренний алгоритм модуля, то есть, как он выполняет свою функцию. Контекст описывает конкретное применение модуля.
Программирование на языке высокого уровня 09.03.01 |
64 |
Чтобы уменьшить сложность программы, надо разбить ее на множество небольших, в высокой степени независимых модулей. Довольно высокой степени независимости можно достичь с помощью двух методов оптимизации: усилением внутренних связей в каждом модуле и ослаблением взаимосвязи между модулями. Нужно стремиться реализовать отдельные функции отдельными модулями (высокая прочность модуля) и ослаблять связь между модулями по данным (слабое сцепление модулей).
Прочность модуля – это мера его внутренних связей.
Модуль, прочный по совпадению – модуль, между элементами которого нет осмысленных связей. Такие модули возникают при разбиении на модули уже после написания программы.
Модуль, прочный по логике, при каждом вызове выполняет выбранную функцию из набора связанных с ним.
Модуль, прочный по классу, последовательно выполняет набор связанных с ним функций.
Процедурно прочный модуль последовательно выполняет набор тех связанных с ним функций, которые непосредственно относятся к процедуре решения задачи.
Коммуникационно прочный модуль – это процедурно прочный модуль с одним дополнительным ограничением: все его функции связаны по данным.
Информационно прочный модуль выполняет несколько функций, причем все они работают с одной и той же структурой данных и каждая представляется собственным входом.
Функционально прочный модуль – это модуль, выполняющий одну определенную функцию.
Сцепление модулей – это мера взаимодействия модулей по данным, которая характеризуется как способом передачи данных, так и свойствами самих этих данных.
Два модуля сцеплены по содержимому, если один прямо ссылается на содержимое другого.
Группа модулей сцеплена по общей области, если они ссылаются на одну и ту же глобальную структуру данных.
Группа модулей сцеплена по внешним данным, если они ссылаются на один и тот же глобальный элемент данных.
Два модуля сцеплены по управлению, если один явно управляет функционированием другого.
Группа модулей сцеплена по формату, если они ссылаются на одну и ту же неглобальную структуру данных.
Два модуля сцеплены по данным, если один вызывает другой и все входные и выходные параметры вызываемого модуля – простые элементы данных.
В дополнение к прочности и сцеплению есть и другие характеристики, оказывающие воздействие на независимость модулей. Это размеры модуля (от 10 до 100 операторов языка программирования), предсказуемость модуля (модуль не должен хранить следы своих состояний
при последовательных вызовах), минимизация доступа к |
данным, |
отсутствие внутренних процедур. |
|
Программирование на языке высокого уровня 09.03.01 |
65 |