MATLAB ® загружает определение класса:
При первом обращении к классу, например при создании экземпляра, обращении к свойству константы или вызове статического метода класса.
При каждом изменении определения загруженного класса MATLAB возвращается в командную строку.
При изменении пути MATLAB используется другое определение класса. Изменение вступает в силу после возврата MATLAB в командную строку.
При каждом обращении к метаданным класса.
MATLAB допускает существование только одного определения класса в любое время. Поэтому MATLAB пытается автоматически обновить все существующие объекты класса в соответствии с новым определением класса. Вам не нужно звонить clear classes для удаления существующих объектов при изменении их определяющего класса.
Примечание
Использование редактора, отличного от редактора MATLAB, или Online™ MATLAB может привести к задержкам автоматического обновления.
При обновлении существующих объектов MATLAB следует набору основных правил. Автоматическое обновление может привести к следующему:
Существующие объекты обновляются до нового определения класса.
Ошибка, если MATLAB не может преобразовать объекты в новое определение класса или если имеется ошибка в самом определении класса.
Вот пример того, что происходит при создании экземпляра конкретного класса, редактирующего определение класса, чтобы сделать класс абстрактным.
a = MyClass;
% Edit MyClass to make it Abstract
a
Error using MyClass/display
Cannot update object because the class 'MyClass' is now abstract.
Примечание
MATLAB не обновляет экземпляры метакласса при изменении определения класса. После обновления определения класса необходимо получить новые данные метакласса.
MATLAB обновляет существующие объекты при изменении определения класса, включая следующие ситуации:
Изменение значения для дескриптора - существующие объекты становятся независимыми дескрипторами, относящимися к различным объектам.
Добавлен элемент перечисления - существующие объекты сохраняют элементы перечисления, которые они имели ранее, даже если базовые значения изменились.
Элемент перечисления удален - существующие объекты, не использующие удаленный элемент, имеют те же элементы перечисления, что и ранее. Существующие объекты, использующие удаленный элемент, заменяют удаленный элемент элементом перечисления по умолчанию.
Блок перечисления удален - элементы перечисления выведены из использования.
Определение суперкласса изменено - изменения применены ко всем подклассам в иерархии этого суперкласса.
Суперкласс добавлен или удален - изменение суперкласса, примененного ко всем существующим объектам.
Изменения в пути MATLAB, которые приводят к удалению файла определения класса из пути, даже временно могут вызвать побочные эффекты. Если функция изменяется из текущей папки, которая содержит определение класса, и эта папка не находится в пути, то функция не может вызывать методы класса, который теперь находится вне области действия. Чтобы избежать потенциальных проблем, добавьте к пути папку, определяющую класс, прежде чем переходить в другую папку.
Например, предположим, что класс ввода obj определяется в текущей папке, которая отсутствует в пути. Прежде чем изменить текущую папку на другую, добавьте текущую папку к пути с помощью addpath функция.
function runFromTempFolder(obj) % Add current folder to path addpath(pwd) definingFolder = cd('myTempFolder'); obj.myMethod; cd(definingFolder) end
Эти действия не обновляют существующие объекты:
Вызов class функция устаревшего объекта
Назначение устаревшего объекта переменной
Вызов метода, не имеющего доступа к данным класса
Изменение проверки свойств в определении класса (проверка значений свойств)
Объекты не обновляются до тех пор, пока на них не будет сделана ссылка таким образом, чтобы они отображались таким образом, как вызов отображения объекта или назначение свойства.
Обновления не выполняются постепенно. Обновления соответствуют последней версии класса.
Удаление файла определения класса не делает экземпляры этого класса недопустимыми. Однако нельзя вызывать методы для существующих объектов этого класса.
Некоторые обновления класса приводят к неверному определению класса. В этих случаях объекты не обновляются до устранения ошибки:
Добавление суперкласса может привести к двойному определению свойства или метода.
Изменение суперкласса на Sealed если объекты одного из его подклассов существуют, это приводит к неверному определению подкласса.
Некоторые обновления классов приводят к ситуациям, когда MATLAB не может обновить существующие объекты, чтобы они соответствовали измененному определению класса. Эти случаи приводят к ошибкам до удаления объектов:
Добавление блока перечисления в класс, не являющийся классом перечисления
Переопределение абстрактного класса
Удаление класса из гетерогенной иерархии приводит к отсутствию объекта по умолчанию для замены существующих объектов в гетерогенном массиве
Обновление класса для ограничения поведения формирования массива, например, перегрузки индексации и конкатенации массива.
Наследование subsref, subsasgn, cat, vertcat, или horzcat метод
Переопределение класса дескриптора как класса значений.
После обновления существующие объекты могут быть несовместимы с новым определением класса. Например, для вновь добавленного свойства может потребоваться выполнение конструктора.
Удаление или переименование свойств может привести к потере данных, содержащихся в свойстве. Например, если свойство содержит единственную ссылку на другой объект и это свойство удаляется из класса, MATLAB удаляет объект, поскольку на него больше нет ссылок.
Удаление класса из гетерогенной иерархии классов может привести к появлению недопустимых элементов гетерогенного массива. В этом случае объект по умолчанию для гетерогенной иерархии заменяет эти элементы массива.
С R2021a года.
MATLAB отключает отладчик во время обновления класса. Перед R2021a точка останова может потенциально прервать процесс обновления класса и разрешить введение ошибок при возобновлении обновления.
Например, этот класс определяет функцию проверки свойств:
classdef ClassWithBreakpoint properties (Constant) Prop1 (1,1) {myPropertyValidator} end end function myPropertyValidator(~) end % Add breakpoint here
Prop1 для включения начального значения:Prop1 (1,1) {myPropertyValidator} = 32Изменение атрибутов класса может изменить существующее поведение объекта или сделать объекты недопустимыми. MATLAB возвращает ошибку при доступе к недопустимым объектам.
| Изменение | Эффект |
|---|---|
Сделать | При доступе к существующим объектам возвращается ошибка. |
Изменение | Вновь созданные объекты могут наследоваться от других суперклассов, чем существующие объекты. |
Изменение | Загрузка классов подчиняется текущему значению |
Изменение | Вновь созданные объекты могут иметь другую иерархию классов, чем существующие объекты. |
Изменение | Появление класса в списке суперклассов и доступ по |
Изменение | Метод отправки для существующих объектов может быть изменен. |
Сделать | Существующие объекты подкласса возвращают ошибки при обращении. |
При изменении определения свойств класса MATLAB применяет изменения к существующим объектам класса.
| Изменение | Эффект |
|---|---|
Добавить свойство | Добавляет новое свойство к существующим объектам класса. Устанавливает значения свойств по умолчанию (т. е. |
Удалить свойство | Удаляет свойство из существующих объектов класса. Не удалось получить доступ к удаленному свойству. |
Изменение значения свойства по умолчанию | Не применяет новое значение по умолчанию к существующим объектам класса. |
Переместить свойство между подклассом и суперклассом | Не применяет другое значение по умолчанию при перемещении определения свойства между суперклассом и подклассом. |
Изменение значения атрибута свойства | Применяет изменения к существующим объектам класса. В некоторых случаях требуются переходные шаги:
|
При изменении определения методов классов MATLAB изменяет соответствующий элемент класса в существующих объектах следующим образом.
| Изменение | Эффект |
|---|---|
Добавить метод | Новый метод можно вызвать для существующих объектов класса. |
Изменить метод | Изменения доступны для существующих объектов. |
Удалить метод | Можно при более длительном вызове метода удаления для существующих объектов. |
Изменение значения атрибута метода | Применить изменения к существующим объектам класса. В некоторых случаях требуются переходные шаги:
|
| Изменение | Эффект |
|---|---|
Добавить событие | Существующие объекты класса поддерживают новое событие. |
Изменить имя события | Новое имя события отображается для существующих объектов класса. MATLAB:
|
Удалить событие | Существующие объекты больше не поддерживают удаленное событие. |
Изменить значение атрибута события | Применить изменения к существующим объектам класса. В некоторых случаях требуются переходные шаги:
|