Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 81 стр.

UptoLike

Составители: 

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