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