- •3.Жизненный цикл программы. Критерии качества программы.
- •5.Разработка проекта программной системы
- •6.Схемы алгоритмов, данных, программ
- •7.Символы данных. 8.Символы процесса. Все это говно не копируется со схемам, 9.Символы линий.
- •13.Алфавит языка Паскаль.
- •14.Грамматика для описания языка, синтаксические диаграммы
- •15.Структура программы на языке Паскаль
- •20.Данные логического типа(булевского)
- •21.Данные целого типа
- •22.Данные символьного типа
- •18.Стандартные типы данных
- •19.Порядковые типы данных
- •29.Строки
- •50. Проектирование модульных программ. Модуляризация
- •51. Связность модуля
- •53. Алгоритмы сортировки массива
- •54. Алгоритмы поиска
- •55. Динамические структуры данных
- •56. Линейные списки
- •57. Стек, очередь, дек
- •58. Деревья
29.Строки
Строки представляют собой последовательность символов и фактически реализованы как массив из символов. В первоначальной версии языка Паскаль предполагалось, что описание
VAR S: ARRAY[1...50] of char;
определяет строку из 50 символов. В современных версиях языка такая конструкция также будет работать. Однако более удобно использовать новые встроенные типы для строк. Приведем их в таблице: Тип строки |
Максимальная длина |
Используется для |
Нулевой символ в конце |
ShortString |
255 |
обратной совместимости |
нет |
AnsiString |
231 (2 Гб) |
символов ANSI |
есть |
String |
или 255, или до 2 Гб |
символов ANSI или Unicode |
есть или нет |
WideString |
230 (1 Гб) |
символов Unicode, в серверах COM и интерфейсах |
есть |
50. Проектирование модульных программ. Модуляризация
Обычно при проектировании программ разбиение проекта на модули происходит в самом начале разработки программной системы. Этот процесс называется модуляризацией. Как правило, этим занимается системный аналитик проекта и его группа. Считается, что размер модуля должен колебаться в пределах 30–300 строк исходного текста. Наглядность модуля существенно улучшается за счет использования в заголовке (начале) модуля комментариев и подробного описания функций модуля. При беглом просмотре достаточно читать комментарии-заголовки, практически не обращая внимания на весь остальной текст.
Обычно результат модуляризации изображается в виде графа взаимосвязи модуля и/или подсистем. Основой («корнем») этого графа является главная программа. Каждая вершина графа представляет собой модули, а дуги, соединяющие вершины, показывают взаимосвязь модулей между собой.
Около вершин графа прописываются интерфейсные элементы – имена процедур, функций, констант, переменных, объявленных в открытой части модуля, которые далее более подробно описываются в комментариях к модулю в виде полного описания интерфейсной части. Над дугами прописываются те имена, которые используются в связанном (обычно родительском) модуле. При этом связь может быть перекрестной, т.е. модуль А использует интерфейсные элементы модуля В и наоборот: модуль В использует интерфейсные элементы модуля А. Как уже говорилось, такое проектирование не желательно, но возможно. В этом случае используемые интерфейсные элементы
После завершения модуляризации, каждый модуль распределятся для кодирования между программистами для независимого написания кода и отладки. Однако в таких случаях часто возникает ситуация, когда в родительском модуле предполагается использование процедур и функций дочерних модулей, но дочерние модули ещё не закодированы другими программистами. Например, в модуле М3 используются элементы K, L из дочерних модулей, но эти модули пока не готовы, как быть программисту, реализующему код модуля М3? Выход из этой ситуации осуществляется посредством написания в родительском модуле процедур (или функций) «заглушек», которые по имени и параметрам полностью совпадают с элементами K, L. Заглушки позволяют компилировать и выполнять программу в отладочном режиме.
Процедура «заглушка» – процедура, представленная точной спецификацией заголовка (название и параметры) и пустым телом. Функция «заглушка» – функция, представленная точной спецификацией заголовка
165
(название и параметры), имеющая в теле всего один оператор, возвращающий значение функции. Например, тело функции-заглушки L может быть таким:
Function L(A: integer):integer;
Begin
Result:= 3;
End;
Если процедура «заглушка» имеет параметры переменные, которые меняются внутри тела процедуры, то в этом случае внутри тела процедуры «заглушки» размещают операторы присваивания каких-либо значений этим параметрам. Если процедуры или функции «заглушки» имеют функциональное назначение визуального интерфейса, тогда в качестве «заглушек» используются операторы вывода сообщений в окно или на экран, типа:
Writeln (‘я внутри процедуры K’);
При хорошей модуляризации граф взаимосвязей модулей, как правило, представляет собой дерево, а интерфейсные элементы используются по графу от листьев дерева к узлам более высокого уровня. Однако такое не всегда возможно, и приходится анализировать и проводить оптимизацию графа. Для анализа качества результатов модуляризации используются две характеристики – связность модуля и сцепление модулей, которые рассматриваются далее.
