
- •5,6 Семестр Общие принципы проектирования программных систем. Этапы жизненного цикла программной системы.
- •1. Постановка задачи:
- •Требования, предъявляемые к программным системам:
- •2. Разработка:
- •3. Реализация:
- •Нисходящее и восходящее проектирование.
- •Структурное программирование (без go to).
- •2) Ветвление (if): 3) цикл с предусловием (do while):
- •1.2.4. Язык проектирования (метаязык)
- •Глава 2. Структуры данных.
- •2.1. Агрегативные переменные
- •2.2. Динамические структуры данных.
- •2.2.1. Списки. (Списочные структуры).
- •2.2.2. Очереди
- •2.2.3. Стеки
- •2.2.4. Множества
- •2.2.5. Деревья и графы
- •1 . Направленный граф:
- •2 . Ненаправленный граф:
- •2.3. Абстрактные структуры данных
- •2.3.2. Объекты
- •2.4. Файловые типы данных
- •2.4.4. Операции над файлами
- •4. Специальные операции:
- •Специальные типы файлов языка Pascal.
- •Файлы в других языках
- •3. Алгоритмы
- •3.1. Типы алгоритмов. Сложность алгоритмов.
- •3.2. Способы реализации алгоритмов.
- •5.2 Реализация наследования в Паскале
- •5.3 Проблема наследования статических методов
- •6.1 Объекты и их жизненный цикл
- •6.2. Инкапсуляция. Св-ва
- •6.3 Наследование
- •6.4. Области видимости
- •6.5 Информация о классе
- •Особенности архитектуры программ
- •7 .1 Обработчики сообщений Windows в Delphi
- •Средства разработки Windows приложений
- •4.4.2 Основные понятия ооп
- •4.4.3 Типы оос
- •4.4.4 Общие принципы работы оос-м
- •Особенности объектно-ориентированных систем
- •4.1 Декомпозиция и абстракция
- •Методы проектирования ориентированные на обработку
- •4.2.1 Модульное программирование
- •4.2.2 Функциональная декомпозиция
- •1. Пошаговое уточнение:
- •2. Метод анализа потоков данных:
- •Связанность модулей
- •Сцепление модулей
- •4.2.3. Технология структурного анализа проекта
- •4.2.4 Язык определения задач psl/psa
- •Методология Джексона
- •Методология Уорнера
- •4.2.6. Метод иерархических диаграмм hipo
- •Методы проектирования ориентированные на данные
Структурное программирование (без go to).
Структурное программирование – такой тип программирования при котором на каждом шаге детализации используется только стандартные управляющие структуры.
Простая программа – программа которую можно представить в виде блок-схемы со следующими св-вами: 1) имеется только одна входная и одна выходная ветвь 2) для каждого узла существует путь от входа к выходу проходящей через этот узел.
К таким структурам относятся 3 управляющие структуры:
1
)
следование: -императивные
языки (Pascal, C,
…)
декоративные языки (ненужно писать алгоритм, а только сформулировать задачу) (Prolog).
2) Ветвление (if): 3) цикл с предусловием (do while):
Доказано, что достаточно иметь в языке эти 3 структуры чтобы реализовать любой алгоритм.
Примеры:
При структурном программировании процесс детализации структуры программы можно представить как:
Программа представлена одним блоком;
do while (проектирование не закончено)
заменить очередной блок простой программой;
end;
Такой подход исключает использование оператора “go to”. “go to” может использоваться только для реализации стандартных управляющих конструкций.
Пример (Fortran):
if (a.
it. b)
go to
100 //если
то идти на метку 100
…
100 continue
c:=sqrt(b);
…
Пример программы с беспорядочной передачей управления:
if (a. it. b) go to 100
12 continue
…
go to 11
100 continue
c:=sqrt(b)
11:=1+sqrt(b)
go to 12
Указанные управляющие структуры позволяют создавать формальное описание программы.
Например, пусть некоторая программная ф-ция задана следующей управляющей структурой: f(x): if p(x) then g(x) else h(x);
Такую программную ф-цию можно формально представить в виде:
f(x) = [p(x) => g(x)]U[
p(x)
=> h(x)]
Такого рода описания могут быть получены для любых управляющих структур или для всей программы. При таком способе ф-ции выражаются через ф-ции. Если используется goto, то такие формальные выражения записать невозможно, а они позволяют доказать правильность программы.
Все современные алгоритмические языки обязательно включают указанные управляющие структуры. Они являются min-ым набором. На их основе могут быть созданы более сложные специализированные управляющие структуры. Например, цикл с постусловием.
repeat
| набор операторов;
until (условие)
На основе стандартного набора:
набор операторов;
| do while ( условие);
end do
Для замены goto для передачи управления вперёд в некоторых языках используется оператор leave – передать управление за пределы той управляющей конструкции, где он встретился (например, цикл).
| do while (условие)
| …
| if (ошибка) leave;
| end
…
leave применяется в ситуации ошибок ввода-вывода.
1.2.4. Язык проектирования (метаязык)
Метаязык -это один из способов документирования алгоритмов. Язык проектирование создаётся самими разработчиками “под себя”. Помимо наглядности для разработчика, алгоритм понятен и неспециалисту. В тексте программы на метаязыке допустимо использовать любые выражения, что позволяет гибко управлять степенью детализации. Прог-у на языке проектирования нельзя выполнить. Могут быть созданы автоматические анализаторы (PDL).
В отличии от блок-схем, язык проектирования позволяет описывать типы и структуры данных.
Рекомендации к созданию языка проектирования:
Язык проектирования состоит из 2-х частей
заданного набора операторов, построенных по образцу языков проектирования
общего неопределяемого синтаксиса, пригодного для описания задач в данной области.
Следует использовать общепринятые управляющие структуры: следование, if then else или do while, repeat until, do case, leave, оператор вызова процедуры.
Необходимо определить способ обозначения областей действия операторов.
do while ( условие )
|
end do
Или могут использоваться отступы:
|if условие then
|_набор операторов;
Продолжение текста;
Кроме слов end do и end if можно использовать операторные скобки, ограничивающие область действия (begin end, {}).
Но тем не менее обязательно нужно использовать отступы.
Описание языка проектирования обязательно включается в конструкторскую документацию.
Пример: образец спецификации языка проектирования PDL.
Язык включает в себя следующие группы операторов:
Оператор выбора
if выражение
then оператор1;
else оператор2;
где слова оператор1 и оператор2 могут обозначать и группу операторов. И в дальнейшем так же.
Оператор множественного выбора
do case ( выражение )
| /индекс1/ оператор1;
| /индекс2/ оператор2;
| …
| /индекс n/ оператор n;
| else оператор n+1;
end;
Оператор цикла
3.1 ( с предусловием )
do while ( выражение )
| операторы;
end;
3.2 ( со счетчиком )
do переменная = значение1 to значение2 by значение3
| операторы;
end;
4. Оператор описания данных
declare имя атрибуты(тип); - объявление скалярных переменных.
Объявление массива или векторной переменной:
declare имя(размер) атрибуты(тип);
Допускается и описание более сложных структур данных:
declare 1_A,
_2_B,
_3_C,
_3_D,
_2_E,
_2_F;
Обращение: A.B.D=2;
5. Другие операторы:
5.1 Оператор присваивания
переменная = выражение;
5.2 Оператор вызова процедуры
call имя_процедуры(список фактических параметров);
5.3 Возврат из подпрограммы или функции
return (значение)
5.4 Описание процедуры
Имя_процедуры: procedure (описание формальных параметров);
| тело процедуры
end;
Оператор ввода get (список переменных)
Оператор вывода put (список переменных)
6. Предложения на естественном языке
Например:
Наибольший элемент массива А;
Отсортировать список S1 по алфавиту;
A:=E*D;
x(t)=
h(t,
)y(
)d
с шагом
=0,01с
и тд.