Разработка объектно-ориентированного приложения с использованием класса Directory, страница 5

Использование механизма дружественных функций позволяет упростить интерфейс между классами. Например, дружественная функция может получить доступ к внутренним и защищенным компонентам сразу нескольких классов. Тогда из этих классов можно убрать компонентные функции, предназначенные только для обеспечения доступа к «скрытым» компонентам. Поскольку ограничение доступа к дружественной функции не относится, работать она будет достаточно быстро, и написать ее не труднее, чем функцию доступа к обычной структуре С++.


2 Проектирование приложения, содержащего класс Directory

2.1 Постановка задачи

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

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

-  имя файла.

-  Расширение.

-  дата и время создания.

-  атрибут «только чтение».

-  атрибут «скрытый».

-  атрибут «системный».

-  размер файла на диске.

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

-  по имени.

-  по расширению.

-  по дате создания.

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

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

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

Программа должна демонстрировать использование всех функций и методов.

Программа должна загружать массивы из файла, сохранять изменения в файлах.

2.2 Реализация класса Directory

Для начала необходимо создать класс Directory, в состав которого войдут переменные содержащий название родительского каталога, количество файлов в каталоге, список файлов в каталоге, путь к каталогу и объём каталога в байтах. Для этого были созданы переменные string name_kot; int kol_file = 0; long int size_katalog = 0; string put_katalog; которые были добавлены в спецификаторе public: для дальнейшего использования вне класса, а именно в главной программе.

В качестве информационной записи выступает структура data_file, вследствие чего был выведен массив структур KATALOG[50] для заполнения данными пятьюдесятью файлами каталога. Листинг объявления структуры data_file и класса Directory приведён ниже.


struct data_file

{

     string name; string tip; string data_sozd[6]; string data_izm;

bool atr_read; bool atr_skr; bool atr_sys; bool vibor; bool ydalenie;

long int razmer;

};

class Directory {

private: data_file KATALOG[50];

public:

string name_kot; int kol_file = 0; long int size_katalog = 0; string put_katalog;

bool zapoln(string put);

void vivod();

void dobavlenie();

string ydalenie();

void poisk();

void peresechenie(Directory peresech);

void obedinenie(Directory obedin);

void grupirirovYdal(Directory &group);

void vivodGroup();

void grupirirovAtre(Directory &group);

void grupirirovData(Directory &group);

};

Так как структура data_file KATALOG[50]; находится в приватном доступе класса Directory, то для обращения к этой структуре необходим конструктор или метод, для присвоения первоначальных значений переменным структуры KATALOG. В связи с тем, что пользователь при запуске программы указывает количество каталогов с которыми он будет работать конструктор в качестве заполнения данными не является обходимым. Листинг создания в главной программе объекта класса Directory представлен ниже: