Сгенерируйте код для классов значения MATLAB

В этом примере показано, как сгенерировать код для класса значения MATLAB® и затем просмотреть сгенерированный код в отчете генерации кода.

  1. В перезаписываемой папке создайте класс значения MATLAB, Shape. Сохраните код как Shape.m.

    classdef Shape 
    % SHAPE Create a shape at coordinates 
    % centerX and centerY
        properties
            centerX;
            centerY;
        end
        properties (Dependent = true)
            area;
        end
        methods 
            function out = get.area(obj)
                out =  obj.getarea();
            end
            function obj = Shape(centerX,centerY)
                obj.centerX = centerX;
                obj.centerY = centerY;
            end
        end
        methods(Abstract = true)
            getarea(obj);
        end
        methods(Static)
            function d = distanceBetweenShapes(shape1,shape2)
                xDist = abs(shape1.centerX - shape2.centerX);
                yDist = abs(shape1.centerY - shape2.centerY);
                d = sqrt(xDist^2 + yDist^2);
            end
        end
    end  
  2. В той же папке создайте класс, Square, это - подкласс Shape. Сохраните код как Square.m.

    classdef Square < Shape 
    % Create a Square at coordinates center X and center Y 
    % with sides of length of side
        properties
            side;
        end
        methods
            function obj = Square(side,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.side = side;
            end
            function Area = getarea(obj)
                Area = obj.side^2;
            end
        end
    end
  3. В той же папке создайте класс, Rhombus, это - подкласс Shape. Сохраните код как Rhombus.m.

    classdef Rhombus < Shape
        properties
            diag1;
            diag2;
        end
        methods
            function obj = Rhombus(diag1,diag2,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.diag1 = diag1;
                obj.diag2 = diag2;
            end
            function Area = getarea(obj)
                Area = 0.5*obj.diag1*obj.diag2;
            end
        end
    end
  4. Запишите функцию, которая использует этот класс.

    function [TotalArea, Distance] =   use_shape
    %#codegen
    s = Square(2,1,2);
    r = Rhombus(3,4,7,10);
    TotalArea  = s.area + r.area;
    Distance = Shape.distanceBetweenShapes(s,r);  
  5. Сгенерируйте статическую библиотеку для use_shape и сгенерируйте отчет генерации кода.

    codegen -config:lib -report use_shape

    codegen генерирует статическую библиотеку C с именем по умолчанию, use_shape, и вспомогательные файлы в папке по умолчанию, codegen/lib/use_shape.

  6. Щелкните по ссылке View report.

  7. Видеть Rhombus определение класса, на панели MATLAB Source, под Rhombus.m, нажмите Rhombus. Rhombus конструктор класса подсвечен.

  8. Кликните по вкладке Variables. Вы видите что переменная obj объект Rhombus класс. Чтобы видеть его свойства, расширьте obj.

  9. В панели MATLAB Source нажмите Call Tree.

    Представление Call Tree показывает тот use_shape вызывает Rhombus конструктор и что Rhombus конструктор вызывает Shape конструктор.

  10. В панели кода, в Rhombus конструктор класса, указатель перемещения к этой линии:

    obj@Shape(centerX,centerY)
    Rhombus конструктор класса вызывает Shape метод основного Shape класс. Просмотреть Shape определение класса, в obj@Shape, дважды кликните Shape.