Совместимые с Handle классы и разнородные массивы

Разнородные массивы

Разнородный массив содержит объекты различных классов. Члены разнородного массива имеют общий суперкласс, но могут принадлежать различным подклассам. Смотрите класс matlab.mixin.Heterogeneous для получения дополнительной информации о разнородных массивах. Класс matlab.mixin.Heterogeneous является совместимым с указателем классом.

Методы должны быть изолированы

Можно вызвать только те методы, которые изолируются общим суперклассом на разнородных массивах (набор атрибута Sealed к true). Изолированные методы препятствуют тому, чтобы подклассы заменили те методы, и гарантируют, что методы обратились к разнородным массивам, имеют то же определение для целого массива.

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

Шаблонная обработка метода

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

  • Задайте изолированный метод, который принимает разнородный массив как вход.

  • Задайте защищенный, абстрактный метод, который должен реализовать каждый подкласс.

  • В рамках изолированного метода вызовите переопределенный метод для каждого элемента массива.

Каждый подкласс в неоднородной иерархии реализует конкретную версию абстрактного метода. Конкретный метод обеспечивает специализированное поведение, требуемое конкретным подклассом.

Класс Printable показывает, как реализовать подход метода шаблона:

classdef (HandleCompatible) Printable
   methods(Sealed)
      function print(aryIn)
         n = numel(aryIn);
         for k=1:n
            printElement(aryIn(k));
         end
      end
   end
   methods(Access=protected, Abstract)
      printElement(objIn)
   end
end

Похожие темы