Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Онтология Python: Абстракция с помощью данных

Программы, которые пишут программисты, всегда создаются под определенную предметную область. Например, бухгалтерский софт основывается на правилах ведения бухгалтерского учета. Сайт для просмотра сериалов — на понятиях из телеиндустрии, например, сезон или эпизод.

Это относится и к любой другой предметной области: бронирование авиабилетов, отелей, поиск туров, продажа и покупка автомобилей:

Domain

В этом уроке мы узнаем, что такое сущности предметной области, а также разберем связи между ними. Еще познакомимся с онтологией предметной области и узнаем, зачем она нужна.

Сущности и связи между ними

Предметную область программы важно понимать, как и уметь программировать. Это не значит, что ее нужно знать досконально. Иногда область может быть сложной. Например, бухгалтерия или технологическое производство. Но общее понимание все же требуется.

Рассмотрим в качестве примера Хекслет. Чтобы понимать его предметную область, нужно выделить ключевые понятия. У обучающих ресурсов это: «курс» и «урок». Но понятий может быть больше. В случае Хекслета еще можно выделить «профессию», «испытание», «code review», «квиз», «участника курса», «проект». Этот список можно продолжать еще долго.

На Хекслете существует более двухсот подобных понятий. Еще их называют сущностями, и все они описаны в коде.

Сущности находятся в определенных взаимоотношениях друг с другом. Например, квиз содержит в себе вопросы, а каждый вопрос — ответы. Профессия состоит из курсов, а курсы — из уроков, уроки — из теории, квиза и практики. У этих связей есть конкретные названия. Например:

  • Один урок может находиться только в одном курсе, но курс содержит множество уроков. Это связь один ко многим, one-to-many или o2m
  • Один курс могут проходить множество пользователей, и один пользователь может проходить много курсов. Это связь многие ко многим, many-to-many или m2m
  • Реже встречается отношение один к одному, one-to-one или o2o. На Хекслете так связаны пользователь и эксперт

ERD

Одна и та же сущность с точки зрения разных систем может выглядеть по-разному. Например, пользователь Хекслета с точки зрения бухгалтера и пользователь с точки зрения наставника отличаются.

При этом не всегда можно однозначно сказать, какая связь существует между двумя сущностями. Иногда программисты думают наперед и сразу формируют более сложные связи, например, m2m, а не o2m. Это сказывается на сложности кода.

Чем сложнее связь, тем больше кода и выше стоимость его создания и поддержки. Сложность связей от простой к сложной: o2o, o2m, m2m.

Иногда программист ошибается при выборе связи. Это значит, что он плохо понимает предметную область.

Предположим, что в системе нужно реализовать пользователя и заграничный паспорт. Кажется, что между этими понятиями связь один к одному. Один пользователь может иметь один заграничный паспорт. Но это не верно.

Паспорт может поменяться, если он был утерян или закончился срок действия. Также в некоторых странах разрешено владеть одновременно несколькими заграничными паспортами.

Программисту не нужно создавать универсальную модель области. Он должен понять потребности конкретного бизнеса, выделить для них только значимые части рассматриваемой предметной области и перенести их в код. В этом ему поможет эксперт.

Онтология предметной области

Описание объектов рассматриваемой области и связей между ними называется онтологией предметной области. Ее хорошо знают эксперты соответствующей области. Например, в бухгалтерии — бухгалтер, в обучении — преподаватель.

В отличие от программистов, эксперты в области часто представляют свою область на интуитивном уровне — неформально. На практике программисты, бизнес-аналитики или менеджеры общаются с заказчиками, которые могут сами выступать в роли экспертов и строят с ними формальную онтологию. Этот процесс происходит постоянно в процессе развития проекта и не выделяется в отдельный этап проектирования.

Создатели онтологии выделяют конкретные термины, договариваются о том, что они означают и как связаны друг с другом. Затем с помощью ER-модели программист формирует необходимую модель данных:

DDD

ER-модель используется при высокоуровневом проектировании баз данных. На этом этапе уже проявляются зачатки архитектуры будущего приложения.

В зависимости от языка программирования будет меняться способ представления сущностей в коде. Например, в некоторых языках с помощью абстрактных типов данных, интерфейсов или классов определяются типы, в других — структуры, а в третьих не предоставляют никаких вариантов, кроме словарей — ассоциативных массивов.

Выводы

В этом уроке мы узнали, что такое сущности предметной области, а также разобрали связи между ними. Еще познакомились с онтологией предметной области. Она нужна, чтобы описывать объекты рассматриваемой области и связи между ними.

Со следующего урока мы начнем изучать различные предметные области и строить подходящие модели данных.


Дополнительные материалы

  1. Онтология
  2. Предметно-ориентированное проектирование
  3. ER-модель

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 28 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»