Разница классов дескрипторов и значений
4955 просмотра
2 ответа
У меня есть некоторый фон C ++ и я хочу использовать классы в Matlab.
В чем разница между дескриптором и классом значений?
Я знаю, что я использовал бы класс значений, если бы я хотел определить матричный класс с перегруженными операторами, такими как «+» и «*». Однако иногда мне кажется, что все работает только так, как я хочу, когда выбираю класс ручки.
Автор: Lucas Источник Размещён: 13.11.2019 11:30Ответы (2)
21 плюса
MathWorks предоставляет некоторую информацию о том, для каких целей они будут использоваться, в их справке, а также в документации PDF . Я также нашел эту статью из проекта Yagtom (изначально Мэтта Данхэма ) отличным введением в ООП в 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)
).
- Если основной задачей вашего класса является хранение (числовых) значений какого-либо вида и возможность выполнения операций, класс значений является наиболее вероятным способом.
- Если вы хотите сохранить состояние, сгруппировать связанные значения, соединить разные объекты вместе (связанные списки, графики и т. Д.), Класс дескрипторов может быть подходящим вариантом.
Или, по крайней мере, это то, что я склонен использовать, чтобы провести различие.
Автор: Egon Размещён: 22.06.2011 09:260 плюса
Это на самом деле довольно просто, и отличается от языков, которые вы отмечаете. Классы дескрипторов передаются по ссылке. Классы значений передаются по значению. Отличие от c / c ++ заключается в том, что механизм является частью системы типов, а не операцией, которая может быть выполнена для любой переменной.
Автор: Marc Размещён: 24.06.2011 09:08Вопросы из категории :
- matlab Каковы эффективные способы объединения двух структур в MATLAB?
- matlab Можно ли выполнять параллельные обходы в MATLAB так же, как в Python?
- matlab Каков самый простой способ экспортировать данные Excel в Matlab?
- matlab Как работают свойства в объектно-ориентированном MATLAB?
- matlab Как нарисовать график поверхности без черных краев в MATLAB?
- matlab Как я могу сохранить измененное изображение в MATLAB?
- matlab Почему 24,0000 не равно 24,0000 в MATLAB?
- matlab Как мне перебрать каждый элемент в n-мерной матрице в MATLAB?
- matlab Как нарисовать многоугольник в матрице или двоичном изображении, чтобы использовать функции обработки изображений?
- matlab Компактная матричная индексация MATLAB
- oop Передать по ссылке или передать по значению?
- oop Что такое инверсия контроля?
- oop Когда вы должны использовать «друг» в C ++?
- oop Предпочитаете композицию наследству?
- oop Когда вы должны использовать класс против структуры в C ++?
- oop В чем разница между старым и новым стилем классов в Python?
- oop Частные методы JavaScript
- oop Каков пример Принципа замещения Лискова?
- oop Интерфейс против Базового класса
- oop Что такое принцип обращения зависимостей и почему он важен?