Найти в Дзене

Объектная модель: сущности, классы, подклассы и объекты в программировании

Оглавление

1. Сущности: фундамент объектной модели

Сущность (entity) представляет собой абстрактное понятие, которое описывает ключевые элементы предметной области. Это высший уровень абстракции в объектной модели, помогающий выделить основные концепции системы.

Характеристики сущностей:

  • Название всегда формулируется как существительное в единственном числе ("Покупатель", "Товар", "Заказ").
  • Должны отражать реальные объекты или процессы в рамках рассматриваемой системы.
  • Не содержат конкретных атрибутов — только общее определение.

Примеры сущностей в разных системах:

  • Интернет-магазин: "Покупатель", "Товар", "Корзина", "Оплата"
  • Социальная сеть: "Пользователь", "Пост", "Комментарий", "Лайк"
  • Банковская система: "Клиент", "Счет", "Транзакция", "Кредит"

Правила работы с сущностями:

  1. Избегайте излишней абстракции. Например, вместо "Человек" в системе продаж используйте "Покупатель".
  2. Не смешивайте разные уровни детализации. Сущность "Платеж" не должна включать детали типа "Номер карты" — это уровень атрибутов класса.
  3. Используйте сущности для проектирования архитектуры перед переходом к классам.

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}")

Ключевые принципы проектирования классов:

  1. Инкапсуляция: Объединение данных и методов в одном классе.
  2. Минимализм атрибутов: Включайте только те поля, которые реально используются.
    ✅ Нужные атрибуты: имя, телефон, email
    ❌ Избыточные: номер паспорта (если не требуется для логики)
  3. Согласованность именования:
    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!")

Когда использовать подклассы:

  1. Есть общая логика для группы объектов (например, все животные имеют имя).
  2. Требуется вариативность (собаки лают, кошки мяукают).
  3. Необходимо избегать дублирования кода.

Альтернативы наследованию:

  • Композиция: Включение объектов других классов как атрибутов.
  • Интерфейсы: Определение обязательных методов без реализации.

4. Объекты: экземпляры классов

Объект — это конкретная реализация класса с:

  • Фактическими значениями атрибутов
  • Возможностью вызова методов

Пример создания объектов:

python

# Создание объекта класса Customer
customer1 = Customer("Иван Иванов", 30, "+79161234567")

# Использование метода
customer1.send_notification("Ваш заказ готов!")

Жизненный цикл объекта:

  1. Создание (инициализация атрибутов)
  2. Использование (вызов методов, изменение состояния)
  3. Уничтожение (автоматическое или ручное)

5. Типы данных в атрибутах: подробный разбор

Основные типы:

Тип - Python - JavaScript - Примеры - Особенности

Строка - str - string - Имена, адреса - Может содержать любые символы

Целое число - int - number - Возраст, количество - Без дробной части

Дробное число - float - number - Цена, вес - Точность зависит от реализации

Логический - bool - boolean - Флаги, статусы - Только True/False

Дата/время - datetime - Date - Дата рождения -Специальные методы форматирования

Специальные типы:

  • Python:
    list — изменяемые коллекции
    tuple — неизменяемые последовательности
    dict — словари (ключ-значение)
  • JavaScript:
    null — явное отсутствие значения
    undefined — неинициализированная переменная
    enum — перечисляемые значения

Практические рекомендации:

  1. Для текстовых идентификаторов всегда используйте строки, даже если содержимое — цифры (номера телефонов, почтовые индексы).
  2. Числовые типы выбирайте по смыслу:
    int — для подсчета объектов
    float — для финансовых операций
  3. Даты никогда не храните строками — только специализированными типами.

Заключение: от абстракции к реализации

  1. Сущности определяют "что существует" в системе.
  2. Классы реализуют сущности в коде через атрибуты и методы.
  3. Подклассы позволяют создавать специализированные версии классов.
  4. Объекты — конкретные экземпляры с реальными данными.

Пример полного цикла:

Сущность "Платеж"
→ Класс Payment (атрибуты: amount, currency, status)
→ Подкласс CardPayment (доп. атрибут card_number)
→ Объект payment_123 (amount=1000, currency="RUB", status="completed")

Правильное проектирование объектной модели — это баланс между:

  • Гибкостью (возможность расширения)
  • Четкостью (однозначное понимание структуры)
  • Производительностью (оптимальное использование ресурсов)