- •ВВЕДЕНИЕ
- •1. ТРЕБОВАНИЯ
- •1.1. Глоссарий
- •1.2. Бизнес-требования
- •1.3. Пользовательские требования
- •1.4. Системные требования
- •1.5. Функциональные требования
- •1.6. Нефункциональные требования
- •2. АРХИТЕКТУРНОЕ ОПИСАНИЕ
- •2.1. Архитектурное обоснование
- •2.2. Модели
- •2.3. UML-описание
- •2.3.1. Варианты использования
- •2.3.2. Диаграмма классов
- •2.3.3. Диаграмма деятельности
- •2.3.4. Диаграмма развёртывания
- •3. ТЕСТЫ
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
2.3.2. Диаграмма классов
Описание диаграммы классов: в данном проекте основными классами являются классы User и Room, а также более мелкие, но не менее важные классы
Invite, Request и Message.
Класс User описывает пользователей системы. За каждым пользователем закреплены его идентификатор в системе (id); имя (name); SHA256-хеш пароля (password); электронная почта (mail); флаг, определяющий, подтверждена ли почта пользователя (isMailConfirmed); список приглашений в комнаты (invites); флаги, показывающие включены или выключены микрофон и видео пользователя (isMicOn, isCamOn). Для данного класса доступны методы получения идентификатора пользователя getId(), электронной почты пользователя getMail(), метод для изменения адреса электронной почты setMail(String address), методы для получения и изменения имени пользователя: getName(), setName(String newName) — и пароля: getPassword(), setPassword(String hashedPassword) — методы получения информации о том, что почта подтверждена isMailConfirmed(), подтверждения почты confirmMail(), метод для получения списка приглашений getInvites() и методы для проверки включены ли микрофон и камера у пользователя isMicOn(), isCamOn().
Следующий класс Room необходим для описания комнат, к которым имеют возможность подключаться пользователи (User). Данный класс хранит в себе идентификатор комнаты (id); её название (name); описание (description); идентификатор владельца (ownerId); список участников (members); список сообщений (messages); список запросов на вход в комнату (requests); ограниченность входа (restrictionType) и SHA256-хэш пароля для комнат с ограничением входа по паролю (password). Методы данного класса позволяют получить идентификатор комнаты getId(), а также получить и изменить владельца комнаты getOwner(), setOwner(int newOwnerId), названия комнаты getName(), setName(String newName), описание комнаты getDescription(), setDescription(String newName), получить список участников getMembers(),
сообщений getMessages() и запросов на вход getRequests(), получить и изменить
26
ограниченность входа getRestrictionType(), setRestrictionType(RestrictionType type).
Класс Message описывает текстовое сообщение, отправленное участником комнаты. В данном классе хранится идентификатор сообщения (id), отправитель (user), содержание (content), временные метки отправления (sentTimestamp) и последнего изменения (editedTimestamp). Методы этого класса позволяют получать getContent() и изменять setContent(String content) содержание сообщения, а также получать отправителя getUser() и временные метки отправление и изменения getSentTimestamp(), getEditedTimestamp().
Класс Invite представляет собой запрос на приглашения пользователя в комнату и имеет следующие поля: идентификатор приглашения (id); комната, в которую приглашают пользователя (room). Методы этого класса позволяют получать идентификатор приглашения getId(), комнату getRoom().
Последний класс Request подобен классу Invite и содержит идентификатор запроса (id) и комнаты (room). Методы данного класса позволяют получать идентификатор приглашения getId() и комнаты getRoom().
Между классами Room и User отношение агрегация «один ко многим», так как конкретный пользователь может находиться только в одной комнате, а комната может включать в себя сколько угодно участников, но не меньше одного. В то же время выход пользователя из комнаты на комнату не влияет, как и удаление комнаты не влияет на пользователей.
Между классами Room и Message отношение композиции «один ко многим», так как в конкретной комнате может содержаться сколько угодно сообщений, и эти сообщения принадлежат только одной комнате, при удалении которой удаляются все содержащиеся в ней сообщения.
МеждуклассамиRoom иRequest отношениекомпозиции«один кмногим», поскольку к комнате могут прийти запросы от скольких угодно пользователей, а вместе с удалением комнаты удаляются все пришедшие в неё запросы.
27
Между классами User и Invite отношение композиции «один ко многим», так как пользователь может получить приглашения в любое количество комнат, или не получить ни одного.
Между классами Request и User отношение ассоциации «один к одному», поскольку один запрос может содержать только одного отправителя.
Между классами Invite и Room отношение ассоциации «один к одному», поскольку одно приглашение может содержать только одну комнату.
Между классами Message и User отношение ассоциации «один к одному», поскольку одно сообщение может содержать только одного отправителя.
Диаграмма классов представлена на рисунке 3.
28
Рисунок 3. Диаграмма классов.
29