скачать
Подходы к разработке ПП (1, 12)
Различают 5 подходов: Метод функциональной декомпозиции Метод анализа потоков данных Метод анализа структур данных Разработка на базе абстрактных типов данных (АТД) Объектно-ориентированный подход
Метод анализа структур данных: применяется в основном при проектировании баз данных. Проектирование начинается с определения структур данных всех источников. Должен соблюдаться принцип: каждый элемент данных вводится один раз от первоисточника. На основе всех структур данных источников проектируется глобальная структура данных, так называемая концептуальная модель данных. Концептуальная модель данных содержит все данные, хранимые в базе. ^ : Признаки АТД – множество допустимых значений, множество допустимых операций и правила их выполнения. Проектирование заключается в педставлении задачи на базе имеющихся типов данных (очередь, стек, список, дерево и т.д.) и операций над ними. ОО-подход: Объект – некоторый реально существующий предмет. Класс – множество объектов с одинаковыми свойствами и одинаковым поведением. Свойства – набор переменных, характеризующих класс. Поведение класса задается методами. Между классами есть отношения .
^
Применяется для реализации алгоритмически-сложных задач не связанных с обработкой большого объема данных (инженерно-научные задачи). Проектирование заключается в выполнении функциональной декомпозиции т.е. разделении заданной функции на ряд подфункций; каждая подфункция рассматривается в свою очередь как функция и подвергается функциональной декомпозиции. Этот процесс продолжается до тех пор, пока не получатся подфункции, которым соответствуют легко реализуемые программные модули.
^
HIPO – Hierarchical Input Processing Output. Здесь процесс проектирования заключается в составлении IPO диаграмм. Каждая IPO-диаграмма соответствует одной функции. IPO-диаграммы соединены между собой иерархической связью.
 |
Перечисление структур и данных с которыми рабоатет программа |
^
При проектировании методом функциональной декомпозиции возникает вопрос – какие связи должны быть между подзадачами? В идеале – никаких. Используются термины: связность – связи внутри одной подзадачи; сцепление – связь между разными подзадачами.
Метод анализа потоков данных (5, 6)
Первый этап – составление диаграмм потоков данных (DFD – data flow diagram). Обозначения:   – источник (потребитель) данных, п – обработка данных,
  – файл или база данных (хранилище данных), – поток данных. DFD м.б. иерархической. Составление диаграмм носит итеративный характер. Очередность действий: 1) составление на качественном уровне; 2) уточнение состава передаваемых данных; 3) проектирование структуры базы данных; 4) эскизы форм ввода/вывода для источников и потребителей.

^
Опр: Программный продукт – программа + пользовательская документация. ПП можно эксплуатировать без участия его автора.
Этапы ЖЦ: Анализ Проектирование Реализация Сборка, тестирование, испытание Внедрение (выпуск) Сопровождение
Анализ Различают 2 случая производства ПП: 1) ПП делается для конкретного заказчика. В этом случае нужно прикладную задачу преврашать в программистскую. Нужно понять как функционирует та среда, которую нужно автоматизировать (анализ бизнес-процессов). В результате появляется документация-спецификация требования, где указаны какие именно задачи д.б. решены и при каких условиях. Эту работу выполняет системный аналитик (аналитик бизнес-процессов). 2) ПП разрабатывается для рынка. Нужно проводить маркетинговые исследования и найти какого продукта на рынке нет. Это связано с большим риском. Цель – разработка спецификации требований. Проектирование Цель – определение общей структуры (архитектуры) ПП. Результат – спецификация ПП. Эту работу выполняет системный программист. ^ Сборка всего, что сделано разными программистами. Тестирование всего программного комплекса. Отладка – поиск и устранение причин ошибок. Испытание – уточнение технических характеристик. В результате – гарантия работоспособносит программы. ^ Внедрение – когда работают на одного заказчика. Включает постановку программы у заказчика, обучение заказчика, консультации, устранение ошибок и явных недостатков. Должно произойти отчуждение ПП – пользователь может работать с ПП без участия автора. Выпуск – когда ПП разрабатывается на рынок. Начинается с этапа бета-тестирования. Соотв. версия – бета-версияю. Альфа-тестирование – тестирование людьми из той же организации, не участвовавших в разработке программ. Бета-тестирование – изготовление нескольких экземпляров ПП и отправка потенциальным заказчикам. Цель – еще раз проверить разработку ПП. Если на рынок выпускается принципиально новый ПП, то возможно несколько бета-тестирований. После бета-тестирование – выпуск коммерческой версии. Сопровождение Устранение замеченных в ходе эксплуатации ошибок. Внесение непринципиальных усовершенствований. Накопление предложений для разработки следующей версии.
^
Waterfall («водопад», каскадная модель)
 | Модель не предусматривает обратные связи (каждый элемент д.б. полностью закончен до перехода к следующему). При решении сложных задач это невозможно. Модель применима когда: 1) решается очень простая задача, 2) разрабоатывается очередная версия ПП |
Прототипирование Сначала разрабатывается не сам программный продукт, а его прототип, содержащий решение главных проблем, стоящих перед разработчиками. После успешного завершения разработки прототипа по тем же принципам разрабатывается и настоящий программный продукт. Прототип позволяет лучше понимать требования к разрабатываемой программе. Используя прототип заказчик также может точнее сформулировать свои требования. Разработчик имеет возможность с помощью прототипа предъявить заказчику предварительные результаты своей работы. Итерационная модель Задача разделяется на подзадачи и определяется очередность их реализации т.о., чтобы каждая следующая подзадачи расширяла возможности ПП. Успех существенно зависит от того сколь удачно разделены задачи на подзадачи и как выбрана очередность. Преимущества: 1) возможность активного участия заказчика в разработке, он имеет возможность уточнить свои требования в ходе разработки; 2) возможность тестирования вновь разрабатываемых частей совместно с ранее разработанными, это уменьшит затраты на комплексную отладку; 3) во время разработки можно начинать внедрение по частям.
^
Каждый цикл в модели начинается с определения цели этого цикла, анализа разных путей ее достижения и возможных ограничений, оценивается степень неопределенности и риска. Выбирается стратегия проектирования, позволяющая их уменьшить. Далее разрабатывается первый прототип, следуют анализ, уточнение требований и т.д. Круг за кругом, программный продукт приближается к окончательному виду. Эта модель применяется для проектов с большой неопределенностью и риском.
 ^
Как определить сколько времени понадобится для разработки ПП? Допустим, что известен приблизительный объем разрабатываемого продукта в строках исходного текста. Этот объем может быть определен экспертным путем по аналогии с уже существующими разработками. Пусть KDL - объем разрабатываемого программного обеспечения в тысячах строк исходного текста. Трудоемкость (в человеко-месяцах) и время разработки программного обеспечения можно определить по модели COCOMO (COnstructive COst MOdel): E=a*KDL^b, где a,b - зависят от характеристик проекта: Для прикладных систем, разрабатываемых в существующих средах небольшими по численности коллективами (системы обработки данных, банковские системы): a=3.2; b=1.05. Разработка базового программного обеспечения (операционные системы, системы управления базами данных): a=3.0; b=1.12. Встроенные системы, системы реального времени, компьютерные системы навигации с высокими требованиями к надежности: a=2.8; b=1.20. Для уточнения трудоемкости может быть дополнительно учтен ряд показателей, объединенных в следующие группы: Показатели программного продукта: - требуемая надежность программного продукта (RELY); - объем базы данных (DATA); - сложность продукта (CPLX). Показатели ЭВМ: - наличие ограничений на время выполнения (TIME); - наличие ограничений на объем ОЗУ (STOR). Показатели разработчиков: - компетентность системного аналитика (ACAD); - опыт разработки прикладных систем (AEXP); - квалификация программистов (PCAD); - опыт работы со средой разработки (LEXP). Показатели процесса проектирования: - использование современных методов разработки программ (MODP); - использование инструментальных средств разработки программ (TOOL).
^
ОО-анализ (OOA) Цель – понимание и описание функционирования той предметной области, для которой разрабатывается программное обеспечение. Описание осуществляется в терминах классов, объектов и отношений между ними. ОО-проектирование (OOD) Цель – разработка структуры классов и объектов, соответствующих предметной области и позволяющих решить поставленные задачи. ОО-программирование (OOP) Цель – реализация на языке программирования по объектно-ориентированной методике. эволюция модификация Эволюция и развитие - это развитие и усовершенствование уже внедренного программного обеспечения.
Свойства объектно-ориентированного программирования (14)
Характерные свойства: Инкапсуляция (упрятывание) – сочетание данных с процедурами и функциями для их обработки в новый тип - объект. Наследование – определение объекта с последующим формированием иерархической структуры из подчиненных ему объектов. Каждый подчиненный объект имеет доступ к данным, процедурам и функциям вышестоящего объекта. Полиморфизм – в вышестоящем и подчиненных объектах могут быть процедуры (функции) с одним именем, но разными реализациями. Каждый объект использует свою реализацию.
^
Объект = данные + методы Метод м.б. реализован с помощью процедур, функций, конструкторов и деструкторов. Объекты описываются в секции type. type Location=object x, y: integer procedure Init(nx, ny: integer); end; var Loc: Location; Loc.Init(4, 6); Возможны атрибуты доступа: private, protected, public. Наследование: type Point=object(Location) … end; Множественное наследование запрещено. В объекте наследнике запрещено повторное определениепеременных предков (независимо от атрибутов). Переопределение методов разрешается. Инициировать нужно как переменные объекта, так и унаследованные переменные.
^
По умолчанию все методы статические. Статические методы будут связаны со своими объектами во время трансляции (раннее связывание). Виртуальные методы будут связываться во время выполнения (позднее связывание). Познее связывание дает основу полиморфизму. Если в объекте имеется хотя бы один виртуальный метод, то в нем обязательно д.б. конструктор. Конструктор д.б. явно вызван до начала работы с виртуальными методами. X=object procedure Pr; virtual; … end Obj=object(X) procedure Pr; virtual; … end; Виртуальные методы используются для того, чтобы написать в подчиненном объекте новые реализации существующих методов.
^
Конструктор должен вызываться в случае динамического создание переменных типа объект. Конструктор необходим для формирования VMT, в котором задана длина объекта. Деструктор обеспечивает доступ к VMT для определения объема освобождаемой памяти. Деструктор может не иметь в своем составе операторов, тогда он обеспечивает только связь с VMT. В общем случае в деструктор желательно включить действия, необходимые перед уничтожением экземпляра объекта. Деструктор, в отличие от конструктора, может быть виртуальным. Конструктор может содержать формальные параметры, деструктор – нет.
X=object constructor C(a, b: integer); destructor D; end;
^ Аналогично другим переменным, переменные типа объект могут динамически создаваться и уничтожаться. Для обеспечения динамического вызова в программе должен быть указатель на объект, а сам объект должен содержать конструктор (даже тогда, когда он не содержит виртуальных методов) и деструктор. Для создания экземпляра объекта используется оператор New: New(S1,Init), где S1 – указатель на объект, Init – конструктор объекта. Для уничтожения экземпляра объекта используется оператор Dispose: Dispose(S1,Done); где S1 – указатель, Done – деструктор.
^
Если в описании объекта имеются виртуальные методы, конструкторы или деструкторы, компилятор создает специальное поле – таблицу виртуального метода VMT (Virtual Method Table). Длина поля VMT 16 битов. Оно расположено в области данных и инициализируется конструктором при его вызове. Выделение в памяти места и заполнение VMT осуществляется транслятором автоматически; программисту VMT недоступно. Структура VMT: длина объекта | -длина объекта (отриц. число в доп. коде) | @ адреса точек входа всех виртуальных методов | VMT имеется в одном экземпляре для каждого объекта, имеющего виртуальные методы. Чтобы выполнялась проверка инициализации объекта нужно задать директиву {R+}
Особенности ООП на языке Object Pascal на Delphi (20)
В Delphi имеется 2 подхода к реализации ООП: Классический, унаследованный от Turbo Pascal 7.0 и ничем от него не отличающийся. Введены понятия «класс» и «объект». Автоматическим предшественником всех создаваемых классов является класс TObject. type cl1=class end; var mycl1: cl1; Здесь mycl1 – указатель на класс. Память нужно автоматически выделять. В классе обязательно д.б. конструктор. Виртуальные методы в Delphi: type cl1=class procedure Pr; virtual; procedure Qr; virtual; … end; cl2=class(cl1) procedure Pr; override; procedure Qr; virtual; {это уже другая процедура} end; Динамические методы: procedure Pr; dynamic. С точки зрения выполнения то же самое, что и virtual. Создается DMT (dynamic MT). В VMT адреса всех методов, даже предшественников, а в DMT включаются только адреса динамических методов, определенных только в данном классе.
^
КК – классы, предназначенные для хранения данных, организованных определенным образом. Например векторы, списки и т.д. Для каждого контейнера определены методы для работы с его элементами, не зависящие от конкретных типов данных, хранимых в контейнере. Есть библиотека STL – Standard Template Library. Разновидности контейнеров: последовательные (vector, deque, list, stack, queue, priority-queue) и ассоциативные (прямой доступ по ключу: map, multimap, set, multiset, bitset).
^
Вектор: #include , vector. С последовательными контейнерами связано понятие итератор. Это указатель на элементы КК. vector::iterator p; p=v.begin(); while(p!=v.end()) {cout << *p; p++;} Есть функции: size(), empty(), push_back() – добавить в конец, pop_back(), insert(место, эл-т), erase(место), at(место). Конструкторы: vector v; vector v1(10, 1); vector v2(v1);
^
Определен шаблон для создания пар значений: template struct pair { T1 first; T2 second; Pair(const T1 &x, const T2 &y); Template pair(const pair &P); }; Операции сравнения: p1 если p1.first или p1.first=p2.first и p1.second
Есть возможность определения критерия упорядочивания. Для этого служат функциональные классы. Пример: class if_greater { public: int operator () (int a, int b) const {return a>b;} }; if_greater x; cout << x(1, 5); В ассоциативных класах можно проводить поиск по значениям элементов. Словарь map: Элементы словаря – пары (ключ, значение). По умолчанию упорядочены по ключам. Повторение ключей не допускается. #include #include
Добавить документ в свой блог или на сайт
|