Skip to content

3. Домашнє завдання №3

Volodymyr Savchuk edited this page May 28, 2020 · 16 revisions

Table of Contents

Описи абстрактних типів даних , які необхідні для вирішення задачі дослідження.

GUser ADT

Абстрактний тип даних GUser ADT повинен діставати головну інформацію для подальшого аналізу і статистичного відображення її нашим веб-додатком. Ця інформація містить у собі кількість листів за останній місяць по категоріям("Promotions", "Social", "Updates" і тд.), також вона містить кількість листів надіслано окремо кожним відправником, який належить до одної з категорій. Також GUser ADT надає функціонал відписки від надсилання повідомленьі видалення їх за конкретним відпраником. GUser ADT дістає інформацію про кількість прочитаних та непрочитаних листів за останній місяць.

Ця інформація повинна приймати наступний вигляд:

  1. Контейнером для збереження інформації виступає Dictionary.
  2. Інформаційна структура повинна виглядати наступним чином:
{
   sender: {
              unsubscribe_url,
              msg_ids: [
                          msg_id,
                          ...
                       ],
           },
   ...
}

Отримання інформації:

  1. get_subscription_info(category) - абстрактний тип даних проходиться по всім повідомлення користувача, при цьому дістаючи ID повідомлення та усю інформацію про відправника у форматі Raw Info, пізніше, за добутою інформацією, формується структура даних, показана вище.
  2. get_sender(msg_raw) - дістає ім'я відправника.

За отриманою інформацією, абстрактний тип даних дозволяє користувачу:

  1. unsubscribe(sender) - відписатися від відправника за гіперпосиланням, автоматично переходячи на нього.
  2. delete_messages(sender) - видалити всі повідомлення від конкретного користувача, що робиться завдяки ID цих повідомлень.
  3. get_inbox_info(category) - забезпечує надання інформації по кількості листів надісланих окремо кожним відправником, який належить до цієї категорії.
  4. get_categories_info() - забезпечує надання інформації по кількості листів за останній місяць по категоріям("Promotions", "Social", "Personal" і тд.)
  5. get_unread_info - забезпечує надання інформації по кількості прочитаних та непрочитаних листів за останній місяць.

Приклади використання реалізації абстрактного типу даних.

Діаграма класу для наступної реалізації необхідної структури даних

Структуру даних словник було вибрано, тому що і в Unsubscribe ADT і в Gmail Manager ADT використовується пошук повідомлень за поштами відправників або повідомлень за категоріями. Оскільки пошук у словнику - це швидка операція O(1), то саме цей тип найкраще підходив для цієї задачі. Спочатку розглядався список, але після аналізу ефективності різних методів GUser , було вирішено змінити реалізацію на користь словника.

Діаграми класу GUser для наступної реалізації абстрактних типів даних Unsubscribe ADT і Gmail Manager ADT

GUser