# 13. Цикл разработки ПО с использованием ООП: анализ, проектирование, эволюция, модификация.

## Цикл разработки ПО с использованием ООП

Разработка программного обеспечения (ПО) с использованием объектно-ориентированного программирования (ООП) проходит через несколько ключевых этапов. Каждый этап имеет свои методы и цели, направленные на создание качественного и поддерживаемого кода.

### **Основные этапы разработки ПО**

1. **Анализ требований**

   * **Цель**: Понять, что именно должно делать ПО.
   * **Действия**:
     * Собрать требования от заказчика и конечных пользователей.
     * Провести анализ предметной области.
     * Определить основные объекты и их поведение.
   * **Продукты**:
     * Документ с требованиями.
     * Диаграммы классов, показывающие ключевые сущности.

   ```plaintext
   Пример: Разработка системы управления заказами для интернет-магазина. На этапе анализа будут определены основные сущности, такие как «Заказ», «Покупатель», «Товар» и их взаимосвязи.
   ```
2. **Проектирование**

   * **Цель**: Спроектировать структуру системы, определив классы, их свойства и методы, а также взаимодействие между ними.
   * **Действия**:
     * Разработка архитектуры системы.
     * Определение классов и их отношений.
     * Спецификация интерфейсов и модулей.
   * **Продукты**:
     * Диаграммы классов и объектов.
     * Диаграммы взаимодействия.
     * Техническая документация.

   ```plaintext
   Пример: Проектирование системы управления заказами. На этом этапе будут разработаны классы «Order», «Customer», «Product» и «OrderLine», а также их взаимодействие.
   ```
3. **Реализация (Кодирование)**

   * **Цель**: Написать программный код в соответствии с проектом.
   * **Действия**:
     * Написание кода классов и методов.
     * Проведение модульного тестирования.
   * **Продукты**:
     * Исходный код программы.
     * Тесты и тестовые данные.

   ```cpp
   // Пример реализации класса Order
   class Order {
   private:
       std::vector<OrderLine> orderLines;
   public:
       void addProduct(const Product& product, int quantity) {
           orderLines.push_back(OrderLine(product, quantity));
       }
       double calculateTotal() const {
           double total = 0.0;
           for (const auto& line : orderLines) {
               total += line.getTotalPrice();
           }
           return total;
       }
   };
   ```
4. **Тестирование**

   * **Цель**: Убедиться, что ПО работает правильно и соответствует требованиям.
   * **Действия**:
     * Проведение функционального тестирования.
     * Проведение интеграционного тестирования.
     * Проведение приемочного тестирования.
   * **Продукты**:
     * Тестовые планы и результаты.
     * Исправления кода на основе обнаруженных ошибок.

   ```plaintext
   Пример: Тестирование функции addProduct класса Order на добавление товара с корректным количеством.
   ```
5. **Внедрение**

   * **Цель**: Развернуть ПО в рабочей среде.
   * **Действия**:
     * Установка ПО.
     * Настройка окружения.
     * Обучение пользователей.
   * **Продукты**:
     * Развернутая система.
     * Документация для пользователей.

   ```plaintext
   Пример: Установка системы управления заказами на сервер интернет-магазина и обучение персонала по работе с системой.
   ```
6. **Поддержка и эволюция**

   * **Цель**: Обеспечить бесперебойную работу ПО и адаптировать его к новым требованиям.
   * **Действия**:
     * Исправление ошибок.
     * Обновление системы в ответ на изменения требований.
     * Оптимизация производительности.
   * **Продукты**:
     * Обновления и патчи.
     * Новые версии ПО.

   ```plaintext
   Пример: Добавление новой функции в систему управления заказами для поддержки скидок на товары.
   ```

## Рабочие продукты объектно-ориентированного анализа

1. **Модель предметной области**
   * Описание основных сущностей, атрибутов и связей.
   * Диаграммы классов предметной области.
2. **Сценарии использования (Use Case)**
   * Описание взаимодействий между пользователями и системой.
   * Диаграммы сценариев использования.
3. **Диаграммы классов и объектов**

   * Определение классов, их атрибутов и методов.
   * Показ взаимоотношений между объектами.

   ```plaintext
   Пример: Диаграмма классов для системы управления заказами, включающая классы Order, Customer, Product и их связи.
   ```
4. **Диаграммы взаимодействий**

   * Описание последовательности взаимодействий между объектами.
   * Диаграммы последовательностей и сотрудничества.

   ```plaintext
   Пример: Диаграмма последовательностей для процесса размещения заказа в интернет-магазине.
   ```
5. **Модели состояний и переходов**

   * Описание жизненного цикла объектов и их реакций на события.
   * Диаграммы состояний.

   ```plaintext
   Пример: Диаграмма состояний для объекта Order, включающая состояния "Создан", "Обработан", "Доставлен" и "Завершен".
   ```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://frogs-organization-2.gitbook.io/oop.-sbornik./13.-cikl-razrabotki-po-s-ispolzovaniem-oop-analiz-proektirovanie-evolyuciya-modifikaciya..md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
