Совместимые с 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

Похожие темы