Следующим этапом разработки API является создание абстрактной сущности.
Большое количество сущностей, описывающих различные классы объектов, могут обладать общими атрибутами (координаты, размеры и т.д.). При такой ситуации целесообразно является вынесением общего в отдельный класс, называемый родительским, и наследованием от него производных сущностей.
В реализуемых сущностях присутствует общие атрибуты: идентификатор(id), координаты x и y. Также общими являются методы получения идентификатора и значения координат у объекта. Для объединения всего в одно общее создадим отдельный класс AbstractEntity(абстрактная сущность), в котором будут поля типа int x и y, long id. Методы getId(), getX(), getY()(рис. 3.6). Все сущности надо унаследовать от родительского класса(рис. 3.7). Таким методом будет передан весь функционал родительского класса его производным классам. Поэтому целесообразно произвести инициализацию идентификатора в конструкторе родительского класса.
AbstractEntity::AbstractEntity(void)
{
this->id = IdGenerator::getId();
}
DAO.
При создании объектов каждой сущности возникает вопрос их хранения, поиска и удаления. Для решения такого круга задач существует готовое решение – шаблон проектирования DAO(data access object ). Суть шаблона заключается в создании унифицированного механизма работы с хранилищами разного типа, будь то оперативная память или база данных. Первым этапом реализации является разработка интерфейса DAO с набором методов для создания, удаления и обновления существующих объектов. Интерфейс позволяет организовать общую логику для работы с различными источниками хранения.Реализацией интерфейса DAO является класс MemoryDAO основная задача, которого взаимодействие с хранилищем организованным в оперативной памяти. Хранилище представляет собой набор коллекций для каждого отдельного типа сущностей. Процесс поиска заключается в переборе коллекций и извлечению необходимых объектов. Операции модификации заключаются в добавлении и удалении объектов в коллекциях. Коллекция – объект содержащий в себе набор объектов других классов, а так же методы позволяющие обращаться к этим объектам. Для хранения различных сущностей воспользуемся ассоциативными массивами(хеш - таблицами). Каждый массив такого типа позволяет хранить пары “ключ-значение”. Доступ к элементу массива осуществляется по ключу. Ключом может являться значение различного типа. В реализуемом API в качестве ключа используется значение типа long.
DAO –интерфейс определяющий сигнатуру и имена методов (рис. 3.8).