1. Сущности: фундамент объектной модели
Сущность (entity) представляет собой абстрактное понятие, которое описывает ключевые элементы предметной области. Это высший уровень абстракции в объектной модели, помогающий выделить основные концепции системы.
Характеристики сущностей:
- Название всегда формулируется как существительное в единственном числе ("Покупатель", "Товар", "Заказ").
- Должны отражать реальные объекты или процессы в рамках рассматриваемой системы.
- Не содержат конкретных атрибутов — только общее определение.
Примеры сущностей в разных системах:
- Интернет-магазин: "Покупатель", "Товар", "Корзина", "Оплата"
- Социальная сеть: "Пользователь", "Пост", "Комментарий", "Лайк"
- Банковская система: "Клиент", "Счет", "Транзакция", "Кредит"
Правила работы с сущностями:
- Избегайте излишней абстракции. Например, вместо "Человек" в системе продаж используйте "Покупатель".
- Не смешивайте разные уровни детализации. Сущность "Платеж" не должна включать детали типа "Номер карты" — это уровень атрибутов класса.
- Используйте сущности для проектирования архитектуры перед переходом к классам.
2. Классы: реализация сущностей в коде
Класс (class) — это программный шаблон, который определяет:
- Атрибуты (данные)
- Методы (действия)
для всех объектов этого класса.
Структура класса:
python
class Customer: # Название класса (существительное в единственном числе)
def __init__(self, name, age, phone):
self.name = name # Атрибут (строка)
self.age = age # Атрибут (число)
self.phone = phone # Атрибут (строка)
def send_notification(self, message): # Метод
print(f"SMS to {self.phone}: {message}")
Ключевые принципы проектирования классов:
- Инкапсуляция: Объединение данных и методов в одном классе.
- Минимализм атрибутов: Включайте только те поля, которые реально используются.
✅ Нужные атрибуты: имя, телефон, email
❌ Избыточные: номер паспорта (если не требуется для логики) - Согласованность именования:
Python: Customer, Product, Order
Java/C#: Customer, Product, Order
Пример класса "Покупатель" с обоснованием атрибутов:
Атрибут - Тип данных - Обоснование
name - str- Идентификация пользователя
age - int- Для возрастных ограничений и аналитики
phone - str - Контакт для уведомлений
is_subscribed - bool - Управление рассылкой
3. Подклассы: специализация классов
Подкласс (наследник) расширяет функциональность родительского класса, добавляя:
- Новые атрибуты
- Дополнительные методы
- Специфическое поведение
Пример иерархии:
python
class Animal: # Базовый класс
def __init__(self, name):
self.name = name
class Dog(Animal): # Подкласс
def bark(self):
print("Woof!")
class Cat(Animal): # Подкласс
def meow(self):
print("Meow!")
Когда использовать подклассы:
- Есть общая логика для группы объектов (например, все животные имеют имя).
- Требуется вариативность (собаки лают, кошки мяукают).
- Необходимо избегать дублирования кода.
Альтернативы наследованию:
- Композиция: Включение объектов других классов как атрибутов.
- Интерфейсы: Определение обязательных методов без реализации.
4. Объекты: экземпляры классов
Объект — это конкретная реализация класса с:
- Фактическими значениями атрибутов
- Возможностью вызова методов
Пример создания объектов:
python
# Создание объекта класса Customer
customer1 = Customer("Иван Иванов", 30, "+79161234567")
# Использование метода
customer1.send_notification("Ваш заказ готов!")
Жизненный цикл объекта:
- Создание (инициализация атрибутов)
- Использование (вызов методов, изменение состояния)
- Уничтожение (автоматическое или ручное)
5. Типы данных в атрибутах: подробный разбор
Основные типы:
Тип - Python - JavaScript - Примеры - Особенности
Строка - str - string - Имена, адреса - Может содержать любые символы
Целое число - int - number - Возраст, количество - Без дробной части
Дробное число - float - number - Цена, вес - Точность зависит от реализации
Логический - bool - boolean - Флаги, статусы - Только True/False
Дата/время - datetime - Date - Дата рождения -Специальные методы форматирования
Специальные типы:
- Python:
list — изменяемые коллекции
tuple — неизменяемые последовательности
dict — словари (ключ-значение) - JavaScript:
null — явное отсутствие значения
undefined — неинициализированная переменная
enum — перечисляемые значения
Практические рекомендации:
- Для текстовых идентификаторов всегда используйте строки, даже если содержимое — цифры (номера телефонов, почтовые индексы).
- Числовые типы выбирайте по смыслу:
int — для подсчета объектов
float — для финансовых операций - Даты никогда не храните строками — только специализированными типами.
Заключение: от абстракции к реализации
- Сущности определяют "что существует" в системе.
- Классы реализуют сущности в коде через атрибуты и методы.
- Подклассы позволяют создавать специализированные версии классов.
- Объекты — конкретные экземпляры с реальными данными.
Пример полного цикла:
Сущность "Платеж"
→ Класс Payment (атрибуты: amount, currency, status)
→ Подкласс CardPayment (доп. атрибут card_number)
→ Объект payment_123 (amount=1000, currency="RUB", status="completed")
Правильное проектирование объектной модели — это баланс между:
- Гибкостью (возможность расширения)
- Четкостью (однозначное понимание структуры)
- Производительностью (оптимальное использование ресурсов)