- •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
- •Методы проектирования ориентированные на данные
2. Разработка:
Это главный этап занимающий основное время работы над проектом:
а) На этом этапе разрабатывается архитектура программной системы (иерархически упорядоченный набор модулей и связи между ними).
б) Разрабатываются алгоритмы конкретных модулей.
Итог этапа: детализированные алгоритмы и архитектура (в смысле модульная структура в иерархической схемы).
Существуют два подхода к проектированию архитектуры:
а) основывается на структурном анализе, т.е. подразумевает последовательную детализацию задачи путем разбиения её на подзадачи.
б) основывается на преимущественном использовании базовых элементов какого-либо класса, обычно их два – данные и процедуры их обработки.
3. Реализация:
На основе алгоритмов разработанных на этапе 2 пишутся исходные тексты программ на каком-либо языке. Этот этап не главный.
Итог этапа: отлаженные тексты программ.
4. Испытание и приёмка работы:
Идёт разработка приёмов и тестовых задач. После выполнения этих задач программа принимается.
5. Эксплуатация и сопровождение:
Т.к. для сложной системы невозможно теоретически доказать её правильность, поэтому используют неформальные приёмы: длительное тестирование.
Общее замечание по всем этапам: Все этапы следует тщательно планировать, вплоть до составления сетевых графиков:
Нисходящее и восходящее проектирование.
Пример архитектуры программной системы из нескольких уровней:
Рассмотрим, каким образом такая архитектура может быть получена, используя нисходящее и восходящее проектирование.
Нисходящее проектирование:
Проектирование сверху вниз, от общего к частному. При нисходящем проектировании сначала разрабатывается модуль верхнего уровня.
Например для данной схемы опишем модуль А на “мета” языке:
MAIN : procedure
Задача АА;
do while (условие)
Задача АВ;
end;
Задача АС;
end MAIN;
Процесс детализации:
Фаза1: А(MAIN)
Ф аза2: MAIN : procedure
Инициализация задачи АА;
(подготовка данных для АА)
call AA;
do while (условие)
Инициализация задачи АВ;
call AВ;
end;
Инициализация задачи АC;
call AC;
end MAIN;
Описание модулей:
AA : procedure … Алгоритм решения задачи АА; … end AA; |
AB : procedure … call АB; … end AB;
|
AC : procedure … end AC;
|
Далее процесс продолжается, пока не будет всё достаточно детализировано. Процесс детализации заканчивается с исчезновением общих фраз (инициализация задачи АВ).
Восходящее проектирование:
Снизу вверх или от частного к общему. Сначала разрабатываются модули самого нижнего уровня.
Процесс детализации:
Ф аза1:
Напишем алгоритмы с предельной степенью детализации:
AAА : procedure … end AAА; |
AАB : procedure … … end AАB; |
ACА : procedure … end ACА; |
Ф аза2: Переход к более
абстрактным представлениям
AA : procedure … end AA; |
…
|
AC : procedure … end AC; |
|
|
|
A : procedure … end А; {MAIN} |
Такой подход применяется в случаях когда разрабатываемая система имеет хорошо известную архитектуру (аналог имеющийся системы). Так же этот подход может быть применён в случае когда нижний уровень функций определён.
Например: Проектирование ОС где нижний уровень определяется аппаратурой.
Этот метод не всегда может привести к требуемому результату, особенно для впервые разрабатываемых систем. Используется только в исключительных случаях.
На этапе реализации (3-м) восходящий подход является основным.
Если начать реализацию сверху вниз, то тестирование системы можно будет начать только после завершения реализации всей системы, что неудобно реализация снизу вверх (отладка отдельных модулей).
Такой традиционный подход к реализации не всегда удобен. Иногда на ранних этапах реализации нужно бывает убедиться в работоспособности всей системы (например показать интерфейс заказчику). Есть выход – использование модулей заглушек. Эти модули замещают ещё не реализованные модули системы, но позволяют убедиться в работоспособности системы в целом.
Заглушка – программный модуль, который не выполняет никаких действий по обработке данных. Он всего лишь возвращает некоторые фиксированные данные, т.е. имитирует работу модуля (т.е. возвращаемые им данные нужной структуры).
Заглушки позволяют вести реализацию сверху-вниз.
< – использование заглушек при нисходящей реализации.
Нижний текущий уровень процесса реализации (т.е. до этого уровня текст программы написан и отлажен).
Эти два подхода не являются единственными. Существует еще один подход - метод последовательного уточнения: на первом этапе проектирования создаётся полная версия системы, на втором этапе она уточняется и т.д. Это не системный подход. Применим для небольших программных систем или отдельных программ. Этот метод может и не привести к требуемому результатую
Достоинство: уже на ранних этапах имеем уже рабочую систему.
Недостаток: трудно планировать процесс разработки.