Файл: Основы проектирования программ. Этапы создания программного обеспечения (ГЛАВА 1. ОСНОВЫ ПРОЕКТИРОВАНИЯ ПРОГРАММ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 04.07.2023

Просмотров: 76

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

В представленной системе классов фабричные методы используются для создания объектов, используемых в шаблоне графического интерфейса. Класс «AGui», который содержит шаблоны алгоритмов для работы с объектами БД, обращается к фабрике для создания конкретного продукта. Фабричные методы абстрактной фабрики создают и возвращают конкретные продукты в зависимости от того, какая именно фабрика используется. При этом вызывающие объекты не знают ни конкретный класс фабрики, ни конкретный класс получаемых продуктов.

Кроме абстрактной фабрики фабричные методы определены в классе работы с БД «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. Инструментальное программное обеспечение представляет собой набор средств для работы с другими программами. Инструментальное ПО создает, контролирует и проектирует их. К данной категории относятся текстовые редакторы, интерпретаторы, компиляторы и так далее.

Системное и прикладное программное обеспечение создают компании по разработке ПО. Работа с операционной системой, системой управления базами данных, утилитами и системой программирования, входят в услуги программиста занимающегося широким классом связующего программного обеспечения. То есть, для этой деятельности необходим системный программист. Для работы с программами направленными на выполнение конкретных задач поставленных пользователями, требуются прикладные программисты. Каждый вид деятельности заслуживает уверенных знаний и большой практики, потому не стоит смешивать воедино все познания в одном специалисте. Не напрасно создание программного обеспечения в ответственных организациях строго распределяется между специалистами, каждый отвечает за свой участок работы и точно знает все нюансы и сложности своей деятельности. Именно поэтому, не только удобно, но и выгодно обращаться к зарекомендовавшим себя на рынке разработки ПО компаниям. Качественная разработка программного обеспечения, бизнес может не только сберечь но и значительно продвинуть. В то время как слабое ПО будет создавать сложности и со временем может отказать вовсе, погубив архивы с необходимыми важными данными типа клиентской базы, аналитическими сведениями и так далее.