Matlab面向对象的组合,聚合

时间:2012-06-12 08:01:26

标签: oop matlab uml code-generation

我正在编写我的第一个MATLAB O-O应用程序,我对组合,聚合和关系的实现感到困惑。

我的问题是:如何在matlab中实现一对多聚合或关联?我可以举一些例子吗?

此外,我正在使用ArgoUml来设计我的应用程序,是否有任何插件可以在matlab中自动生成代码?

提前致谢

2 个答案:

答案 0 :(得分:2)

以下是类关联的快速示例。该方案包括一个可以让许多学生注册的课程:

Student.m

classdef Student < handle
    properties
        name
    end
    methods
        function obj = Student(name)
            if nargin > 0
                obj.name = name;
            end
        end
        function delete(obj)
            fprintf('-- Student Destructor: %s\n',obj.name);
        end
    end
end

Course.m

classdef Course < handle
    properties
        name        %# course name
        std         %# cell array of students
    end
    properties(Access = private)
        lastIdx = 1;
    end
    methods
        function obj = Course(name, capacity)
            obj.name = name;
            obj.std = cell(capacity,1);
        end
        function addStudent(obj, std)
            if obj.lastIdx > numel(obj.std)
                fprintf(2, 'Sorry, class is full\n');
                return
            end
            obj.std{obj.lastIdx} = std;
            obj.lastIdx = obj.lastIdx + 1;
        end
        function printClassRoster(obj)
            fprintf('Course Name = %s\n', obj.name);
            fprintf('Enrolled = %d, Capacity = %d\n', ...
                obj.lastIdx-1, length(obj.std));
            for i=1:obj.lastIdx-1
                fprintf('ID = %d, Name = %s\n', i, obj.std{i}.name);
            end
        end
    end

end

以下是测试上述类的代码:

c = Course('CS101', 3);
for i=1:4
    name = sprintf('amro%d',i);
    fprintf('Adding student: %s\n', name)
    c.addStudent( Student(name) )
end

fprintf('\nClass Roster:\n=============\n')
c.printClassRoster()

fprintf('\nCleaning up:\n')
clear c

输出:

Adding student: amro1
Adding student: amro2
Adding student: amro3
Adding student: amro4
Sorry, class is full
-- Student Destructor: amro4

Class Roster:
=============
Course Name = CS101
Enrolled = 3, Capacity = 3
ID = 1, Name = amro1
ID = 2, Name = amro2
ID = 3, Name = amro3

Cleaning up:
-- Student Destructor: amro1
-- Student Destructor: amro2
-- Student Destructor: amro3

答案 1 :(得分:1)

您可以查看Object-Oriented Programming in MATLAB,在文档中可以参考Object-Oriented Programming

我建议仔细看看Value or Handle Class — Which to Use 。简而言之,句柄类允许您传递引用,而值类始终是原始对象的副本。

我很惊讶地发现了一个ArgoUml的插件,因为MATLAB主要由工程师而不是软件开发人员使用。