У меня возникли проблемы с поиском помощи в документации по Matlab и предыдущим вопросам об использовании наследования matlab и конструкторов классов для создания интерфейса. Сделать это аккуратно, в пакете.Взаимодействие с супер-конструкторами и подклассами
Вместо того, чтобы перетащить через мой код, я могу конденсироваться его следующим образом:
Упаковки, +MyPkg
имеет суперкласс Super
и несколько подклассов Sub1 Sub2
... Большинство моих свойств и методов определены в Супер такие, что Sub1
и Sub2
действительно существуют только для использования своих конструкторов для простых процедур или, возможно, нескольких методов, перегруженных из Super.
Так как же я могу идти о написании classdefs и конструкторов поддерживать интерфейс, где я могу использовать следующие вызовы:
a = MyPkg.Super(args).Sub1(args)
b = MyPkg.Super(args).Sub1(args).Sub1Method
В этом случае я хочу, чтобы аргументы, связанные с супер помимо аргументов, связанных с Sub1 для удобства чтения и организации.
Вопросы приветствуются.
EDIT:
После рассмотрения принятого ответа ниже, а некоторые просмотра я пришел к выводу, что интерфейс, показанный выше, на самом деле не в духе ОО, и для моего анализа данных применения этого более правильный путь к подход будет состоять из класса handle с конструктором, который заполняет массив объектов или ячеек свойств объекта. Поскольку класс является классом дескриптора, он может затем использовать методы на нем для получения желаемых методов. т.е. следующие
% in +MyPkg\
classdef Super < handle
properties
outputArray
end
methods
function self = Super(args)
self.outputArray=load_values(args);
end
function out = do_analysis(self,params)
% do some analysis
end
end
end
Затем использовать это:
data1 = MyPkg.Super(args)
% Populate the outputArray
analysis1 = data1.do_analysis(params)
и т.д.,
Надежда, что помогает кто-то еще занимается этими вопросами
Спасибо за ответ, не могли бы вы объяснить больше, что вы имеете в виду в своем последнем предложении? –
Несомненно. Композиция имеет один объект, «содержащий» другой. Class1 хранится в свойстве Class2, а Class2 использует Class1 как «черный ящик». Это часто используется, чтобы «украсить» класс, т. Е. Поставить на него другой интерфейс. Здесь есть отличная дискуссия: http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance и здесь: http: //lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/ – Marc
Конечным решателем, который я часто использовал, является вопрос о необходимости замены одного класса другим во время выполнения. Хороший пример из графических интерфейсов: простой GUI может иметь родительский элемент «Window» и два подтипа: «Модальные» и «Немодные» диалоги. Можно представить, что для рисования на экране он должен содержать список «Windows», и все равно, какой тип они были. Если вы используете наследование для совместного использования кода и функций, вам, вероятно, следует предпочесть состав. – Marc