MATLAB Object-Oriented Programming

(Joyce) #1

Dependent Property with Private Storage


The Odometer class avoids order dependences when loading objects by controlling which
properties are restored when loading:



  • The Units property is dependent. Its property set method sets the TotalDistance
    property. Therefore load does not call the Units property set method.

  • The load function restores TotalDistance to whatever value it had when you saved
    the object.


classdef Odometer
properties(Constant)
ConversionFactor = 1.6
end
properties
TotalDistance = 0
end
properties(Dependent)
Units
end
properties(Access=private)
PrivateUnits = 'mi'
end
methods
function unit = get.Units(obj)
unit = obj.PrivateUnits;
end
function obj = set.Units(obj,newUnits)
% validate newUnits to be a char vector
switch(newUnits)
case 'mi'
if strcmp(obj.PrivateUnits,'km')
obj.TotalDistance = obj.TotalDistance / ...
obj.ConversionFactor;
obj.PrivateUnits = newUnits;
end
case 'km'
if strcmp(obj.PrivateUnits,'mi')
obj.TotalDistance = obj.TotalDistance * ...
obj.ConversionFactor;
obj.PrivateUnits = newUnits;
end
otherwise
error('Odometer:InvalidUnits', ...


Avoid Property Initialization Order Dependency
Free download pdf