Файл: Основы проектирования программ. Этапы создания программного обеспечения (ОСНОВЫ МОДЕЛИРОВАНИЯ ПРОГРАММ).pdf
Добавлен: 28.06.2023
Просмотров: 101
Скачиваний: 4
В описанной системе классов фабричные методы применяются для создания объектов, содержащий шаблоны алгоритмов для работы с объектами БД, обращается к фабрике для создания конкретного продукта. Фабричные методы абстрактной фабрики создают и возвращают конкретные продукты в зависимости от того, какая фабрика используется. При этом вызывающие объекты не знают ни конкретный класс фабрики, ни конкретный класс получаемых продуктов.
Кроме абстрактной фабрики фабричные методы определены в классе работы с БД «ADBLayer», где они создают и возвращают фильтр для поиска по конкретной таблице БД, и в классе «AGui», где они используются для создания объекта на основе выбранной по виджету таблицы записи. В обоих случаях базовые классы определяют интерфейс фабричных методов по созданию требуемых объектов, а производные классы реализуют их по своим потребностям.
1.3 Паттерн Стратегия
Паттерн Стратегия позволяет создавать семейства алгоритмов, которые являются взаимозаменяемыми, а также могут предоставлять различные вариации одного и того же метода. При этом есть возможность независимого изменять само семейство алгоритмов, т.е. стратегию.
Паттерн стратегия применяется в случаях, когда:
- существуют похожие друг на друга классы, которые различаются только реализацией существующих методов. Стратегия позволяет спроектировать класс таким образом, что будет использоваться одно из возможных поведений;
- требуется иметь несколько разных вариантов реализации алгоритма, что применяется, когда варианты алгоритмов реализованы в виде иерархии классов или когда имеется разветвленная система поведения;
- есть задача не раскрывать особенности структуры данных алгоритма.
На приведенной ниже диаграмме классов ярким представителем этого вида паттернов выступает класс «AGui». Это абстрактный класс шаблона графического интерфейса для работы с объектами. Класс содержит набор абстрактных и реальзованных функций для работы с таблицей объектов. Данный класс выполняет функцию контекста в реализации паттерна.
Атрибутами этого класса выступают виджет таблицы, указатель на объект фабрики «AFabric» и список объектов, извлеченных из БД - List<AEntity*>. Для каждого такого атрибута реализованы методы-обозреватели, а их значения устанавливаются в конструкторе класса. Объекты фабрики выполняют функции конкретных стратегий и с помощью фабричных методов позволяют создавать конкретные объекты работы с БД, использующие контекст «AGui».
Помиио приведенных функций в «AGui» реализован в том числе и полный набор операций для работы с объектами и записями объектов на форме: данные отображаются в таблице списком, либо можно посмотреть каждый объект в отдельной форме. Так были реализованы функции «Добавление сущности», «Редактирование сущности», «Просмотр сущности», «Удаление записи», «Поиск записей» и «Создание фильтра поиска». Приведенные операции реализованы в классе «AGui» так, что они оперируют абстрактными объектами ADBLayer, AFabric и AEntity.
Класс «ADBLayer» и наследуемые от него «TemplateDBLayer» и «PaperDBLayer» выполняют функции абстрактной и конкретных стратегий. Класс «ADBLayer» объявляет общий для всех поддерживаемых алгоритмов интерфейс. Заметим, что в нашем случае, данный класс определяет только набор функций, и реализация каждого алгоритма находится уже в конкретном классе. Это происходит потому, что алгоритмы значительно отличаются по используемым значениям и объектам. Класс «AGui» пользуется интерфейсом для вызова конкретного алгоритма, определенного в классе «TemplateDBLayer» или «PaperDBLayer».
Паттерн Шаблонный метод позволяет сохранять основную структуру алгоритма при переопределении некоторых функций в классах-наследниках.
Паттерн шаблонный метод используется в случаях, если:
- требуется однократно проходить симметричные части алгоритма, а отличающиеся части поведения реализованы в подклассах;
- все подклассы обладают общим поведением, только незначительно отличающимися друг от друга, т.е. необходимо выделить общее в коде и это реализовать в классе-родителе, а различия выносятся в отдельные операции, которые и будут шаблонными методами.
Шаблонные методы вызывают операции следующих видов [1]:
- конкретные операции (либо из класса ConcreteClass, либо из классов клиента);
- конкретные операции из класса AbstractClass (т.е. операции, полезные всем подклассам);
- примитивные операции (т.е. абстрактные операции);
- фабричные методы (паттерн фабричный метод);
- операции-зацепки (hook operations), реализующие поведение по умолчанию, которое может быть расширено в подклассах.
Представителем данного вида паттернов также является класс «AGui». В классе есть абстрактная функция - «Отображение в таблице», которую необходимо переопределять в классах-наследниках. Это вызвано тем, что у каждого объекта разный набор полей, следовательно нужно отображать разное количество столбцов в таблице с разными записями в ее шапке. Вызов функции происходит в шаблонных методах по работе с записями, которые определены в базовом классе.
Рассмотрим реализацию этого паттерна на примере класса «AGui» и классов-наследников «TemplateGui» и «PaperGui». AGui - абстрактный класс, определяющий операции, замещаемые в конкретных подклассах для реализации шагов алгоритма. Помимо этого, он также реализует шаблонный метод, определяющий скелет алгоритма. Шаблонный метод вызывает примитивные операции и операции, определенные в классе «AGui». В качестве примитивных операций выступают функции работы с сущностями: добавление, изменение, просмотр, поиск, которые единообразны для всех объектов.
Конкретные классы «TemplateGui» и «PaperGui» реализуют операции, коорые выполняют шаги алгоритма способом, зависящим от подкласса. В нашем примере существует лишь одна подобная операция - «Отображение в таблице» Эта операция полностью зависит от текущего объекта и реализована в конкретных классах.
Исходя из диаграммы классов, приведенной на рисунке ниже, можно выделить следующие семейства абстрактных продуктов: это классы AEntity, ADBlayer, AFabric и AGui. Данные объекты входят в иерархии связанных классов. Так, объект AEntity находится на самом нижнем уровне иерархии, но для полноценной работы программы требуется его использование во всех остальных абстрактных классах. В качестве конкретных продуктов выступают классы-наследники от каждого абстрактного продукта, а это объекты Шаблон и Отчет, TemplateDBlayer и PaperDBlayer, TemplateFabric и PaperFabric, TemplateGui и PaperGui соответственно.
Следовательно, для реализации работы с объектами использованы паттерны для обобщенности работы с классами и для четкого разграничения работы разных уровней. Все функции разделены и выделены в отдельные базовые абстрактные классы, чтобы не возникало необходимости менять код основной программы при добавлении новых данных, и при редактировании существующих.
ГЛАВА 2 ФАЗЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
2.1 Циклы разработки программного обеспечения
Подход к циклу разработки определяется исходя из потребностей проекта. В процессе создания программного обеспечения применяются разные виды жизненных циклов. Типичный цикл разработки программного обеспечения называется «каскадным» и выглядит следующим образом:
Рис. 2.1 – Цикл разработки ПО
Подготовка — это сбор и обработка требований. Предварительное планирование этапов работ, сроков, ресурсов и стоимости.
Проектирование — это получение технических заданий, разработка спецификаций. Партнер получает документальное изложение своих требований и планы проведения работ.
Создание.
Дизайн — получение графических макетов, визуальных форм, разработка интерфейсов. Создание индивидуального стиля.
Кодирование — получение исходного кода.
Тестирование — проверка программы на соответствие всем предъявляемым требованиям.
Документирование — получение возможности передачи накопленных знаний другим разработчикам.
Поддержка.
Внедрение — установка программного обеспечения и обучение пользователей.
Сопровождение — исправление выявленных ошибок и поддержка пользователей.
Второй из наиболее распространенных — гибкий цикл разработки (Agile). Он позволяет без негативных последствий изменять направление деятельности, вносить дополнительные задания, требовать детальной проработки узких мест.
Процесс создания ПО при помощи метода Agile состоит из небольших итераций — коротких циклов — спринтов, которые предстваляют собой мелкие проекты и длятся от одной до четырех недель. При завершении отдельного продуктивного периода проводится анализ и переориентирование на новые задачи следующего цикла. Количество спринтов может быть любым. Этапы приведены на рисунке ниже.
Рис. 2.2 – Планирование разработки ПО
Планирование — постановка целей и выбор действий для их реализации, распределение имеющихся ресурсов.
Разработка — практическое решение задач для создания приложения.
Тестирование — подготовка итоговой информации в целях контроля выполнения задач спринта. Анализ ошибок и причин отклонений от плана. Поиск путей исправления оплошностей.
Демонстрация — представление заказчику готовой части ПО.
Внедрение — по требованию возможно использование ПО в качестве самостоятельного продукта.
Использование гибкого цикла оправдано в крупных проектах, продолжительных по времени, при постоянно изменяющихся требованиях пользователей; и в других случаях, где невозможно точное планирование. Каскадный цикл подойдет для небольших проектов с четко определенными требованиями и при наличии специалистов нужной квалификации.
Степень риска при разработке ПО варьируется в зависимости от выбранного цикла. При гибком цикле выше вероятность возникновения неудачных архитектур, зато легче процесс устранения ошибок. При каскадном цикле архитектурные погрешности обнаруживаются в конце проекта, а исправление недостатков значительно сложнее, дольшн по времени и дороже.
Работа по методу Agile осуществляется за меньшую цену и с порционной выдачей готовых блоков. Каскадный цикл подразумевает фиксированный крупный платеж за конечный продукт, часто без демонстрации промежуточных результатов.
2.2 Этапы создания программ
Программное обеспечение – это совокупность программ, правил и процедур, сплетенных в единый искусственный разум, с целью точной и быстрой обработки информации и предоставления конечного результата. ПО может быть трех форматов: системное, прикладное и инструментальное.
1. Системное программное обеспечение является общим, не выполняющим конкретных специальных задач, и вэтом заключается его основное отличие от прикладного.
2. Прикладное ПО предназначено для непосредственного взаимодействия с пользователем и решает конкретно поставленные задачи.
3. Инструментальное программное обеспечение представляет собой набор средств для работы с другими программами. Инструментальное ПО создает, контролирует и проектирует их. К данной категории относятся текстовые редакторы, интерпретаторы, компиляторы и тому подобное.
Системное и прикладное программное обеспечение создают компании по разработке ПО. Работа с операционной системой, системой управления базами данных, утилитами и системой программирования, входят в услуги программиста, который занимаюется широким классом связующего программного обеспечения. Отсюда слеюует вывод, что для этой деятельности необходим системный программист. Для работы с программами, направленными на выполнение конкретных задач, поставленных самим пользователем, требуются прикладные программисты. Каждый вид деятельности требует уверенных знаний и большой практики, потому не стоит смешивать воедино все познания, пытаясь найти универсального специалиста. Не случайно создание программного обеспечения в ответственных организациях строго структурно распределено между специалистами, каждый из которых отвечает за конкретный участок работы и точно знает все нюансы и особенности своей деятельности. Именно поэтому не только удобно, но и целесообразно обращаться к зарекомендовавшим себя на рынке разработки ПО компаниям. Качественная разработка программного обеспечения может не только сберечь бизнес, но и значительно повысить его производительность. В то же время слабое ПО будет создавать сложности и со временем может отказать вовсе, что приведет к потере архивов с важными данными типа клиентской базы, аналитическими сведениями и так далее.