Промежуточная аттестация по курсу "Java: знакомство и как пользоваться базовым API (семинары)" от GeekBrains.
Подумать над структурой класса Ноутбук для магазина техники - выделить поля и методы. Реализовать в java.
Создать множество ноутбуков.
Написать метод, который будет запрашивать у пользователя критерий (или критерии) фильтрации и выведет ноутбуки, отвечающие фильтру. Критерии фильтрации можно хранить в Map. Например:
Введите цифру, соответствующую необходимому критерию:
- ОЗУ
- Объем ЖД
- Операционная система
- Цвет
Далее нужно запросить минимальные значения для указанных критериев - сохранить параметры фильтрации можно также в Map.
Отфильтровать ноутбуки их первоначального множества и вывести проходящие по условиям.
Для решения задачи написаны следующие классы:
- Parameter для хранения раздела, к которому параметр относится, имени параметра, а также типа данных для параметра.
- Definition для хранения параметра и его значения.
- Laptop для хранения основной информации о ноутбуке и набора параметров.
- LaptopCatalog для генерации случайного набора ноутбуков, хранения набора, получения набора ноутбуков с использованием разных коллекций, хранения параметров фильтрации ноутбуков и получения списка отфильтрованных ноутбуков.
- Program определяет логику взаимодействия с пользователем программы.
Для класса Laptop выделены в отдельные поля те параметры, которые определяют неотъемлемые параметры товара: бренд и модель, цвет, артикул и штрих-код, цена и скидка, а также набор необязательных параметров.
В классе Parameter определены поля section для хранения значения
раздела параметра (например, раздел "CPU" для параметров процессора),
name для хранения названия параметра, valueType для хранения
типа данных для параметра: 0 для строковых, 1 для целочисленных, 2 для
чисел с плавающей запятой двойной точности.
В классе Definition хранятся ссылки на параметры, а также их значения,
которые пакуются в класс Object. При получении значения из экземпляра
Definition его необходимо распаковать, используя информацию
о типе данных, которая хранится в екземляре класса Parameter.
Для обеспечения общих правил фильтрации и отображения ноутбуков,
все обязательные параметры, заполенние которых происходит через поля
класса Laptop, автоматически дублируются в списке необязательных параметров.
При этом они обновляются всякий раз при внесении изменений в список параметров,
поэтому не могут быть отличными от значений, хранящихся в полях.
При проверке эквивалентности двух экземпляров класса Laptop проверяются
как основные параметры, хранящиеся в полях, так и весь набор
необязательных параметров.
Строковое представление экземпляра класса Laptop отображает значения всех
только обязательных параметров.
Для создания хэш-кодов используются только обязательные параметры. При добавлении в HashMap одинаковых
по обязательным параметрам, но разных по необязательным параметрам экземпляров
происходит сравнение методом Object.equals и новый экземплеяр не перезаписывает старый.
Класс LaptopCatalog хранит набор экземпляров класса Laptop
в HashSet коллекции. Кроме набора ноутбуков, каталог хранит
параметры фильтрации: HashMap коллекции <Parameter, Double> для минимальных
и максимальных значений параметров, а также <Parameter, HashSet<String>> для
набора допустимых значений строковых параметров.
Заполнение параметров фильтрации происходит через ряд методов
доступа к значениям полей класса LaptopCatalog в классе Program.
В классе Program определена вся логика взаимодействия с пользователем.
В программе определено несколько разных представлений:
- Приветственное представление (выбор режима работы)
- Представление полного списка ноутбуков
- Представление набора параметров для настройки фильтрации
- Представление настройки отдельного параметра (для строковых и числовых типов разные)
- Представление фильтрованного списка ноутбуков
- Предстваление подробной информации по отдельному ноутбуку
Из всех основных разделов обеспечена возможность перехода в другие основыне разделы, возможность вернуться к начальному экрану, а также возможность завершить программу.
Настройка параметров фильтрации выполняется до тех пор, пока пользователь не подтвердит, что все параметры настроены вводом ключа "d" (done).