🦒
System Analyst | Knowledge base
  • Введение
  • Soft skills
    • 📍Продукт
      • Роли в IT продукте
        • Системный аналитик (SA)
        • Бизнес-аналитик (BA)
        • SA vs BA
        • 📎Другие аналитики
      • Жизненный цикл продукта
      • Методологии разработки
        • Waterfall
        • Agile
          • Scrum
          • Kanban
      • 📎Целеполагание
        • SMART
        • Матрица Эйзенхауэра
        • RICE
        • 🔒HADI
    • 📍Требования
      • Классификация требований
        • Уровень: Бизнес
        • Уровень: Пользователь
          • Use case
          • User story
          • 📎Job story
        • Уровень: Продукт
          • Функциональные требования
          • Нефункциональные требования
      • Качества требований
      • Методы сбора требований
      • Техническое задание (ТЗ)
  • Hard skills
    • 📍Базы данных
      • Реляционные
        • Транзакции
          • 🔒CAP
        • Нормальные формы
        • SQL
          • DML
          • DDL/DCL/TCL
          • 📎Представления VIEW
        • Констрейты
        • 📎Типы данных
        • 🔒Middle+
          • Особенности работы с конкертными реляционными БД
      • Нереляционные
        • Примеры использования
        • 🔒Middle+
          • Колоночные
            • Сlickhouse
          • Ключ-значение
          • Матричные
          • Документо-ориентированные
          • Графовые
            • JanusGraph | Neo4j etc
      • Масштабирование БД
      • Оптимизация БД
        • 📎Типы индексов
        • 📎Уникальные индексы
        • 🔒Анатомия плана запроса
      • 📎Какую СУБД выбрать
      • 📎Хранение и анализ данных
        • ETL
        • DWH
          • DWH vs Data Lake vs Data Mart
        • OLAP
          • OLAP vs OLTP
        • BI-аналитика
    • 📍Интеграции
      • Форматы данных
        • JSON + JSON Schema
          • 🔒AVRO
        • JSON vs XML
      • Виды интеграций
        • Синхронное взаимодействие
          • REST
            • RESTful принципы
              • Отсутствие состояния (Авторизация)
                • 🔒OAuth / OpenID Connect
              • Кеширование
              • Единообразие интерфейса (CRUD)
                • Запрос/ответ
              • 🔒Cтепень зрелости REST API
            • Проектирование API
            • 📎Асинхронный REST
          • SOAP
            • XSD
            • WSDL
          • REST vs SOAP
        • Асинхронное взаимодействие
          • Kafka
          • RabbitMQ
          • Kafka vs RabbitMQ
          • ESB
          • gRPC
            • Правила proto-контракта
            • Protobuf vs JSON
            • Сравнительная таблица
          • Другое
          • 🔒WebSocket API
        • Sync vs Async
      • 🔒Middle+
        • Stateful vs Stateless
        • Apache Flink
        • оркестрация и хореография
    • 📍Проектирование
      • Архитектура
        • Монолит
        • Микросервисы
          • Паттерны реализации
        • Монолит vs Микросервисы
        • 🔒Middle+
          • Бессерверная
          • Сервис-ориентированная (SOA)
          • Другое
      • Нотации и диаграммы
        • UML
          • Диаграмма классов
          • Диаграмма последовательности
            • Фреймы
          • Диаграмма прецедентов (use case)
          • 🔒Middle+
            • Диаграмма деятельности/активности
            • Диаграмма состояний
        • BPMN
          • Основные элементы
        • BPMN vs UML
        • ERD
        • 📎IDEF0
      • Прототипирование
        • Figma vs Axure
      • Мониторинг
        • Логирование
        • Метрики
        • Алерты
        • 🔒Инструменты
          • Grafana
          • Prometheus
          • ELK
            • Elasticsearch
            • Logstash
            • Kibana
      • 🔐Системный дизайн
    • 📎DevOps for SA
      • Основы сетей
        • OSI
        • TCP/IP
        • HTTP
        • DNS
      • Git (VCS)
        • GitHub vs GitLab
      • Развертывание приложений
        • CI/CD
        • 🔒Middle+
          • Виртуализация/контеризация
            • ✍️Docker
            • Kubernetes
              • ✍️Openshift
      • Cloud Native
        • Сервисы облачных вычислений
        • Cloud-native app vs Traditional app
      • Командная строка
    • 📎QA for SA
      • Postman | Insomnia
      • Swagger
      • Верификация vs Валидация
      • Идентификация/Аутентификация/Авторизация
    • 📎PM for SA
      • Метрики
        • Метрики привлечения
        • Метрики вовлечённости
          • ARPU
          • LTV
          • NPV
          • ROI
          • NPS
      • Прокси метрики
      • Дерево метрик
      • Фреймворки
      • Юнит-экономика
      • Модель Кано
  • Другое
    • Литература
    • Советы по составлению резюме
    • Общие вопросы на собеседовании
    • Вопросы которые надо задать интервьюеру
  • Контакты
Powered by GitBook
On this page
  • Основные принципы
  • Содержание диаграммы классов
  • Классы
  • Отношения (Взаимосвязи)
  • Построение диаграммы классов
  • Шаг 1. Идентификация классов
  • Шаг 2. Определение атрибутов классов
  • Шаг 3. Определение методов классов
  • Шаг 4. Определение отношений между классами

Was this helpful?

  1. Hard skills
  2. Проектирование
  3. Нотации и диаграммы
  4. UML

Диаграмма классов

Диаграмма классов – это UML-диаграмма, которая описывает систему, визуализируя различные типы объектов внутри системы и виды статических связей, которые существуют между ними. Он также иллюстрирует операции и атрибуты классов.

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

Основные принципы

Диаграмма классов соответствует принципам объектно-ориентированного программирования (ООП) и является одним из базовых инструментов проектирования ООП-систем.

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

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

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

Содержание диаграммы классов

Классы

Класс — это основной элемент моделирования, который представляет собой абстракцию реального объекта или сущности в системе. Он определяет свойства (атрибуты) и поведение (методы) объектов, которые являются экземплярами данного класса. На диаграмме классов обычно представляется в виде прямоугольника, разделенного на три части:

  • Название класса располагается в верхней части прямоугольника.

  • Атрибуты класса указываются в средней части прямоугольника.

  • Методы класса располагаются в нижней части прямоугольника.

Атрибуты класса — это характеристики объекта, например, имя, возраст, адрес и т.д. Каждый атрибут имеет имя и тип данных. Тип данных может быть примитивным (например, целочисленным, строковым) или ссылочным, то есть типом другого класса.

Методы класса — это действия, которые может выполнять объект, например, получение или изменение значения атрибутов, выполнение какой-либо операции или обработка событий. Каждый метод имеет имя, тип возвращаемого значения (если есть) и список параметров.

Виды классов

Видимость

Видимость (visibility) в языке моделирования UML определяет уровень доступности элементов модели. Она определяет, какие части программы могут обращаться к конкретному элементу модели.

В языке UML используется четыре уровня видимости:

  1. Public (публичный) — элементы с такой видимостью доступны из любой точки модели и внешних модулей. Они могут быть использованы как внутри класса, так и снаружи.

  2. Protected (защищенный) — элементы с такой видимостью не могут быть использованы вне класса, кроме классов-наследников.

  3. Private (приватный) — элементы с такой видимостью доступны только внутри класса, в котором они объявлены. Они не доступны из других классов и объектов.

  4. Package (пакетный) — элементы с такой видимостью доступны всем классам находящимся внутри одного пакета.

Отношения (Взаимосвязи)

Зависимость (Dependency)

Зависимость — это отношение между двумя классами, где изменения в одном классе могут повлиять на другой класс. Она обозначается стрелкой, которая указывает на зависимый класс. Например, если класс A зависит от класса B, то на диаграмме классов стрелка будет указывать от класса A к классу B.

Примером зависимости может быть использование объекта одного класса в методе другого класса. Например, если класс Order содержит метод calcTotal(), который использует объект класса Product для расчета общей стоимости заказа, то можно нарисовать зависимость между классами Order и Product.

Ассоциация (Association)

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

Роль — это название, которое описывает, как именно объекты класса связаны между собой в рамках ассоциации. Роль может быть определена для каждого конца ассоциации и описывать, как объекты каждого класса используются в контексте связи между этими классами.

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

Название
Обозначение
Описание

Точное число

1

Только один объект связан с другим объектом.

Диапазон значений

1..9

От одного до девяти объектов класса могут быть связаны с другим классом.

Множество

0..* или *

Ноль или более объектов могут быть связаны с другим объектом

Агрегация (Aggregation)

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

В диаграмме классов агрегация обозначается отношением «больше-чем» с пустым ромбом на стороне контейнера. Например, если у нас есть класс «Компания» и класс «Сотрудник», то мы можем использовать агрегацию, чтобы показать, что каждая компания содержит несколько сотрудников. В этом случае, класс «Компания» будет контейнером, а класс «Сотрудник» — содержимым.

Композиция (Composition)

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

Композиция обозначается на диаграмме классов uml с помощью пустого ромба на стороне класса-контейнера, соединенной линией с классом-частью. Также можно указать имя роли, которую выполняет класс-часть в отношении с классом-контейнером.

Обобщение (Generalization)

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

Реализация (implementation)

Реализация показывает, что класс реализует интерфейс или абстрактный класс. Класс, который реализует интерфейс, обязан предоставить реализацию всех методов, объявленных в этом интерфейсе. Класс, который наследует абстрактный класс, также должен реализовать все его абстрактные методы.

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

Построение диаграммы классов

Шаг 1. Идентификация классов

Определите основные классы, которые будут присутствовать в вашей системе или программе. В нашем примере на предметную область «Университет» могут входить классы «Студент», «Преподаватель», «Курс» и «Группа».

Шаг 2. Определение атрибутов классов

Для каждого класса определите его атрибуты, то есть переменные, которые описывают его состояние. Например, класс «Студент» может иметь атрибуты «имя», «возраст» и «номер студенческого билета». Запишите атрибуты рядом с соответствующими классами на диаграмме.

Шаг 3. Определение методов классов

Для каждого класса определите его методы, то есть функции или операции, которые класс может выполнять. Например, класс «Студент» может иметь методы «записаться на курс», «получить средний балл» и «изменить информацию о себе». Запишите методы под соответствующими классами на диаграмме.

Шаг 4. Определение отношений между классами

Установите связи между классами, чтобы показать их отношения. Например, класс «Студент» может иметь ассоциацию с классом «Курс», чтобы показать, что студенты записываются на курсы. Используйте стрелки и мощность отношений для указания типа и количество связей между классами.

Источники:

PreviousUMLNextДиаграмма последовательности

Last updated 1 year ago

Was this helpful?

📍

Обычный класс

это класс, который представляет собой абстракцию реального объекта или сущности в системе. Он имеет свои атрибуты и методы, которые описывают характеристики и поведение объектов данного класса.

Абстрактный класс

это класс, который содержит хотя бы один абстрактный метод. Абстрактный метод не имеет реализации в самом классе, а определяется только его сигнатура (имя, параметры, тип возвращаемого значения). Абстрактные классы могут использоваться для определения общих характеристик для нескольких классов, от которых наследуются другие классы.

Интерфейс

это специальный вид класса, который определяет набор методов без их реализации. Интерфейсы используются для определения общих методов, которые должны быть реализованы в классах, которые их имплементируют. Один класс может имплементировать несколько интерфейсов.

Класс перечисления

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

Класс шаблона

это класс, который представляет общий шаблон для создания конкретных классов, которые определяются позже. Классы шаблоны используются для обобщения классов и уменьшения повторяемости кода.

https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-class-diagram/
https://itonboard.ru/analysis/705-diagramma_klassov_uml_class_diagram_polnoe_rukovodstvo_s_primerami/