Представление оборудования с классами

Цель

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

Зачем выводить из int32

The MuxCard класс выводится из int32 класс, поскольку 32-битные целые числа представляют скорости передачи данных входного порта. The 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

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

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

  • 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

The OutPutRate свойство get access method использует sum для суммирования скорости выхода портов:

omx.OutPutRate
ans =
    75

Похожие темы