MATLAB R2008a. Классы. Часть1: Учебное пособие, страница 19

                        % объект obj будет уничтожен:

             function delete(obj) % Переопределение стандартной

                                % функции delete.

         fclose(obj.FileID); % Закрытие файла с

                                % идентификатором, взятым из FileID. После этого

                     % объект obj автоматически уничтожается.

             end

       end  % methods

end % classdef

Using a Filewriter Object (Использование Filewriter-объекта)

Заметим, что пользователь сначала называет имя файла для создания Filewriter-объекта и затем использует метод  writeToFile класса Filewriter для написания одной строки текста в файл. В следующем коде первая строка создает Filewriter-объект fw для файла mynewclass.m и сам файл mynewclass.m (посредством стандартной функции fopen, так как этот файл ранее не был образован), а вторая строка пишет текст в созданный файл. Команда «clear fw» ликвидирует Filewriter-объект, что автоматически приводит к вызову его собственного delete-метода и соответственно к закрытию (fclose) файла:

   >> fw = Filewriter('mynewclass.m'); % Создание

                        % Filewriter-объекта fw для файла mynewclass.m.

   >> fw.writeToFile('classdef mynewclass < ...                 handle')  %  Вызов метода writeToFile класса

                                % Filewriter; здесь, в отличие от обычного вызова

                % для writeToFile(obj,text_str), фактическое значение

                        % параметра obj берется из самой команды как fw.

   >> clear fw % Освобождение рабочей памяти от fw, при этом

                        % автоматически вызывается delete-метод класса

                % Filewriter для его представителя – объекта fw.

Для проверки результата запросим содержание нашего файла mynewclass.m:

   >> type mynewclass

Поскольку в файле mynewclass.m нет других элементов (он впервые создан при образовании объекта fw), MATLAB выдаст записанный текст (см. функцию fprintf в методе writeToFile):

   classdef mynewclass < handle

Using Objects in Functions (Использование объектов в функциях)

Filewriter-объекты обеспечивают качество, которое вы можете использовать в функциях и других классах. Ниже дан пример функции writeClassFile для формирования текстового трафарета блока classdef.

Этот пример создает трафарет файла для относительно простого класса classname (другая версия может использовать более сложные варианты по аналогии с представленным):

function writeClassFile(classname,superclass) % Функция         %  создания трафарета определения  класса classname и записи его

% в файл; для внесения текста трафарета в файл используйте

                % Filewriter-объект:

   fw = Filewriter([classname '.m']); % Вызов конструктора

                % Filewriter-объектов (см. выше определение класса

        % Filewriter); символы «.m» - расширение для файла; скобки 

       % []- конкатенация (объединение) имени класса и его расширения;

        % [classname '.m']) дает имя classname.m файла для

        %  Filewriter-конструктора; конструктор также вычислит (функция

        %  fopen) и сохранит в свойстве FileID объекта obj

       % идентификатор файла; объект  obj конструктором Filewriter

       % будет назначен переменной fw (она станет handle-копией

   % Filewriter-объекта obj). Если число входных аргументов функции 

                % writeClassFile больше 1:  

   if nargin > 1

       % то внесем в файл текст по методу writeToFile  объекта

                        % obj = fw класса Filewriter:

      fw.writeToFile(['classdef ' classname ' < '...

          superclass]) %  Вызов метода writeToFile (см. выше

                                 % определение класса Filewriter); фактическое

              % значение для входного аргумента obj функции-метода

              %  writeToFile будет взято как fw из команды

       %  fw.writeToFile. Если nargin не окажется больше 1, то: 

   else% иначе:

                % строка classdef трафарета будет другой (без

                        %  суперкласса):

      fw.writeToFile(['classdef ' classname])           

   end

                %  Остальные компоненты блока classdef:

   fw.writeToFile('    properties ') %  Начало блока свойств.

   fw.writeToFile(' ') %  Пустая строка свойств трафарета, которая

                %   будет использована при создании конкретного класса.

   fw.writeToFile('    end % properties') %  Конец блока

                %  свойств.

   fw.writeToFile(' ') %  Пустая разделительная строка пробелов.

   fw.writeToFile('    methods ') %  Начало блока методов.

   fw.writeToFile(['        function obj =...

       ' classname '()']) %  Начало функции-конструктора

                        % объектов класса classname.

   fw.writeToFile(' ') %  Строка для будущего кода конструктора.

   fw.writeToFile('        end') %  Конец метода-

                % конструктора.

   fw.writeToFile('    end % methods') %  Конец блока

                %  methods

   fw.writeToFile('end % classdef') %  Конец блока

                % classdef.

   delete(fw) % Закрытие файла класса classname (см. функцию

                % fclose в delete-методе класса Filewriter) с последующим

                % уничтожением объекта fw.

end% Конец функции writeClassFile.

Для создания конкретного трафарета определения класса вызовите функцию writeClassFile с именами вашего класса и (при необходимости) его суперкласса. Используйте стандартную команду type для вывода содержания файла трафарета на экран. Например:

   >> writeClassFile('myNewClass','handle') % Создание

                        % трафарета определения класса myNewClass.

   >> type myNewClass % Вызов содержания файла трафарета.

Результат последнего вызова:

classdef myNewClass < handle

       properties

       end % properties

       methods

          function obj = myNewClass()

          end

                end % methods

   end % classdef

More Information on These Techniques(Дополнительная информация по этой технике)