exponenta event banner

Создание кода для классов значений 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. Щелкните ссылку Просмотр отчета.

  7. Чтобы увидеть Rhombus определение класса на панели «Источник MATLAB» в разделе Rhombus.m, нажмите Rhombus. Rhombus конструктор класса выделен.

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

  9. На панели Источник MATLAB (MATLAB Source) щелкните Дерево вызовов (Call Tree).

    Представление «Дерево вызовов» показывает, что use_shape вызывает Rhombus конструктора и что Rhombus конструктор вызывает Shape конструктор.

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

    obj@Shape(centerX,centerY)
    Rhombus конструктор класса вызывает Shape способ основания Shape класс. Для просмотра Shape определение класса, в obj@Shape, двойной щелчок Shape.