MATLAB Answers

Creating multiple instances of a class from within a class

39 views (last 30 days)
Bert
Bert on 6 Oct 2011
Hey all,
In a trial from type trialclass, I would like to create multiple patients of type patientClass as such:
trial = trialClass();
trial = trial.addPatient(patientID);
To achieve this, trialClass and patientClass are respectively defined as followed:
classdef trialClass
properties
patient = patientClass.empty;
end
methods
function obj = trialClass()
end
function obj = addPatient(obj, patientID)
obj.patient = patientClass(patientID);
end
end
end
classdef patientClass
properties
patientID;
end
methods
function obj = patientClass(patientID)
obj.patientID = patientID;
end
end
end
However, when I call addPatient multiple times, the last created patient is overwritten. In other words, I end up with only one patient which has the last patientID.
Am I using the right data structure to store multiple patients in a trial?
Any suggestions are much appreciated!
  1 Comment
Daniel Shub
Daniel Shub on 6 Oct 2011
If you are going to use an array of patientClass objects, you really want patientClass to handle being called with no arguments. The documentation is pretty clear about how object arrays are initialized, and requiring an argument is likely to cause problems do the road.

Sign in to comment.

Answers (1)

David Young
David Young on 6 Oct 2011
The line
obj.patient = patientClass(patientID);
does indeed overwrite the single patient stored in trialClass.
One solution is to store an array of patients in trialClass. To implement the simplest version of this, just change the line above to
obj.patient(length(obj.patient)+1) = patientClass(patientID);
You'll then find that each call of addpatient will increase the length of the array, and you can recover all the patients' information from the property.
This simple approach can get you quite a long way, but it may not be adequate if you have large numbers of patients or you want to do complex analyses. You may find that a useful step in due course is to look at the containers.Map class, which would allow you, for example, to index the patients by their IDs.
  2 Comments
Daniel Shub
Daniel Shub on 6 Oct 2011
I believe you assumption about arrays of objects not being oop is faulty. In fact, arrays of objects is one of the major advantages of MATLAB's oop.

Sign in to comment.

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!