MathWorks предоставляет некоторую информацию о том, для чего и для каких целей использовать, в их справке , а также в PDF-документации . Я также обнаружил, что эта статья из проекта Yagtom (первоначально Matt Dunham ) была отличным введением в ООП в MATLAB.
В справке это объясняется следующим образом (выделено мной):
MATLAB поддерживает два вида классов - классы обработки и классы значений. Тип используемого вами класса зависит от желаемого поведения экземпляров класса и от того, какие функции вы хотите использовать.
Используйте дескриптор класса , когда вы хотите создать ссылку на данные, содержащиеся в объекте класса, и не хотите, чтобы копии объекта создавали копии данных объекта. Например, используйте класс дескриптора для реализации объекта, который содержит информацию для записи телефонной книги. Несколько прикладных программ могут получить доступ к определенной записи телефонной книги, но может быть только один набор базовых данных.
Ссылочное поведение дескрипторов позволяет этим классам поддерживать такие функции, как события, слушатели и динамические свойства.
Используйте классы значений для представления сущностей, которые не обязательно должны быть уникальными, например числовых значений. Например, используйте класс значений для реализации полиномиального типа данных. Вы можете скопировать
В статье Мэтта Данхэма сделан еще один хороший вывод о различении обоих типов классов:
Ранее мы упоминали, что объекты в Matlab (по умолчанию) передаются по значению , что означает, что полные копии передаются взад и вперед в вызовах методов. Графические объекты Matlab, однако, передаются по ссылке (через дескрипторы). Если мы создадим подкласс встроенного класса дескриптора [...] , тогда объекты нашего класса будут также передаваться по ссылке, а не по значению.
Лично я склонен использовать классы дескрипторов, чтобы получить синтаксис, к которому я привык в Java:
для класса дескриптора объект может хранить всю информацию, так что вы можете выполнять такие операции, как sort(a)
(или a.sort()
).
Для классов значений эквивалент этого равен a = sort(a)
(или a = a.sort()
). Для операторов первый синтаксис вообще не имеет смысла, но второй, очевидно, широко используется: например, a = a + b
(это эквивалентно a = plus(a,b)
и a = a.plus(b)
).
- Если основной задачей вашего класса является хранение (числовых) значений какого-либо вида и возможность выполнения операций, класс значений, скорее всего, является подходящим способом.
- Если вы хотите сохранить состояние, сгруппировать связанные значения, соединить разные объекты вместе (связанные списки, графики и т. Д.), Класс дескрипторов может быть подходящим вариантом.
Или, по крайней мере, это то, что я склонен использовать для проведения различия.