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

Цель

Этот пример реализует класс, чтобы представлять оптическую мультиплексную карту. Эти карты обычно имеют несколько входных портов и выходной порт. 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

Построение объекта 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

OutPutRate свойство получает использование метода доступа sum суммировать уровни выходного порта:

omx.OutPutRate
ans =
    75

Похожие темы