Задайте разрешенные подклассы

Базовые знания

Материалы, представленные в этом разделе, основаны на понимании следующей информации:

Зачем контролировать разрешенные подклассы

Определение класса может задавать список классов, которые оно позволяет в качестве подклассов. Классы, отсутствующие в списке, не могут быть определены как подкласс класса. Чтобы задать разрешенные подклассы, используйте AllowedSubclasses атрибут класса.

The AllowedSubclasses атрибут обеспечивает проекту точку между Sealed классы, которые не допускают подклассы, и поведение по умолчанию, которое не ограничивает подклассы.

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

Дополнительные сведения об этом методе см. в разделе «Определение герметичной иерархии Классов».

Задайте разрешенные подклассы

Задайте список одного или нескольких разрешенных подклассов в classdef оператор путем назначения meta.class объекты к AllowedSubclasses атрибут. Создайте meta.class объект, ссылающийся на определенный класс, используя ? оператор и имя класса:

classdef (AllowedSubclasses = ?ClassName) MySuperClass
   ...
end

Используйте массив ячеек meta.class объекты для определения нескольких допустимых подклассов:

classdef (AllowedSubclasses = {?ClassName1,?ClassName2,...?ClassNameN}) MySuperClass
   ...
end

Всегда используйте полное имя класса при ссылке на имя класса:

classdef (AllowedSubclasses = ?Package.SubPackage.ClassName1) MySuperClass
   ...
end

Назначение пустого массива ячеек AllowedSubclasses атрибут фактически аналогичен определению Sealed класс.

classdef (AllowedSubclasses = {}) MySuperClass
   ...
end

Примечание

Используйте только то, ? оператор и имя класса для генерации meta.class объекты. Значения, присвоенные AllowedSubclasses атрибут не может содержать никаких других MATLAB® выражения, включая функции, которые возвращают либо meta.class объекты или массивы ячеек meta.class объекты.

Результат объявления разрешенных подклассов

Включение класса в список AllowedSubclasses не определяет этот класс как подкласс или требует, чтобы вы определили класс как подкласс. Это просто позволяет определить ссылку на класс как подкласс.

Объявление класса разрешенным подклассом не влияет на то, может ли этот класс сам быть подклассифицирован.

Определение класса может содержать назначения AllowedSubclasses атрибут, который ссылается на классы, которые в данный момент не определены или доступны в пути MATLAB. Любой подкласс, на который MATLAB не может найти при загрузке класса, эффективно удаляется из списка, не вызывая ошибок или предупреждений. MATLAB запоминает ссылку на класс в случае, если она станет доступна позже точки во времени.

Примечание

Если MATLAB не находит ни один из классов в списке разрешенных подклассов, класс эффективно Sealed. Запечатанный класс эквивалентен AllowedSubclasses = {}.

Используйте meta.class свойства RestrictsSubclassing чтобы определить, является ли класс Sealed или задает AllowedSubclasses.

Задайте герметичную иерархию классов

The AllowedSubclasses атрибут позволяет вам задать герметичную иерархию классов путем запечатывания разрешенных подклассов:

classdef (AllowedSubclasses = {?SubClass1,?SubClass2}) SuperClass
   ...
end

Определите допустимые подклассы как Sealed:

classdef (Sealed) SubClass1
   ...
end

classdef (Sealed) SubClass2
   ...
end

Запечатанные иерархии классов позволяют вам использовать уровень абстракции, требуемый вашим проектом, при сохранении закрытой системы классов.

Похожие темы