Разница классов дескрипторов и значений

matlab oop

4955 просмотра

2 ответа

528 Репутация автора

У меня есть некоторый фон C ++ и я хочу использовать классы в Matlab.

В чем разница между дескриптором и классом значений?

Я знаю, что я использовал бы класс значений, если бы я хотел определить матричный класс с перегруженными операторами, такими как «+» и «*». Однако иногда мне кажется, что все работает только так, как я хочу, когда выбираю класс ручки.

Автор: Lucas Источник Размещён: 22.06.2011 07:44

Ответы (2)


21 плюса

4568 Репутация автора

Решение

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:26

0 плюса

2516 Репутация автора

Это на самом деле довольно просто, и отличается от языков, которые вы отмечаете. Классы дескрипторов передаются по ссылке. Классы значений передаются по значению. Отличие от c / c ++ заключается в том, что механизм является частью системы типов, а не операцией, которая может быть выполнена для любой переменной.

Автор: Marc Размещён: 24.06.2011 09:08
Вопросы из категории :
32x32