exponenta event banner

Представление аппаратных средств с классами

Цель

В этом примере реализуется класс для представления платы оптического мультиплексора. Эти платы обычно имеют несколько портов ввода и порт вывода. MuxCard класс представляет порты по именам портов и скоростям передачи данных портов. Выходная скорость платы мультиплексора представляет собой сумму скоростей передачи данных входного порта.

Зачем извлекать из int32

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

Создание объекта MureCard

Конструктор принимает три аргумента:

  • 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

Методы вызова int32

Использовать 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

Связанные темы