Составители:
Рубрика:
81
Метод display класса File считывает информацию из файла методом
ReadFile в буфер и построчно выводит ее на экран. Однако, метод ReadFile в
самом классе File не может быть полноценно определен, поскольку этот класс в
терминах предметной области является абстрактной основой для двух других
классов (InfoFile и HelpFile) и для него не известен
, например, тип хранящейся в
файле информации. Метод ReadFile определен в классах InfoFile и HelpFile ,
причем в первом данный метод считывает из файла информацию в виде
экземпляров структуры info, преобразует ее в текстовую форму и записывает в
буфер, а во втором - информация непосредственно считывается в виде текстовых
строк, которые записываются в
буфер str. Таким образом, метод ReadFile не надо
определять в классе File по логике представления предметной области, однако
обязательно необходимо определить по правилам синтаксиса языка С++ (так как
метод display использует этот метод). При этом необходимо обеспечить
полиморфное поведение метода ReadFile для того, чтобы при вызове метода
display объектом класса InfoFile в теле
метода display была вызвана реализация
метода ReadFile для соответствующего класса (аналогичная ситуация
рассматривалась в листинге 31). Поэтому метод ReadFile объявлен в классе File
как чистая виртуальная функция:
virtual int ReadFile()=0;
Таким образом, класс File является абстрактным классом, для которого
запрещено создание объектов, то есть ошибкой будет такое объявление:
File MyFile(“file.txt”,50);
Класс File может быть только основой для дальнейшего наследо-
вания другими классами. Подводя итог, можно сказать, что абстрактные
классы используются для спецификации интерфейсов операций (мето-
ды, реализующие эти операции впоследствии определяются в производ-
ных классах абстрактного класса). Абстрактные классы удобны на фазе
анализа требований к системе, так как они позволяют выявить
аналогию
Метод display класса File считывает информацию из файла методом ReadFile в буфер и построчно выводит ее на экран. Однако, метод ReadFile в самом классе File не может быть полноценно определен, поскольку этот класс в терминах предметной области является абстрактной основой для двух других классов (InfoFile и HelpFile) и для него не известен, например, тип хранящейся в файле информации. Метод ReadFile определен в классах InfoFile и HelpFile , причем в первом данный метод считывает из файла информацию в виде экземпляров структуры info, преобразует ее в текстовую форму и записывает в буфер, а во втором - информация непосредственно считывается в виде текстовых строк, которые записываются в буфер str. Таким образом, метод ReadFile не надо определять в классе File по логике представления предметной области, однако обязательно необходимо определить по правилам синтаксиса языка С++ (так как метод display использует этот метод). При этом необходимо обеспечить полиморфное поведение метода ReadFile для того, чтобы при вызове метода display объектом класса InfoFile в теле метода display была вызвана реализация метода ReadFile для соответствующего класса (аналогичная ситуация рассматривалась в листинге 31). Поэтому метод ReadFile объявлен в классе File как чистая виртуальная функция: virtual int ReadFile()=0; Таким образом, класс File является абстрактным классом, для которого запрещено создание объектов, то есть ошибкой будет такое объявление: File MyFile(“file.txt”,50); Класс File может быть только основой для дальнейшего наследо- вания другими классами. Подводя итог, можно сказать, что абстрактные классы используются для спецификации интерфейсов операций (мето- ды, реализующие эти операции впоследствии определяются в производ- ных классах абстрактного класса). Абстрактные классы удобны на фазе анализа требований к системе, так как они позволяют выявить аналогию 81