Этот пример реализует класс, чтобы представлять оптическую мультиплексную карту. Эти карты обычно имеют несколько входных портов и выходной порт. Класс 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 заставляет использование метода доступа sum суммировать уровни выходного порта:
omx.OutPutRate
ans =
75