← Назад к вопросам

Какие результаты получаются в процессе объектно-ориентированного анализа?

2.0 Middle🔥 71 комментариев
#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Результаты объектно-ориентированного анализа (OOA)

Объектно-ориентированный анализ — это первый этап в методологии разработки ПО, который преобразует требования в модель объектов предметной области. Вот основные результаты этого процесса.

1. Модель сущностей и отношений (Entity-Relationship Model)

Визуальное представление всех объектов в системе и связей между ними.

# Пример диаграммы классов (результат OOA)
from dataclasses import dataclass
from typing import List
from enum import Enum

class OrderStatus(Enum):
    PENDING = "pending"
    PROCESSING = "processing"
    COMPLETED = "completed"
    CANCELLED = "cancelled"

@dataclass
class Customer:
    """Сущность: Клиент"""
    id: int
    name: str
    email: str
    phone: str
    address: str

@dataclass
class Product:
    """Сущность: Товар"""
    id: int
    name: str
    price: float
    stock: int
    category: str

@dataclass
class Order:
    """Сущность: Заказ"""
    id: int
    customer_id: int  # Отношение: заказ принадлежит клиенту
    items: List['OrderItem']
    status: OrderStatus
    total_price: float

@dataclass
class OrderItem:
    """Сущность: Товар в заказе"""
    order_id: int
    product_id: int  # Отношение: товар из прайс-листа
    quantity: int
    price_at_purchase: float

2. Определение классов объектов (Class Definitions)

Иdentification всех основных классов и их иерархии.

# Результат OOA: иерархия классов
from abc import ABC, abstractmethod

class Entity(ABC):
    """Базовый класс для всех сущностей"""
    id: int
    created_at: datetime
    updated_at: datetime
    
    @abstractmethod
    def validate(self) -> bool:
        pass

class User(Entity):
    """Абстрактный пользователь"""
    name: str
    email: str
    password_hash: str

class Customer(User):
    """Конкретный класс: клиент"""
    loyalty_points: int
    preferred_addresses: List[str]
    
    def add_loyalty_points(self, points: int) -> None:
        self.loyalty_points += points

class Admin(User):
    """Конкретный класс: администратор"""
    permissions: Set[str]
    
    def grant_permission(self, permission: str) -> None:
        self.permissions.add(permission)

3. Определение атрибутов (Attributes)

Все данные, которые хранит каждый класс.

# Результат OOA: атрибуты каждого класса
class Product:
    # Идентификаторы
    id: int
    sku: str
    
    # Основные атрибуты
    name: str
    description: str
    price: float
    cost: float
    
    # Характеристики
    category: str
    brand: str
    weight: float
    dimensions: tuple
    
    # Статус
    is_active: bool
    stock_quantity: int
    
    # Метаданные
    created_at: datetime
    updated_at: datetime
    created_by: str

4. Определение методов (Operations/Methods)

Все поведение, которое должны выполнять объекты.

# Результат OOA: методы каждого класса
class Order:
    def __init__(self):
        self.items = []
        self.status = OrderStatus.PENDING
        self.total = 0
    
    # Основные операции
    def add_item(self, product: Product, quantity: int) -> None:
        """Добавить товар в заказ"""
        pass
    
    def remove_item(self, product_id: int) -> None:
        """Удалить товар из заказа"""
        pass
    
    def calculate_total(self) -> float:
        """Рассчитать сумму заказа"""
        pass
    
    # Переходы состояния
    def confirm(self) -> bool:
        """Подтвердить заказ"""
        pass
    
    def ship(self) -> bool:
        """Отправить заказ"""
        pass
    
    def cancel(self) -> bool:
        """Отменить заказ"""
        pass
    
    # Запросы
    def get_status(self) -> OrderStatus:
        """Получить статус"""
        pass
    
    def get_items(self) -> List[OrderItem]:
        """Получить товары"""
        pass

5. Диаграмма взаимодействия объектов (Interaction Diagrams)

Последовательности операций и сообщений между объектами.

# Результат OOA: сценарии взаимодействия
class OrderService:
    """Сервис для обработки заказов"""
    
    def create_order(self, customer: Customer, items: List[OrderItem]) -> Order:
        """
        Сценарий: Создание заказа
        1. Клиент выбирает товары
        2. Система создает объект Order
        3. Система добавляет OrderItems
        4. Система рассчитывает сумму
        5. Система сохраняет в БД
        6. Система возвращает заказ
        """
        order = Order(customer_id=customer.id)
        for item in items:
            order.add_item(item.product_id, item.quantity)
        order.calculate_total()
        self.save(order)
        return order
    
    def process_payment(self, order: Order, payment: Payment) -> bool:
        """
        Сценарий: Обработка платежа
        1. Заказ переходит в статус PROCESSING
        2. Система отправляет платеж на обработку
        3. Система получает ответ от платежной системы
        4. Если успех: заказ готовится к отправке
        5. Если ошибка: заказ отменяется
        """
        order.status = OrderStatus.PROCESSING
        result = self.payment_gateway.process(payment)
        if result.success:
            order.status = OrderStatus.COMPLETED
        else:
            order.status = OrderStatus.CANCELLED
        return result.success

6. Определение ассоциаций (Associations)

Отношения между классами и их кратность.

# Результат OOA: ассоциации между классами
# One-to-Many: Один клиент может иметь много заказов
class Customer:
    orders: List[Order]  # Один ко многим

# Many-to-Many: Товар может быть в разных заказах
class Product:
    order_items: List[OrderItem]  # Многие ко многим

# One-to-One: Заказ имеет одну доставку
class Order:
    shipping: Shipping  # Один к одному

# Composition: Заказ состоит из товаров (сильная ассоциация)
class Order:
    items: List[OrderItem]  # Товары существуют только с заказом

# Aggregation: Заказ содержит ссылку на клиента (слабая ассоциация)
class Order:
    customer_id: int  # Клиент может существовать без заказа

7. Определение состояний (State Diagrams)

Все возможные состояния объектов и переходы между ними.

# Результат OOA: диаграмма состояний
from enum import Enum

class OrderStatus(Enum):
    """Возможные состояния заказа"""
    PENDING = "pending"           # Заказ создан, ожидает подтверждения
    CONFIRMED = "confirmed"       # Заказ подтвержден
    PROCESSING = "processing"     # Платеж обрабатывается
    SHIPPED = "shipped"           # Заказ отправлен
    DELIVERED = "delivered"       # Заказ доставлен
    CANCELLED = "cancelled"       # Заказ отменен
    RETURNED = "returned"         # Заказ возвращен

# Определены переходы:
# PENDING → CONFIRMED (клиент подтверждает)
# CONFIRMED → PROCESSING (система начинает обработку)
# PROCESSING → SHIPPED (товар отправлен)
# SHIPPED → DELIVERED (товар доставлен)
# Любое → CANCELLED (клиент отменяет)
# DELIVERED → RETURNED (клиент возвращает)

8. Определение целостности (Constraints)

Правила и ограничения для данных объектов.

# Результат OOA: ограничения целостности
from pydantic import BaseModel, Field, validator

class Product(BaseModel):
    """Правила целостности для товара"""
    id: int
    name: str = Field(..., min_length=1, max_length=255)
    price: float = Field(..., gt=0)  # Цена больше нуля
    cost: float = Field(..., ge=0)   # Себестоимость не отрицательная
    stock: int = Field(..., ge=0)    # Количество не отрицательное
    
    @validator("cost")
    def cost_less_than_price(cls, v, values):
        if "price" in values and v >= values["price"]:
            raise ValueError("Себестоимость должна быть меньше цены")
        return v

class Order(BaseModel):
    """Правила целостности для заказа"""
    id: int
    customer_id: int
    items: List[OrderItem] = Field(..., min_items=1)  # Минимум один товар
    
    @validator("items")
    def validate_stock(cls, v):
        for item in v:
            if item.quantity > item.product.stock:
                raise ValueError(f"Недостаточно товара {item.product.name}")
        return v

9. Использование прецедентов (Use Cases)

Сценарии взаимодействия пользователей с системой через объекты.

# Результат OOA: прецеденты (use cases)
# 1. Прецедент: "Создание заказа"
#    Действующее лицо: Клиент
#    Предусловие: Клиент авторизован
#    Основной поток:
#    - Клиент выбирает товары
#    - Система добавляет в корзину
#    - Клиент подтверждает заказ
#    - Система создает Order с OrderItems
#    - Система показывает подтверждение
#    Постусловие: Заказ создан со статусом PENDING

# 2. Прецедент: "Обработка платежа"
#    Действующее лицо: Система (процесс)
#    Предусловие: Заказ создан
#    Основной поток:
#    - Система отправляет платеж через Payment Gateway
#    - Получает результат
#    - Обновляет статус заказа
#    Постусловие: Заказ в статусе COMPLETED или CANCELLED

10. Словарь данных (Data Dictionary)

Полное описание всех сущностей и атрибутов.

Сущность: Customer (Клиент)
┌─────────────────────────────────────────────────────────┐
│ Атрибут      │ Тип       │ Описание                      │
├─────────────────────────────────────────────────────────┤
│ id           │ Integer   │ Уникальный идентификатор     │
│ name         │ String    │ Полное имя (1-255 символов)  │
│ email        │ String    │ Email для связи              │
│ phone        │ String    │ Номер телефона               │
│ address      │ String    │ Адрес доставки               │
│ created_at   │ DateTime  │ Дата регистрации             │
│ is_active    │ Boolean   │ Статус клиента               │
└─────────────────────────────────────────────────────────┘

Сущность: Order (Заказ)
┌─────────────────────────────────────────────────────────┐
│ Атрибут      │ Тип       │ Описание                      │
├─────────────────────────────────────────────────────────┤
│ id           │ Integer   │ Уникальный номер заказа      │
│ customer_id  │ FK        │ Ссылка на Customer           │
│ status       │ Enum      │ Состояние (PENDING, etc)     │
│ total_price  │ Decimal   │ Итоговая сумма               │
│ created_at   │ DateTime  │ Когда создан заказ           │
└─────────────────────────────────────────────────────────┘

Выходные документы OOA

ДокументОписаниеФормат
Диаграмма классовСтруктура объектов и связиUML Class Diagram
Диаграмма состоянийПереходы между состояниямиUML State Diagram
Диаграмма прецедентовСценарии использованияUML Use Case Diagram
Диаграмма взаимодействияПорядок операцийUML Sequence Diagram
Словарь данныхОписание сущностей и атрибутовДокумент/таблица
Ограничения целостностиПравила и валидацияPython constraints
Требования к атрибутамТипы, формы, диапазоныТаблица/документ

Практический пример полного OOA результата

# Полная модель Order Management System
from dataclasses import dataclass
from enum import Enum
from datetime import datetime
from typing import List

# Состояния
class OrderStatus(Enum):
    PENDING = "pending"
    CONFIRMED = "confirmed"
    SHIPPED = "shipped"
    DELIVERED = "delivered"
    CANCELLED = "cancelled"

# Классы объектов
@dataclass
class Customer:
    id: int
    name: str
    email: str
    phone: str

@dataclass
class Product:
    id: int
    name: str
    price: float
    stock: int

@dataclass
class OrderItem:
    product_id: int
    quantity: int
    price_at_purchase: float

@dataclass
class Order:
    id: int
    customer_id: int
    items: List[OrderItem]
    status: OrderStatus = OrderStatus.PENDING
    created_at: datetime = None
    
    def calculate_total(self) -> float:
        return sum(item.quantity * item.price_at_purchase for item in self.items)
    
    def confirm(self) -> bool:
        if self.status == OrderStatus.PENDING:
            self.status = OrderStatus.CONFIRMED
            return True
        return False
    
    def ship(self) -> bool:
        if self.status == OrderStatus.CONFIRMED:
            self.status = OrderStatus.SHIPPED
            return True
        return False

Итоговый результат OOA

Четко определённая объектная модель, которая:

  • Охватывает все требования
  • Содержит все классы, атрибуты и методы
  • Описывает все связи между объектами
  • Определяет все состояния и переходы
  • Готова для использования в следующем этапе (проектирование системы)
Какие результаты получаются в процессе объектно-ориентированного анализа? | PrepBro