matlab 一个对象的属性可以成为其他对象的属性,但仍然“属于其所有者”吗?

6qfn3psc  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(149)

我不知道如何恰当地表达‘财产属于主人’。
例如,我将班级定义为“学生”和“教师”

classdef student < handle

    properties
        name
        homework
    end

    methods
         function obj = student(name)
            obj.name = name;
            obj.homework= struct;
            obj.homework.content='';
            obj.homework.mark=[];
         end
    end
end
classdef teacher < handle
    properties
        collection_homework
    end
end
A=student('A')
A.homework.content='A solution to a math problem'
B=teacher

我的问题是,根据我的设计意图,家庭作业是学生的财产,或者说‘A是他的家庭作业的所有者’。A把他的家庭作业‘发送’给B老师,所以家庭作业成为B的财产,但B不是A家庭作业的‘主人’。老师能做的就是批改作业,然后把作业还给学生。
但是当我试着把A的作业寄给B的时候,B给A的作业打分

B.collection_homework=A.homework % put A's homework into B's collection_homework
B.collection_homework.mark=100

我检查了A,但他的作业仍然是内容,而不是分数

A.homework
ans = 
content: 'A solution to a math problem'

这意味着B的集合中的家庭作业不属于A。
除非我把“整个学生”放进老师的收藏中--家庭作业

B.collection_homework=A % put A into B's collection_homework
B.collection_homework.homework.mark=100

这次我可以让B给A的作业打分。检查一下

A.homework.marks
ans =
   100

但这与我的设计意图背道而驰,因为A似乎成为了B的子属性。例如,B可以通过以下方式更改A的名称

B.collection_homework.name = 'C'

那么,代码应该是什么样子来实现‘A发送作业给B,B标记它并发送回A’呢?

yqkkidmi

yqkkidmi1#

关键是要把家庭作业定义为另一门课

classdef homework < handle
       
    properties
        content
        mark
    end
end

并改变“学生”的定义

classdef student < handle & matlab.mixin.Heterogeneous

    properties
        name
        homework
    end

    methods
        function obj = student(name)
            obj.name = name;
            obj.homework = homework();
        end
    end
end

改变“教师”的定义

classdef teacher < handle
    
    
    properties
        collection_homework
    end
    
    methods
        function obj = teacher()
            obj.collection_homework=homework.empty(0,1);
        end
    end
end

现在试试看!

A=student('A');
    A.homework.content='A solution to a math problem';
    B=teacher;
    B.collection_homework=A.homework;
    B.collection_homework.mark=85;
    
>>B.collection_homework
    
    ans = 
    
      homework - Properties:
    
        content: 'A solution to a math problem'
           mark: 85

>> A.homework

ans = 

  homework - Properties:

    content: 'A solution to a math problem'
       mark: 85

似乎学生和老师的作业是一样的。老师给它打分,学生收到它。

相关问题