В этом примере реализуется класс для представления платы оптического мультиплексора. Эти платы обычно имеют несколько портов ввода и порт вывода. MuxCard класс представляет порты по именам портов и скоростям передачи данных портов. Выходная скорость платы мультиплексора представляет собой сумму скоростей передачи данных входного порта.
MuxCard класс, производный от int32 потому что 32-разрядные целые числа представляют скорости передачи данных входного порта. MuxCard класс наследует методы int32 , что упрощает реализацию этого подкласса. Например, индексация числового массива и арифметические операции работают на MuxCard потому что класс наследует эти операции от int32 класс.
Вот определение MuxCard класс. Обратите внимание, что скорости входного порта инициализируют int32 часть класса.
classdef MuxCard < int32 properties InPutNames OutPutName end properties (Dependent = true) OutPutRate end methods function obj = MuxCard(inptnames, inptrates, outpname) obj = obj@int32(inptrates); obj.InPutNames = inptnames; obj.OutPutName = outpname; end function x = get.OutPutRate(obj) x = sum(obj); end function x = subsref(card, s) if strcmp(s(1).type,'.') base = subsref@int32(card, s(1)); if isscalar(s) x = base; else x = subsref(base, s(2:end)); end else x = subsref(int32(card), s); end end end end
Конструктор принимает три аргумента:
inptnames - Массив ячеек имен входных портов
inptrates - Вектор скоростей входных портов
outpname - Имя выходного порта
omx = MuxCard({'inp1','inp2','inp3','inp4'},[3 12 12 48],'outp')omx =
1x4 MuxCard array with properties:
InPutNames: {'inp1' 'inp2' 'inp3' 'inp4'}
OutPutName: 'outp'
OutPutRate: 75
int32 data:
3 12 12 48Использовать MuxCard объект, подобный массиву int32 значения. Например, эта инструкция индексации обращается к данным в объекте, чтобы определить имена входных портов, которые имеют скорость 12:
omx.InPutNames(omx==12)
ans =
'inp2' 'inp3'Оператор индексирования генерирует индекс логического массива:
omx == 12
ans =
0 1 1 0Индексирование MuxCard объект получает доступ к int32 вектор скоростей входных портов:
omx(1:2)
ans =
3 12 OutPutRate свойство get access method использует sum для суммирования скоростей выходного порта:
omx.OutPutRate
ans =
75