Гетерогенный массив содержит объекты разных классов. Члены гетерогенного массива имеют общий суперкласс, но могут принадлежать разным подклассам. См. раздел 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