HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 - <p>Программы, которые пшут программисты, всегда создаются под определенную предметную область. Например, бухгалтерский софт основывается на правилах ведения бухгалтерского учета. Сайт для просмотра сериалов - на понятиях из телеиндустрии, например, сезон или эпизод.</p>
1 + <p>Программы, которые пишут программисты, всегда создаются под определенную предметную область. Например, бухгалтерский софт основывается на правилах ведения бухгалтерского учета. Сайт для просмотра сериалов - на понятиях из телеиндустрии, например, сезон или эпизод.</p>
2 <p>Это относится и к любой другой предметной области: бронирование авиабилетов, отелей, поиск туров, продажа и покупка автомобилей:</p>
2 <p>Это относится и к любой другой предметной области: бронирование авиабилетов, отелей, поиск туров, продажа и покупка автомобилей:</p>
3 <p>В этом уроке мы узнаем, что такое сущности предметной области, а также разберем связи между ними. Еще познакомимся с онтологией предметной области и узнаем, зачем она нужна.</p>
3 <p>В этом уроке мы узнаем, что такое сущности предметной области, а также разберем связи между ними. Еще познакомимся с онтологией предметной области и узнаем, зачем она нужна.</p>
4 <h2>Сущности и связи между ними</h2>
4 <h2>Сущности и связи между ними</h2>
5 <p>Предметную область программы важно понимать, как и уметь программировать. Это не значит, что ее нужно знать досконально. Иногда область может быть сложной. Например, бухгалтерия или технологическое производство. Но общее понимание все же требуется.</p>
5 <p>Предметную область программы важно понимать, как и уметь программировать. Это не значит, что ее нужно знать досконально. Иногда область может быть сложной. Например, бухгалтерия или технологическое производство. Но общее понимание все же требуется.</p>
6 <p>Рассмотрим в качестве примера Хекслет. Чтобы понимать его предметную область, нужно выделить ключевые понятия. У обучающих ресурсов это: "курс" и "урок". Но понятий может быть больше. В случае Хекслета еще можно выделить "профессию", "испытание", "code review", "квиз", "участника курса", "проект". Этот список можно продолжать еще долго.</p>
6 <p>Рассмотрим в качестве примера Хекслет. Чтобы понимать его предметную область, нужно выделить ключевые понятия. У обучающих ресурсов это: "курс" и "урок". Но понятий может быть больше. В случае Хекслета еще можно выделить "профессию", "испытание", "code review", "квиз", "участника курса", "проект". Этот список можно продолжать еще долго.</p>
7 <p>На Хекслете существует более двухсот подобных понятий. Еще их называют<strong>сущностями</strong>, и все они описаны в коде.</p>
7 <p>На Хекслете существует более двухсот подобных понятий. Еще их называют<strong>сущностями</strong>, и все они описаны в коде.</p>
8 <p>Сущности находятся в определенных взаимоотношениях друг с другом. Например, квиз содержит в себе вопросы, а каждый вопрос - ответы. Профессия состоит из курсов, а курсы - из уроков, уроки - из теории, квиза и практики. У этих связей есть конкретные названия. Например:</p>
8 <p>Сущности находятся в определенных взаимоотношениях друг с другом. Например, квиз содержит в себе вопросы, а каждый вопрос - ответы. Профессия состоит из курсов, а курсы - из уроков, уроки - из теории, квиза и практики. У этих связей есть конкретные названия. Например:</p>
9 <ul><li>Один урок может находиться только в одном курсе, но курс содержит множество уроков. Это связь<strong>один ко многим</strong>,<strong>one-to-many</strong>или<strong>o2m</strong></li>
9 <ul><li>Один урок может находиться только в одном курсе, но курс содержит множество уроков. Это связь<strong>один ко многим</strong>,<strong>one-to-many</strong>или<strong>o2m</strong></li>
10 <li>Один курс могут проходить множество пользователей, и один пользователь может проходить много курсов. Это связь<strong>многие ко многим</strong>,<strong>many-to-many</strong>или<strong>m2m</strong></li>
10 <li>Один курс могут проходить множество пользователей, и один пользователь может проходить много курсов. Это связь<strong>многие ко многим</strong>,<strong>many-to-many</strong>или<strong>m2m</strong></li>
11 </ul><ul><li>Реже встречается отношение<strong>один к одному</strong>,<strong>one-to-one</strong>или<strong>o2o</strong>. На Хекслете так связаны пользователь и эксперт</li>
11 </ul><ul><li>Реже встречается отношение<strong>один к одному</strong>,<strong>one-to-one</strong>или<strong>o2o</strong>. На Хекслете так связаны пользователь и эксперт</li>
12 </ul><p>Одна и та же сущность с точки зрения разных систем может выглядеть по-разному. Например, пользователь Хекслета с точки зрения бухгалтера и пользователь с точки зрения наставника отличаются.</p>
12 </ul><p>Одна и та же сущность с точки зрения разных систем может выглядеть по-разному. Например, пользователь Хекслета с точки зрения бухгалтера и пользователь с точки зрения наставника отличаются.</p>
13 <p>При этом не всегда можно однозначно сказать, какая связь существует между двумя сущностями. Иногда программисты думают наперед и сразу формируют более сложные связи, например, m2m, а не o2m. Это сказывается на сложности кода.</p>
13 <p>При этом не всегда можно однозначно сказать, какая связь существует между двумя сущностями. Иногда программисты думают наперед и сразу формируют более сложные связи, например, m2m, а не o2m. Это сказывается на сложности кода.</p>
14 <p>Чем сложнее связь, тем больше кода и выше стоимость его создания и поддержки. Сложность связей от простой к сложной: o2o, o2m, m2m.</p>
14 <p>Чем сложнее связь, тем больше кода и выше стоимость его создания и поддержки. Сложность связей от простой к сложной: o2o, o2m, m2m.</p>
15 <p>Иногда программист ошибается при выборе связи. Это значит, что он плохо понимает предметную область.</p>
15 <p>Иногда программист ошибается при выборе связи. Это значит, что он плохо понимает предметную область.</p>
16 <p>Предположим, что в системе нужно реализовать пользователя и заграничный паспорт. Кажется, что между этими понятиями связь один к одному. Один пользователь может иметь один заграничный паспорт. Но это не верно.</p>
16 <p>Предположим, что в системе нужно реализовать пользователя и заграничный паспорт. Кажется, что между этими понятиями связь один к одному. Один пользователь может иметь один заграничный паспорт. Но это не верно.</p>
17 <p>Паспорт может поменяться, если он был утерян или закончился срок действия. Также в некоторых странах разрешено владеть одновременно несколькими заграничными паспортами.</p>
17 <p>Паспорт может поменяться, если он был утерян или закончился срок действия. Также в некоторых странах разрешено владеть одновременно несколькими заграничными паспортами.</p>
18 <p>Программисту не нужно создавать универсальную модель области. Он должен понять потребности конкретного бизнеса, выделить для них только значимые части рассматриваемой предметной области и перенести их в код. В этом ему поможет эксперт.</p>
18 <p>Программисту не нужно создавать универсальную модель области. Он должен понять потребности конкретного бизнеса, выделить для них только значимые части рассматриваемой предметной области и перенести их в код. В этом ему поможет эксперт.</p>
19 <h2>Онтология предметной области</h2>
19 <h2>Онтология предметной области</h2>
20 <p>Описание объектов рассматриваемой области и связей между ними называется<strong>онтологией предметной области</strong>. Ее хорошо знают эксперты соответствующей области. Например, в бухгалтерии - бухгалтер, в обучении - преподаватель.</p>
20 <p>Описание объектов рассматриваемой области и связей между ними называется<strong>онтологией предметной области</strong>. Ее хорошо знают эксперты соответствующей области. Например, в бухгалтерии - бухгалтер, в обучении - преподаватель.</p>
21 <p>В отличие от программистов, эксперты в области часто представляют свою область на интуитивном уровне - неформально. На практике программисты, бизнес-аналитики или менеджеры общаются с заказчиками, которые могут сами выступать в роли экспертов и строят с ними формальную онтологию. Этот процесс происходит постоянно в процессе развития проекта и не выделяется в отдельный этап проектирования.</p>
21 <p>В отличие от программистов, эксперты в области часто представляют свою область на интуитивном уровне - неформально. На практике программисты, бизнес-аналитики или менеджеры общаются с заказчиками, которые могут сами выступать в роли экспертов и строят с ними формальную онтологию. Этот процесс происходит постоянно в процессе развития проекта и не выделяется в отдельный этап проектирования.</p>
22 <p>Создатели онтологии выделяют конкретные термины, договариваются о том, что они означают и как связаны друг с другом. Затем с помощью ER-модели программист формирует необходимую модель данных:</p>
22 <p>Создатели онтологии выделяют конкретные термины, договариваются о том, что они означают и как связаны друг с другом. Затем с помощью ER-модели программист формирует необходимую модель данных:</p>
23 <p>ER-модель используется при высокоуровневом проектировании баз данных. На этом этапе уже проявляются зачатки архитектуры будущего приложения.</p>
23 <p>ER-модель используется при высокоуровневом проектировании баз данных. На этом этапе уже проявляются зачатки архитектуры будущего приложения.</p>
24 <p>В зависимости от языка программирования будет меняться способ представления сущностей в коде. Например, в некоторых языках с помощью абстрактных типов данных, интерфейсов или классов определяются типы, в других - структуры, а в третьих не предоставляют никаких вариантов, кроме словарей - ассоциативных массивов.</p>
24 <p>В зависимости от языка программирования будет меняться способ представления сущностей в коде. Например, в некоторых языках с помощью абстрактных типов данных, интерфейсов или классов определяются типы, в других - структуры, а в третьих не предоставляют никаких вариантов, кроме словарей - ассоциативных массивов.</p>
25 <h2>Выводы</h2>
25 <h2>Выводы</h2>
26 <p>В этом уроке мы узнали, что такое сущности предметной области, а также разобрали связи между ними. Еще познакомились с онтологией предметной области. Она нужна, чтобы описывать объекты рассматриваемой области и связи между ними.</p>
26 <p>В этом уроке мы узнали, что такое сущности предметной области, а также разобрали связи между ними. Еще познакомились с онтологией предметной области. Она нужна, чтобы описывать объекты рассматриваемой области и связи между ними.</p>
27 <p>Со следующего урока мы начнем изучать различные предметные области и строить подходящие модели данных.</p>
27 <p>Со следующего урока мы начнем изучать различные предметные области и строить подходящие модели данных.</p>