Использование сеттеров и геттеров из класса - PullRequest
0 голосов
/ 24 октября 2018

У меня есть класс с именем TestData, в котором находится частное свойство с именем data, которое я определяю как числовой массив.Его целью является получение данных из различных других файлов .m, извлечение данных и размещение их в указанном формате (числовой массив. Таким образом, файл random_data.m, с которым я сейчас работаю, выплевывает двойной массив 1X13 под названием Avec. Я генерирую экземпляр класса myTestData = TestData(), однако, поскольку переменные-члены являются частными, мне нужно иметь функции getData и setData. Единственная идея, которую я имею, - передать Avec в getData(например, myTestData.getData(Avec)), а затем сохраните его во временном массиве, который затем может использоваться setData для записи в data, но я чувствую, что это плохая практика, так как этот массив должен быть общедоступным.имеет смысл передавать весь массив или я должен передавать каждый элемент по отдельности. Я хотел бы, чтобы он проверял данные, чтобы убедиться, что они также в правильном формате.

Я думаю, в общеммоё представление о том, как работает класс в MATLAB, может быть ошибочным.

Спасибо за вашу помощь заранее, и если есть что-то, что я могу предоставить, пожалуйста, дайте мне знать. BElow - это некоторый код.Первый фрагмент над классом взят из отдельного файла .m.

%Write data to file using the TestData Object
Avec = [some 1X13 double array]
myTestData=TestData; % Generate an instance of the object
myTestData.getData(Avec);



classdef TestData
properties (Access = private)
    metaData   % stores meta data in Nx2 array
    data       % stores data in PxQ array
    colLabels  % labels columns
    colUnits   % provides units
    metaPrint  % used to print metaData
    temp       % debugging purposes only
end

methods
    %****************************************************************************%
    %Function: TestData
    %Purpose:  Constructor used to allocate data arrays
    %****************************************************************************%
    function this = TestData() %constructor
        this.metaData   = [];
        this.data       = [];
        this.colLabels  = [];
        this.colUnits   = [];
        this.metaPrint  = [];
        this.temp       = [];
    end %TestData()     

    %%
    %****************************************************************************%
    %Function:
    %Inputs:
    %Purpose:
    %****************************************************************************%        
    function this = getData(this, someArray)
        ????
    end %getData

1 Ответ

0 голосов
/ 24 октября 2018

Я думаю, вы неправильно понимаете идею геттеров и сеттеров.Функция get предназначена для того, чтобы взять что-то из объекта и вернуть его, в то время как установщик предназначен для помещения чего-то в свойство объекта.Вам может понадобиться что-то вроде:

function data = getData(this)
  data = this.data;
  % Do any processing to put data into a different format for output
end

function this = setData(this, data)
  % Check the data input to make sure it is the right format, etc.
  this.data = data;
end

Возможно, вы также захотите сконструировать setData, чтобы принимать разные типы аргументов, например имя файла, которое он может использовать для загрузки самой матрицы.Вы также можете спроектировать свой конструктор так, чтобы он принимал имя матрицы или файла и также инициализировал data.

Кроме того, как ссылается на Крис в своем комментарии , если причина, по которой вы указали data private должен был контролировать, как пользователь мог получить к нему доступ и изменить его, достаточно иметь геттеры и сеттеры.Вы можете сделать data общедоступной, и ваши методы доступа к свойству будут по-прежнему вызываться при доступе к объекту, например Avec = myTestData.data или myTestData.data = Avec.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...