HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>7 авг 2023</li>
2 <ul><li>7 авг 2023</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Разбираемся, что собой представляет язык стрелочек и кружочков, который используют все айтишники.</p>
4 </ul><p>Разбираемся, что собой представляет язык стрелочек и кружочков, который используют все айтишники.</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6 <p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
6 <p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
7 <p>Чтобы грамотно проектировать приложения, используют схемы. Они помогают разработчикам понять, как выглядит вся архитектура целиком и как устроены отдельные её части.</p>
7 <p>Чтобы грамотно проектировать приложения, используют схемы. Они помогают разработчикам понять, как выглядит вся архитектура целиком и как устроены отдельные её части.</p>
8 <p>Но схемы можно делать по-разному - например, одни проектировщики будут использовать кружки для обозначения классов, а другие - квадраты. И как тогда обычным программистам разобраться, где класс, а где не класс? Ответ - с помощью популярного языка для схем и моделей - UML.</p>
8 <p>Но схемы можно делать по-разному - например, одни проектировщики будут использовать кружки для обозначения классов, а другие - квадраты. И как тогда обычным программистам разобраться, где класс, а где не класс? Ответ - с помощью популярного языка для схем и моделей - UML.</p>
9 <p>В этой статье мы разберёмся, что это за язык и зачем он нужен, а также научимся различать разные типы фигур и построим свои первые диаграммы.</p>
9 <p>В этой статье мы разберёмся, что это за язык и зачем он нужен, а также научимся различать разные типы фигур и построим свои первые диаграммы.</p>
10 <p>Вы узнаете:</p>
10 <p>Вы узнаете:</p>
11 <ul><li><a>Что это за язык</a></li>
11 <ul><li><a>Что это за язык</a></li>
12 <li><a>Для чего он нужен</a></li>
12 <li><a>Для чего он нужен</a></li>
13 <li><a>Какие у него преимущества и недостатки</a></li>
13 <li><a>Какие у него преимущества и недостатки</a></li>
14 <li><a>Что такое UML-диаграмма</a></li>
14 <li><a>Что такое UML-диаграмма</a></li>
15 <li><a>Из чего она состоит</a></li>
15 <li><a>Из чего она состоит</a></li>
16 <li><a>Каких бывает видов</a></li>
16 <li><a>Каких бывает видов</a></li>
17 <li><a>Как построить собственную</a></li>
17 <li><a>Как построить собственную</a></li>
18 <li><a>Что запомнить</a></li>
18 <li><a>Что запомнить</a></li>
19 </ul><p><strong>UML</strong>, или<strong>Unified Modeling Language</strong>, - это унифицированный язык моделирования. Его используют, чтобы создавать диаграммы и схемы для визуализации процессов и явлений.</p>
19 </ul><p><strong>UML</strong>, или<strong>Unified Modeling Language</strong>, - это унифицированный язык моделирования. Его используют, чтобы создавать диаграммы и схемы для визуализации процессов и явлений.</p>
20 <p>Слово "унифицированный" означает, что схемы на UML будут понятны всем, кто знаком с ним. То есть у языка есть определённые правила, по которым применяются все стрелочки, кружки и квадраты.</p>
20 <p>Слово "унифицированный" означает, что схемы на UML будут понятны всем, кто знаком с ним. То есть у языка есть определённые правила, по которым применяются все стрелочки, кружки и квадраты.</p>
21 <p>Давайте на примере разберём, о каких процессах и явлениях мы вообще говорим.</p>
21 <p>Давайте на примере разберём, о каких процессах и явлениях мы вообще говорим.</p>
22 <p>Представьте, что у нас есть простой сайт, который работает на сервере. К нему подключена база данных, где хранится информация о посетителях и их действиях. Когда пользователь заходит на сайт, он сначала отправляет запрос на сервер, а тот делает запрос в базу данных и возвращает информацию обратно пользователю. И так происходит до тех пор, пока не будет закрыта страница сайта.</p>
22 <p>Представьте, что у нас есть простой сайт, который работает на сервере. К нему подключена база данных, где хранится информация о посетителях и их действиях. Когда пользователь заходит на сайт, он сначала отправляет запрос на сервер, а тот делает запрос в базу данных и возвращает информацию обратно пользователю. И так происходит до тех пор, пока не будет закрыта страница сайта.</p>
23 <p>Визуально такое взаимодействие можно представить так:</p>
23 <p>Визуально такое взаимодействие можно представить так:</p>
24 Схема простая: пользователь → сайт → база данных. И в обратном порядке<em>Инфографика: Оля Ежак для Skillbox Media</em><p>Только что мы описали процесс - как пользователь взаимодействует с нашим сайтом. Правда, сделали это в очень упрощённом виде и не по правилам языка UML. К примеру, мы могли вместо картинки компьютера использовать картинку ноутбука или вообще консоли. А направление запросов обозначать с помощью эмодзи:</p>
24 Схема простая: пользователь → сайт → база данных. И в обратном порядке<em>Инфографика: Оля Ежак для Skillbox Media</em><p>Только что мы описали процесс - как пользователь взаимодействует с нашим сайтом. Правда, сделали это в очень упрощённом виде и не по правилам языка UML. К примеру, мы могли вместо картинки компьютера использовать картинку ноутбука или вообще консоли. А направление запросов обозначать с помощью эмодзи:</p>
25 Поменяли обозначения, но процесс не изменился<em>Инфографика: Оля Ежак для Skillbox Media</em><p>По сути ничего не поменялось, но, когда на схему посмотрит кто-то, кто не создавал её, он ничего не поймёт. Возникнет единственный вопрос: "Что вообще тут происходит???"</p>
25 Поменяли обозначения, но процесс не изменился<em>Инфографика: Оля Ежак для Skillbox Media</em><p>По сути ничего не поменялось, но, когда на схему посмотрит кто-то, кто не создавал её, он ничего не поймёт. Возникнет единственный вопрос: "Что вообще тут происходит???"</p>
26 <p>Чтобы не возникало непонимания того, какие фигуры что обозначают, как раз и придумали язык UML. Если мы знаем его, то сможем понять любую диаграмму, которую увидим.</p>
26 <p>Чтобы не возникало непонимания того, какие фигуры что обозначают, как раз и придумали язык UML. Если мы знаем его, то сможем понять любую диаграмму, которую увидим.</p>
27 <p>UML нужен, чтобы превращать абстракции в визуальные модели и схемы. Поэтому применять его можно во многих областях:</p>
27 <p>UML нужен, чтобы превращать абстракции в визуальные модели и схемы. Поэтому применять его можно во многих областях:</p>
28 <ul><li>в программировании - чтобы наглядно видеть связи между классами и другими частями приложения или чтобы построить карту поведения пользователя на сайте;</li>
28 <ul><li>в программировании - чтобы наглядно видеть связи между классами и другими частями приложения или чтобы построить карту поведения пользователя на сайте;</li>
29 <li>в дизайне - чтобы создавать интерфейсы и понимать, как пользователи будут взаимодействовать с ними;</li>
29 <li>в дизайне - чтобы создавать интерфейсы и понимать, как пользователи будут взаимодействовать с ними;</li>
30 <li>в бизнесе - чтобы визуально представлять, как работают бизнес-процессы или ведётся документооборот в организации.</li>
30 <li>в бизнесе - чтобы визуально представлять, как работают бизнес-процессы или ведётся документооборот в организации.</li>
31 </ul><p>При этом процессы можно проектировать с нуля или брать уже существующие и описывать в виде UML-диаграмм. Например, вот так схематично выглядит устройство базы данных музыкального сервиса:</p>
31 </ul><p>При этом процессы можно проектировать с нуля или брать уже существующие и описывать в виде UML-диаграмм. Например, вот так схематично выглядит устройство базы данных музыкального сервиса:</p>
32 К пользователю привязаны две таблицы - с музыкантами, на которых он подписан, и с понравившимися ему аудиозаписями<em>Скриншот: draw.io / Skillbox Media</em><p>Базы данных могут быть сложнее, и для работы с ними как раз и пригодится язык UML. Например, вот как выглядит диаграмма для интернет-магазина:</p>
32 К пользователю привязаны две таблицы - с музыкантами, на которых он подписан, и с понравившимися ему аудиозаписями<em>Скриншот: draw.io / Skillbox Media</em><p>Базы данных могут быть сложнее, и для работы с ними как раз и пригодится язык UML. Например, вот как выглядит диаграмма для интернет-магазина:</p>
33 Эта диаграмма описывает базу данных интернет-магазина<em>Изображение: Skillbox Media</em><p>Не бойтесь, что всё выглядит так сложно. Это только потому, что мы ещё не разобрались со стандартными обозначениями. В конце статьи можете вернуться сюда и понять, что всё просто.</p>
33 Эта диаграмма описывает базу данных интернет-магазина<em>Изображение: Skillbox Media</em><p>Не бойтесь, что всё выглядит так сложно. Это только потому, что мы ещё не разобрались со стандартными обозначениями. В конце статьи можете вернуться сюда и понять, что всё просто.</p>
34 <p>Теперь поговорим о преимуществах и недостатках UML, а затем начнём уже наконец разбирать диаграммы.</p>
34 <p>Теперь поговорим о преимуществах и недостатках UML, а затем начнём уже наконец разбирать диаграммы.</p>
35 <p>Нарисовать схему может любой - для этого даже не нужен никакой язык моделирования. Достаточно графического редактора. Но если вы хотите, чтобы эти схемы понимали не только вы, но и другие разработчики, то стоит присмотреться именно к UML. У него есть несколько аргументов в кармане.</p>
35 <p>Нарисовать схему может любой - для этого даже не нужен никакой язык моделирования. Достаточно графического редактора. Но если вы хотите, чтобы эти схемы понимали не только вы, но и другие разработчики, то стоит присмотреться именно к UML. У него есть несколько аргументов в кармане.</p>
36 <ul><li><strong>Универсальность.</strong>У каждого элемента в UML-диаграммах строго определённое значение, которое не меняется в зависимости от отрасли, страны или предпочтений разработчика. Поэтому если вы знаете базовый синтаксис, то сможете разобраться практически в любой схеме. Это как математические теоремы: их понимают одинаково во всём мире.</li>
36 <ul><li><strong>Универсальность.</strong>У каждого элемента в UML-диаграммах строго определённое значение, которое не меняется в зависимости от отрасли, страны или предпочтений разработчика. Поэтому если вы знаете базовый синтаксис, то сможете разобраться практически в любой схеме. Это как математические теоремы: их понимают одинаково во всём мире.</li>
37 <li><strong>Простота и визуализация.</strong>Любую информацию легче понять, если она представлена в виде картинки, а UML как раз про это. В диаграммах используют знакомые всем объекты: фигуры и стрелки. По ним легко понять, как устроена структура целиком, даже если вы не особо знакомы с языком.</li>
37 <li><strong>Простота и визуализация.</strong>Любую информацию легче понять, если она представлена в виде картинки, а UML как раз про это. В диаграммах используют знакомые всем объекты: фигуры и стрелки. По ним легко понять, как устроена структура целиком, даже если вы не особо знакомы с языком.</li>
38 <li><strong>Распространённость.</strong>UML - понятный и простой язык, поэтому его используют во многих областях, например в IT, инженерии и менеджменте. При этом диаграммы из одной сферы смогут без особых усилий понять и в другой, хотя нюансы, конечно, есть.</li>
38 <li><strong>Распространённость.</strong>UML - понятный и простой язык, поэтому его используют во многих областях, например в IT, инженерии и менеджменте. При этом диаграммы из одной сферы смогут без особых усилий понять и в другой, хотя нюансы, конечно, есть.</li>
39 <li><strong>Возможность автоматизации и реверс-инжиниринга.</strong>Язык поддерживает много инструментов для автоматизации моделирования. Например, можно генерировать код прямо из UML-диаграмм - для этого есть такие инструменты, как<a>Umbrello</a>. Это же помогает, когда нужно провести ревёрс-инжиниринг и понять, как работает система без документации.</li>
39 <li><strong>Возможность автоматизации и реверс-инжиниринга.</strong>Язык поддерживает много инструментов для автоматизации моделирования. Например, можно генерировать код прямо из UML-диаграмм - для этого есть такие инструменты, как<a>Umbrello</a>. Это же помогает, когда нужно провести ревёрс-инжиниринг и понять, как работает система без документации.</li>
40 </ul><p>Теперь о неприятном - о недостатках языка UML. Они тоже есть, и об этом точно стоит помнить, прежде чем использовать его для ваших проектов.</p>
40 </ul><p>Теперь о неприятном - о недостатках языка UML. Они тоже есть, и об этом точно стоит помнить, прежде чем использовать его для ваших проектов.</p>
41 <ul><li><strong>Объёмная документация.</strong>Если решитесь изучить язык, практически сразу же наткнётесь<a>на его документацию</a>. И она удивит вас тем, что там 700 страниц… Хотя читать всю необязательно - достаточно обращаться к ней, когда возникнут вопросы об элементах.</li>
41 <ul><li><strong>Объёмная документация.</strong>Если решитесь изучить язык, практически сразу же наткнётесь<a>на его документацию</a>. И она удивит вас тем, что там 700 страниц… Хотя читать всю необязательно - достаточно обращаться к ней, когда возникнут вопросы об элементах.</li>
42 <li><strong>Сложность использования и поддержки проектов.</strong>Некоторые инструменты для работы с UML могут показаться сложными или недостаточно интуитивными. А это добавляет трудности в освоении и использовании.</li>
42 <li><strong>Сложность использования и поддержки проектов.</strong>Некоторые инструменты для работы с UML могут показаться сложными или недостаточно интуитивными. А это добавляет трудности в освоении и использовании.</li>
43 <li><strong>Семантическая неоднозначность.</strong>Язык не всегда придерживается строгих обозначений, и это усложняет работу с ним. Некоторые элементы можно интерпретировать по-разному, что приводит к проблемам интерпретации. Особенно ярко это видно в диаграммах активности и последовательности. Но о них дальше.</li>
43 <li><strong>Семантическая неоднозначность.</strong>Язык не всегда придерживается строгих обозначений, и это усложняет работу с ним. Некоторые элементы можно интерпретировать по-разному, что приводит к проблемам интерпретации. Особенно ярко это видно в диаграммах активности и последовательности. Но о них дальше.</li>
44 <li><strong>Несовместимость с мелкими проектами.</strong>UML разработали, чтобы моделировать большие и сложные системы. Поэтому использовать его для небольших - это избыточно и неэффективно. Так вы только усложните разработку и потратите ресурсы на менее значимые вещи.</li>
44 <li><strong>Несовместимость с мелкими проектами.</strong>UML разработали, чтобы моделировать большие и сложные системы. Поэтому использовать его для небольших - это избыточно и неэффективно. Так вы только усложните разработку и потратите ресурсы на менее значимые вещи.</li>
45 </ul><p>Плюсов у языка достаточно, и они перешивают минусы, поэтому использовать его точно стоит. Теперь перейдём к самим диаграммам, чтобы понять, как они устроены.</p>
45 </ul><p>Плюсов у языка достаточно, и они перешивают минусы, поэтому использовать его точно стоит. Теперь перейдём к самим диаграммам, чтобы понять, как они устроены.</p>
46 <p><strong>UML-диаграмма</strong> - это просто схема, которую сделали по правилам языка UML. Обычно в ней есть элементы и связи между ними, а также дополнительные объекты, которые помогают лучше понять диаграмму.</p>
46 <p><strong>UML-диаграмма</strong> - это просто схема, которую сделали по правилам языка UML. Обычно в ней есть элементы и связи между ними, а также дополнительные объекты, которые помогают лучше понять диаграмму.</p>
47 <p>С помощью UML-схем можно описывать разные процессы и явления. Это мы уже усвоили. Примеры таких диаграмм - зависимости частей приложения друг от друга, описание классов в коде, планировка магазина или архитектура ноутбука.</p>
47 <p>С помощью UML-схем можно описывать разные процессы и явления. Это мы уже усвоили. Примеры таких диаграмм - зависимости частей приложения друг от друга, описание классов в коде, планировка магазина или архитектура ноутбука.</p>
48 <p>Вот так выглядит простая диаграмма, которая описывает связи между классами в коде:</p>
48 <p>Вот так выглядит простая диаграмма, которая описывает связи между классами в коде:</p>
49 Ура, появились какие-то обозначения<em>Скриншот: draw.io / Skillbox Media</em><p>На диаграмме есть три класса: Студент, Учитель и Человек. Все они как-то относятся друг к другу. Сейчас коротко поясним.</p>
49 Ура, появились какие-то обозначения<em>Скриншот: draw.io / Skillbox Media</em><p>На диаграмме есть три класса: Студент, Учитель и Человек. Все они как-то относятся друг к другу. Сейчас коротко поясним.</p>
50 <p>Классы Студент и Учитель связаны между собой - это показано обычной линией. Связаны - значит, что они как-то взаимодействуют: например, вызывают методы друг друга.</p>
50 <p>Классы Студент и Учитель связаны между собой - это показано обычной линией. Связаны - значит, что они как-то взаимодействуют: например, вызывают методы друг друга.</p>
51 <p>Классы Студент и Учитель наследуют свойства от класса Человек. Наследуют - значит берут этот класс за основу. Например, у Человека могут быть свойства: рост, вес и имя. А все классы, которые наследуются от него, сразу же получат эти свойства. Наследование показано незакрашенной стрелкой.</p>
51 <p>Классы Студент и Учитель наследуют свойства от класса Человек. Наследуют - значит берут этот класс за основу. Например, у Человека могут быть свойства: рост, вес и имя. А все классы, которые наследуются от него, сразу же получат эти свойства. Наследование показано незакрашенной стрелкой.</p>
52 <p><strong>? Все диаграммы строятся по главному принципу</strong>: есть объекты, которые как-то связаны друг с другом. Эта связь может быть разной - например, наследование или обычное взаимодействие между объектами.</p>
52 <p><strong>? Все диаграммы строятся по главному принципу</strong>: есть объекты, которые как-то связаны друг с другом. Эта связь может быть разной - например, наследование или обычное взаимодействие между объектами.</p>
53 <p>В языке есть десятки элементов для обозначения любых процессов. Посмотрим на основные из них поближе. Будет много картинок и теории, готовьтесь.</p>
53 <p>В языке есть десятки элементов для обозначения любых процессов. Посмотрим на основные из них поближе. Будет много картинок и теории, готовьтесь.</p>
54 <p>Весь UML основан на принципах объектно-ориентированного программирования. Поэтому дальше мы часто будем говорить о классах, объектах, интерфейсах. Этот подход очень популярен среди разработчиков, и создатели UML решили сфокусироваться именно на нём.</p>
54 <p>Весь UML основан на принципах объектно-ориентированного программирования. Поэтому дальше мы часто будем говорить о классах, объектах, интерфейсах. Этот подход очень популярен среди разработчиков, и создатели UML решили сфокусироваться именно на нём.</p>
55 <p>Если вы ещё не знакомы с ООП и хотите узнать о нём подробнее, прочитайте наш<a>цикл статей</a>, где мы рассказываем об этом подходе просто и с примерами.</p>
55 <p>Если вы ещё не знакомы с ООП и хотите узнать о нём подробнее, прочитайте наш<a>цикл статей</a>, где мы рассказываем об этом подходе просто и с примерами.</p>
56 <p>Класс - это структура данных, у которой есть свойства и методы. Из него создаются объекты - копии класса со всеми его внутренностями, но всегда с разными значениями.</p>
56 <p>Класс - это структура данных, у которой есть свойства и методы. Из него создаются объекты - копии класса со всеми его внутренностями, но всегда с разными значениями.</p>
57 <p>У свойств класса есть имена и типы данных. А у методов - тоже имена и типы возвращаемых значений. Выглядит класс так:</p>
57 <p>У свойств класса есть имена и типы данных. А у методов - тоже имена и типы возвращаемых значений. Выглядит класс так:</p>
58 У нашего человека есть рост и вес, а из действий он умеет ходить и есть<em>Скриншот: draw.io / Skillbox Media</em><p>На прямоугольнике есть три секции: с названием класса, свойствами и методами. Давайте о них подробнее.</p>
58 У нашего человека есть рост и вес, а из действий он умеет ходить и есть<em>Скриншот: draw.io / Skillbox Media</em><p>На прямоугольнике есть три секции: с названием класса, свойствами и методами. Давайте о них подробнее.</p>
59 <ul><li>Название класса - это уникальное имя, по которому мы можем определить, зачем нужен этот класс. В нашем случае, класс Человек - это набор характеристик людей и действия, которые они могут совершать.</li>
59 <ul><li>Название класса - это уникальное имя, по которому мы можем определить, зачем нужен этот класс. В нашем случае, класс Человек - это набор характеристик людей и действия, которые они могут совершать.</li>
60 <li>Свойства класса - это переменные класса, которые нужны для чего-то. Например, для человека мы можем перевести его рост и вес в американские обозначения.</li>
60 <li>Свойства класса - это переменные класса, которые нужны для чего-то. Например, для человека мы можем перевести его рост и вес в американские обозначения.</li>
61 <li>Методы класса - это действия, которые класс может выполнять. Например, метод Ходить позволяет человеку ходить, а метод Есть - есть.</li>
61 <li>Методы класса - это действия, которые класс может выполнять. Например, метод Ходить позволяет человеку ходить, а метод Есть - есть.</li>
62 </ul><p>Заметьте, что у свойств и методов есть типы - float и void. Для свойств они показывают, какой тип переменных будет храниться в ней. А для методов - какой тип будет возвращаться после выполнения действия.</p>
62 </ul><p>Заметьте, что у свойств и методов есть типы - float и void. Для свойств они показывают, какой тип переменных будет храниться в ней. А для методов - какой тип будет возвращаться после выполнения действия.</p>
63 <p>Чтобы обозначить метод, после его названия ставят две круглые скобки. А если метод принимает какой-то аргумент, то его тип можно указать внутри скобок:</p>
63 <p>Чтобы обозначить метод, после его названия ставят две круглые скобки. А если метод принимает какой-то аргумент, то его тип можно указать внутри скобок:</p>
64 Теперь в метод Есть() передаётся название еды<em>Скриншот: draw.io / Skillbox Media</em><p>Это копия класса, у которой есть все его свойства и методы. Объекты нужны, чтобы создавать различные версии классов с разными значениями. Например, мы можем создать объект класса Человек:</p>
64 Теперь в метод Есть() передаётся название еды<em>Скриншот: draw.io / Skillbox Media</em><p>Это копия класса, у которой есть все его свойства и методы. Объекты нужны, чтобы создавать различные версии классов с разными значениями. Например, мы можем создать объект класса Человек:</p>
65 Для объекта не обязательно указывать свойства, достаточно показать, что этот объект относится к классу Человек. Но о связях мы поговорим дальше<em>Скриншот: draw.io / Skillbox Media</em><p>Это как класс, только что-то абстрактное. Интерфейс можно представить как нечто, что помогает двум другим объектам взаимодействовать друг с другом. Например, интерфейс сайта позволяет пользователю не разбираться, как отправлять HTTP-запросы, а просто нажимать кнопки с понятным названием.</p>
65 Для объекта не обязательно указывать свойства, достаточно показать, что этот объект относится к классу Человек. Но о связях мы поговорим дальше<em>Скриншот: draw.io / Skillbox Media</em><p>Это как класс, только что-то абстрактное. Интерфейс можно представить как нечто, что помогает двум другим объектам взаимодействовать друг с другом. Например, интерфейс сайта позволяет пользователю не разбираться, как отправлять HTTP-запросы, а просто нажимать кнопки с понятным названием.</p>
66 <p>В программировании интерфейсы используют, чтобы показать наличие класса, но без его внутренностей. В UML это выглядит так:</p>
66 <p>В программировании интерфейсы используют, чтобы показать наличие класса, но без его внутренностей. В UML это выглядит так:</p>
67 Простой интерфейс для сайта<em>Скриншот: draw.io / Skillbox Media</em><p>Для интерфейса нужно обязательно указать слово "interface". Иначе его можно будет спутать с обычным объектом или классом.</p>
67 Простой интерфейс для сайта<em>Скриншот: draw.io / Skillbox Media</em><p>Для интерфейса нужно обязательно указать слово "interface". Иначе его можно будет спутать с обычным объектом или классом.</p>
68 <p>Ещё можно указать, какие у интерфейса должны быть свойства и методы, которые обязательно нужно сделать программисту:</p>
68 <p>Ещё можно указать, какие у интерфейса должны быть свойства и методы, которые обязательно нужно сделать программисту:</p>
69 Когда создадут класс по этому интерфейсу, нужно будет обязательно добавить эти свойства и метод<em>Скриншот: draw.io / Skillbox Media</em><p>Это более крупная часть приложения - например, файл или библиотека. С помощью компонентов можно показать, как взаимодействуют разные части системы между собой. Выглядит он так:</p>
69 Когда создадут класс по этому интерфейсу, нужно будет обязательно добавить эти свойства и метод<em>Скриншот: draw.io / Skillbox Media</em><p>Это более крупная часть приложения - например, файл или библиотека. С помощью компонентов можно показать, как взаимодействуют разные части системы между собой. Выглядит он так:</p>
70 Это главный файл для сайта, который отображает страницу<em>Скриншот: draw.io / Skillbox Media</em><p>Это как компонент, только ещё больше. Пример - сервер или база данных. Внутри узла может находиться несколько компонентов. А выглядит узел так:</p>
70 Это главный файл для сайта, который отображает страницу<em>Скриншот: draw.io / Skillbox Media</em><p>Это как компонент, только ещё больше. Пример - сервер или база данных. Внутри узла может находиться несколько компонентов. А выглядит узел так:</p>
71 Чем крупнее, тем более объёмна фигура<em>Скриншот: draw.io / Skillbox Media</em><p>? Отметим одну вроде бы уже очевидную вещь: элементы UML можно вкладывать друг в друга. Получается такая матрёшка, которую мы можем раскрывать и смотреть, как устроена структура на уровень ниже.</p>
71 Чем крупнее, тем более объёмна фигура<em>Скриншот: draw.io / Skillbox Media</em><p>? Отметим одну вроде бы уже очевидную вещь: элементы UML можно вкладывать друг в друга. Получается такая матрёшка, которую мы можем раскрывать и смотреть, как устроена структура на уровень ниже.</p>
72 <p>Это объединение нескольких объектов диаграммы в одну группу. Обычно это нужно, чтобы располагать вместе похожие объекты - например, все файлы, которые относятся к серверной части приложения. Выглядит пакет так:</p>
72 <p>Это объединение нескольких объектов диаграммы в одну группу. Обычно это нужно, чтобы располагать вместе похожие объекты - например, все файлы, которые относятся к серверной части приложения. Выглядит пакет так:</p>
73 Внутри - все файлы, что находятся на сервере<em>Скриншот: draw.io / Skillbox Media</em><p>Это особое состояние системы, через которое она проходит. Например, когда сервер получил запрос и начал его обработку, то он больше не сможет принимать новые запросы, пока не закончит этот.</p>
73 Внутри - все файлы, что находятся на сервере<em>Скриншот: draw.io / Skillbox Media</em><p>Это особое состояние системы, через которое она проходит. Например, когда сервер получил запрос и начал его обработку, то он больше не сможет принимать новые запросы, пока не закончит этот.</p>
74 <p>Состояние выглядит так:</p>
74 <p>Состояние выглядит так:</p>
75 Это состояние, когда пользователь проходит авторизацию<em>Скриншот: draw.io / Skillbox Media</em><p>Это комментарий для разных объектов в UML. У заметок нет определённой структуры: они нужны просто для уточнений подробностей. Выглядят так:</p>
75 Это состояние, когда пользователь проходит авторизацию<em>Скриншот: draw.io / Skillbox Media</em><p>Это комментарий для разных объектов в UML. У заметок нет определённой структуры: они нужны просто для уточнений подробностей. Выглядят так:</p>
76 Поясняем, зачем нужен класс Человек<em>Скриншот: draw.io / Skillbox Media</em><p>Это действие, которое может выполнить система. Например, приложение может отправить запрос в базу данных или вернуть пользователю эти данные, если они уже пришли. Юзкейс выглядит так:</p>
76 Поясняем, зачем нужен класс Человек<em>Скриншот: draw.io / Skillbox Media</em><p>Это действие, которое может выполнить система. Например, приложение может отправить запрос в базу данных или вернуть пользователю эти данные, если они уже пришли. Юзкейс выглядит так:</p>
77 Все мы люди, всем хочется погладить кота - даже компьютеру<em>Скриншот: draw.io / Skillbox Media</em><p>Это линия, которая показывает, что два объекта связаны между собой. Связь может быть любой - например, два объекта могут вызывать методы друг друга. Обозначается это так:</p>
77 Все мы люди, всем хочется погладить кота - даже компьютеру<em>Скриншот: draw.io / Skillbox Media</em><p>Это линия, которая показывает, что два объекта связаны между собой. Связь может быть любой - например, два объекта могут вызывать методы друг друга. Обозначается это так:</p>
78 Да, это обычная прямая линия, без всяких стрелок<em>Скриншот:</em><em>draw.io / Skillbox Media</em><p>А так выглядит связь между двумя классами:</p>
78 Да, это обычная прямая линия, без всяких стрелок<em>Скриншот:</em><em>draw.io / Skillbox Media</em><p>А так выглядит связь между двумя классами:</p>
79 Человек и Животное могут взаимодействовать через методы Поиграть() и Прыгать(). Поэтому два класса связаны<em>Скриншот: draw.io / Skillbox Media</em><p>Это стрелка, которая показывает, что один объект обращается к другому. Взаимодействие также указывает, какие данные передаются адресату. Показывают взаимодействие так:</p>
79 Человек и Животное могут взаимодействовать через методы Поиграть() и Прыгать(). Поэтому два класса связаны<em>Скриншот: draw.io / Skillbox Media</em><p>Это стрелка, которая показывает, что один объект обращается к другому. Взаимодействие также указывает, какие данные передаются адресату. Показывают взаимодействие так:</p>
80 Передаём имя по стрелке слева направо<em>Скриншот: draw.io / Skillbox Media</em><p>Сверху над стрелкой указывают, какие данные мы передаём другому элементу. В нашем случае это чьё-то имя. Но данные могут быть любыми.</p>
80 Передаём имя по стрелке слева направо<em>Скриншот: draw.io / Skillbox Media</em><p>Сверху над стрелкой указывают, какие данные мы передаём другому элементу. В нашем случае это чьё-то имя. Но данные могут быть любыми.</p>
81 <p>Посмотрим, как два класса взаимодействуют между собой:</p>
81 <p>Посмотрим, как два класса взаимодействуют между собой:</p>
82 У класса Животное появился метод Играть_с_человеком(), который принимает имя человека в виде строки. Поэтому два класса взаимодействуют<em>Скриншот: draw.io / Skillbox Media</em><p>Это тоже стрелка, но пунктирная, которая показывает, что если мы изменим один объект, то одновременно изменим и другой. Выглядит зависимость так:</p>
82 У класса Животное появился метод Играть_с_человеком(), который принимает имя человека в виде строки. Поэтому два класса взаимодействуют<em>Скриншот: draw.io / Skillbox Media</em><p>Это тоже стрелка, но пунктирная, которая показывает, что если мы изменим один объект, то одновременно изменим и другой. Выглядит зависимость так:</p>
83 Сверху ещё можно указать, что именно поменяется<em>Скриншот: draw.io</em><p>Пример зависимости - это градусник и температура. Если меняется температура, то меняется и значение на градуснике:</p>
83 Сверху ещё можно указать, что именно поменяется<em>Скриншот: draw.io</em><p>Пример зависимости - это градусник и температура. Если меняется температура, то меняется и значение на градуснике:</p>
84 Температура изменилась - изменилось и значение на градуснике<em>Скриншот: draw.io / Skillbox Media</em><p>Это указание, что один объект является частью другого. Например, машина, говоря упрощённо, состоит из колеса, руля и двигателя. Обозначается агрегация так:</p>
84 Температура изменилась - изменилось и значение на градуснике<em>Скриншот: draw.io / Skillbox Media</em><p>Это указание, что один объект является частью другого. Например, машина, говоря упрощённо, состоит из колеса, руля и двигателя. Обозначается агрегация так:</p>
85 Слева указывается базовый элемент, а справа - объект, внутри которого есть базовый<em>Скриншот: draw.io / Skillbox Media</em><p>Как это выглядит в схеме? Посмотрим агрегацию на примере машины, которая состоит из нескольких частей:</p>
85 Слева указывается базовый элемент, а справа - объект, внутри которого есть базовый<em>Скриншот: draw.io / Skillbox Media</em><p>Как это выглядит в схеме? Посмотрим агрегацию на примере машины, которая состоит из нескольких частей:</p>
86 Здесь у машины есть три базовых класса: Колесо, Руль и Двигатель<em>Скриншот: draw.io / Skillbox Media</em><p>Это стрелка, которая показывает, что один объект наследует свойства другого. Например, класс Студент может наследовать класс Человек. Выглядит обобщение так:</p>
86 Здесь у машины есть три базовых класса: Колесо, Руль и Двигатель<em>Скриншот: draw.io / Skillbox Media</em><p>Это стрелка, которая показывает, что один объект наследует свойства другого. Например, класс Студент может наследовать класс Человек. Выглядит обобщение так:</p>
87 Справа ставят класс, от которого наследуют, а слева - класс потомок.<em>Скриншот: draw.io / Skillbox Media</em><p>Пример наследования - классы Человек, Студент и Учитель:</p>
87 Справа ставят класс, от которого наследуют, а слева - класс потомок.<em>Скриншот: draw.io / Skillbox Media</em><p>Пример наследования - классы Человек, Студент и Учитель:</p>
88 Классы Студент и Учитель наследуют все свойства класса Человек, а также добавляют собственные<em>Скриншот: draw.io / Skillbox Media</em><p>Пока закончим знакомство с элементами UML. Всё за один раз не изучить - да это и не нужно. Лучше всего постоянно обращаться к <a>спецификации UML</a>и находить там нужные объекты.</p>
88 Классы Студент и Учитель наследуют все свойства класса Человек, а также добавляют собственные<em>Скриншот: draw.io / Skillbox Media</em><p>Пока закончим знакомство с элементами UML. Всё за один раз не изучить - да это и не нужно. Лучше всего постоянно обращаться к <a>спецификации UML</a>и находить там нужные объекты.</p>
89 <p>Все UML-диаграммы делятся два больших типа - структурные и поведенческие. Первые нужны, чтобы описывать структуру объектов и приложений. А вторые показывают, как проходят взаимодействия внутри системы.</p>
89 <p>Все UML-диаграммы делятся два больших типа - структурные и поведенческие. Первые нужны, чтобы описывать структуру объектов и приложений. А вторые показывают, как проходят взаимодействия внутри системы.</p>
90 <p>Если посмотреть ещё глубже, то структурные и поведенческие диаграммы разделяются на несколько типов поменьше. Все их можно представить в виде такой схемы:</p>
90 <p>Если посмотреть ещё глубже, то структурные и поведенческие диаграммы разделяются на несколько типов поменьше. Все их можно представить в виде такой схемы:</p>
91 Получается, всего 14 видов разных диаграмм. Но запоминать все уж точно не нужно<em>Инфографика: Оля Ежак для Skillbox Media</em><p>Чаще всего используют лишь шесть из них. Поэтому давайте познакомимся с ними поближе.</p>
91 Получается, всего 14 видов разных диаграмм. Но запоминать все уж точно не нужно<em>Инфографика: Оля Ежак для Skillbox Media</em><p>Чаще всего используют лишь шесть из них. Поэтому давайте познакомимся с ними поближе.</p>
92 <p><strong>Диаграмма классов.</strong>Описывает структуру и связи между объектами и классами. Такая диаграмма помогает понять, какие классы от кого наследуются и с кем взаимодействуют. Выглядит она так:</p>
92 <p><strong>Диаграмма классов.</strong>Описывает структуру и связи между объектами и классами. Такая диаграмма помогает понять, какие классы от кого наследуются и с кем взаимодействуют. Выглядит она так:</p>
93 На диаграмме изображены классы для интернет-магазина<em>Скриншот: draw.io / Skillbox Media</em><p><strong>Диаграмма компонентов.</strong>Показывает, какие компоненты есть в системе и как они взаимодействуют между собой. Пример такой диаграммы - приложение интернет-магазина:</p>
93 На диаграмме изображены классы для интернет-магазина<em>Скриншот: draw.io / Skillbox Media</em><p><strong>Диаграмма компонентов.</strong>Показывает, какие компоненты есть в системе и как они взаимодействуют между собой. Пример такой диаграммы - приложение интернет-магазина:</p>
94 Напомним, что прямоугольники с этим символом в правом верхнем углу - это компоненты<em>Скриншот: draw.io / Skillbox Media</em><p>Видим, что появились новые обозначения в виде круга и полукруга. Они указывают на то, что для взаимодействия компонентов нужен интерфейс. А ещё есть круг, полукруг, стрелка между ними и надпись "Платёж". Это значит, что для взаимодействия компонентов должен произойти платёж.</p>
94 Напомним, что прямоугольники с этим символом в правом верхнем углу - это компоненты<em>Скриншот: draw.io / Skillbox Media</em><p>Видим, что появились новые обозначения в виде круга и полукруга. Они указывают на то, что для взаимодействия компонентов нужен интерфейс. А ещё есть круг, полукруг, стрелка между ними и надпись "Платёж". Это значит, что для взаимодействия компонентов должен произойти платёж.</p>
95 <p><strong>Диаграмма объектов.</strong>Нужна, чтобы показать состояние элементов в конкретный момент времени. Это помогает лучше понять, как моделировать объекты.</p>
95 <p><strong>Диаграмма объектов.</strong>Нужна, чтобы показать состояние элементов в конкретный момент времени. Это помогает лучше понять, как моделировать объекты.</p>
96 Так выглядит диаграмма объектов для оплаты чего-то в интернете.<em>Скриншот: draw.io / Skillbox Media</em><p><strong>Диаграмма деятельности.</strong>Показывает всю последовательность работы системы. Диаграмма выглядит как прямые указания приложению, что нужно делать и когда.</p>
96 Так выглядит диаграмма объектов для оплаты чего-то в интернете.<em>Скриншот: draw.io / Skillbox Media</em><p><strong>Диаграмма деятельности.</strong>Показывает всю последовательность работы системы. Диаграмма выглядит как прямые указания приложению, что нужно делать и когда.</p>
97 На диаграмме изображена схема показывающая, как пользователь взаимодействует с банкоматом и как банкомат связывается с банком<em>Скриншот: draw.io / Skillbox Media</em><p>Видим, что на диаграмме ещё появились ромбики. Это условие, от которого зависит, к какому следующему действию мы перейдём.</p>
97 На диаграмме изображена схема показывающая, как пользователь взаимодействует с банкоматом и как банкомат связывается с банком<em>Скриншот: draw.io / Skillbox Media</em><p>Видим, что на диаграмме ещё появились ромбики. Это условие, от которого зависит, к какому следующему действию мы перейдём.</p>
98 <p><strong>Диаграмма вариантов использования.</strong>Нужна, чтобы показать, как пользователи взаимодействуют с системой. На этой диаграмме можно указать все сценарии использования, а также показать, как перейти из одного сценария в другой.</p>
98 <p><strong>Диаграмма вариантов использования.</strong>Нужна, чтобы показать, как пользователи взаимодействуют с системой. На этой диаграмме можно указать все сценарии использования, а также показать, как перейти из одного сценария в другой.</p>
99 Здесь показан процесс взаимодействия пользователи с приложением банком<em>Скриншот: draw.io / Skillbox Media</em><p><strong>Диаграмма последовательности.</strong>Описывает все возможные действия, которые может выполнить пользователь. Она чем-то похожа на диаграмму вариантов использования.</p>
99 Здесь показан процесс взаимодействия пользователи с приложением банком<em>Скриншот: draw.io / Skillbox Media</em><p><strong>Диаграмма последовательности.</strong>Описывает все возможные действия, которые может выполнить пользователь. Она чем-то похожа на диаграмму вариантов использования.</p>
100 Тут показан полный процесс взаимодействия пользователя с банкоматом и все возможные сценарии<em>Скриншот: draw.io / Skillbox Media</em><p>Чтобы построить UML-диаграмму, можно даже не устанавливать дополнительные приложения - всё уже доступно в браузере. Для нашей статьи мы делали все схемы в сервисе<a>draw.io</a>. Вот как он выглядит:</p>
100 Тут показан полный процесс взаимодействия пользователя с банкоматом и все возможные сценарии<em>Скриншот: draw.io / Skillbox Media</em><p>Чтобы построить UML-диаграмму, можно даже не устанавливать дополнительные приложения - всё уже доступно в браузере. Для нашей статьи мы делали все схемы в сервисе<a>draw.io</a>. Вот как он выглядит:</p>
101 Пустая страница инструмента draw.io<em>Скриншот: draw.io / Skillbox Media</em><p>В сервисе есть все нужные для UML элементы: классы, объекты, связи и прочие. Находятся они в левом меню:</p>
101 Пустая страница инструмента draw.io<em>Скриншот: draw.io / Skillbox Media</em><p>В сервисе есть все нужные для UML элементы: классы, объекты, связи и прочие. Находятся они в левом меню:</p>
102 Элементы берём из левого меню<em>Скриншот: draw.io / Skillbox Media</em><p>Чтобы добавить элемент, нужно просто перетащить его в центральную область:</p>
102 Элементы берём из левого меню<em>Скриншот: draw.io / Skillbox Media</em><p>Чтобы добавить элемент, нужно просто перетащить его в центральную область:</p>
103 Интерфейс инструмента draw.io<em>Скриншот: draw.io / Skillbox Media</em><p>А чтобы сделать связь, можно воспользоваться стрелками из меню:</p>
103 Интерфейс инструмента draw.io<em>Скриншот: draw.io / Skillbox Media</em><p>А чтобы сделать связь, можно воспользоваться стрелками из меню:</p>
104 Так добавляем элементы и соединяем их<em>Скриншот: draw.io / Skillbox Media</em><p>Кроме этого сервиса есть ещё много других. Вот список некоторых из них:</p>
104 Так добавляем элементы и соединяем их<em>Скриншот: draw.io / Skillbox Media</em><p>Кроме этого сервиса есть ещё много других. Вот список некоторых из них:</p>
105 <ul><li><a>Lucidchart</a> - популярный инструмент для создания диаграмм. Он предлагает широкий выбор готовых шаблонов и символов, а также возможность совместной работы в реальном времени.</li>
105 <ul><li><a>Lucidchart</a> - популярный инструмент для создания диаграмм. Он предлагает широкий выбор готовых шаблонов и символов, а также возможность совместной работы в реальном времени.</li>
106 <li><a>Visual Paradigm</a> - полнофункциональный инструмент для моделирования и создания UML-диаграмм. Он предоставляет множество функций и возможностей для анализа и разработки систем.</li>
106 <li><a>Visual Paradigm</a> - полнофункциональный инструмент для моделирования и создания UML-диаграмм. Он предоставляет множество функций и возможностей для анализа и разработки систем.</li>
107 <li><a>Creately</a>предлагает простой в использовании веб-интерфейс для создания UML-диаграмм. Он содержит множество шаблонов и символов, а также поддерживает совместную работу и комментирование.</li>
107 <li><a>Creately</a>предлагает простой в использовании веб-интерфейс для создания UML-диаграмм. Он содержит множество шаблонов и символов, а также поддерживает совместную работу и комментирование.</li>
108 <li><a>PlantUML</a> - представляет собой инструмент для создания диаграмм, основанный на текстовом описании с использованием языка UML. Он позволяет создавать UML-диаграммы путем написания текстового кода, что делает его гибким и простым в использовании.</li>
108 <li><a>PlantUML</a> - представляет собой инструмент для создания диаграмм, основанный на текстовом описании с использованием языка UML. Он позволяет создавать UML-диаграммы путем написания текстового кода, что делает его гибким и простым в использовании.</li>
109 </ul><p>Давайте резюмируем всё, что мы узнали о языке UML:</p>
109 </ul><p>Давайте резюмируем всё, что мы узнали о языке UML:</p>
110 <ul><li>UML - это унифицированный язык для создания схем. Унифицированный - значит, что если знать базовый синтаксис, то можно понять любую схему.</li>
110 <ul><li>UML - это унифицированный язык для создания схем. Унифицированный - значит, что если знать базовый синтаксис, то можно понять любую схему.</li>
111 <li>Язык нужен, чтобы визуально описывать явления и процессы. Например, как работают приложения или как идут бизнес-процессы в компании.</li>
111 <li>Язык нужен, чтобы визуально описывать явления и процессы. Например, как работают приложения или как идут бизнес-процессы в компании.</li>
112 <li>У UML несколько главных преимуществ: универсальность, простота и визуализация, распространённость, а также возможность автоматизации и ревёрс-инжиниринга.</li>
112 <li>У UML несколько главных преимуществ: универсальность, простота и визуализация, распространённость, а также возможность автоматизации и ревёрс-инжиниринга.</li>
113 <li>UML-диаграммы - это схемы, которые сделаны по правилам языка UML.</li>
113 <li>UML-диаграммы - это схемы, которые сделаны по правилам языка UML.</li>
114 <li>Диаграммы состоят из разных базовых элементов - например, классов, объектов, узлов и связей между ними.</li>
114 <li>Диаграммы состоят из разных базовых элементов - например, классов, объектов, узлов и связей между ними.</li>
115 <li>Глобально диаграммы делятся на два вида: структурные и поведенческие. Структурные описывают, из каких элементов состоит система, а поведенческие - как она себя ведёт внутри.</li>
115 <li>Глобально диаграммы делятся на два вида: структурные и поведенческие. Структурные описывают, из каких элементов состоит система, а поведенческие - как она себя ведёт внутри.</li>
116 <li>А ещё структурные и поведенческие диаграммы делятся внутри на 14 более специфичных диаграмм, где у каждой своё предназначение.</li>
116 <li>А ещё структурные и поведенческие диаграммы делятся внутри на 14 более специфичных диаграмм, где у каждой своё предназначение.</li>
117 </ul><a>Практический курс: "Архитектор ПО" Узнать о курсе</a>
117 </ul><a>Практический курс: "Архитектор ПО" Узнать о курсе</a>