Взаимодействие с конструкторами супер и подклассов - PullRequest
4 голосов
/ 24 января 2012

У меня возникли проблемы с поиском помощи в документации по matlab и в предыдущих вопросах об использовании наследования и конструкторов классов для создания интерфейса.Чтобы привести его в порядок, внутри пакета.

Вместо перетаскивания своего кода я могу сжать его следующим образом:

Пакет +MyPkg имеет суперкласс Super и несколько подклассов Sub1 Sub2 ... Большинство моих свойств и методов определены в Super так, что Sub1 и Sub2 действительно существуют только для использования их конструкторов для простых подпрограмм или, возможно, нескольких методов, перегруженных из Super.

как мне написать написание классов и конструкторов для поддержки интерфейса, в котором я могу использовать следующие вызовы:

a = MyPkg.Super(args).Sub1(args)
b = MyPkg.Super(args).Sub1(args).Sub1Method

В этом случае я хочу сохранить аргументы, связанные с Super, отдельно от аргументов, связанных с Sub1, для удобства чтенияи организация.

Вопросы приветствуются.

РЕДАКТИРОВАТЬ:

После рассмотрения принятого ответа ниже и некоторого просмотра я пришел к выводу, что интерфейс, показанный выше, на самом деле не соответствует духу OOи, для моего приложения анализа данных, более правильный способ его подхода состоит из класса дескриптора с конструктором, который заполняет объект или массив ячеек свойств объекта.Поскольку класс является классом-дескриптором, можно использовать методы для получения желаемых методов.то есть следующие

% 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)

и т. д.,

Надеюсь, что это поможет кому-то еще иметь дело с этими проблемами

1 Ответ

2 голосов
/ 25 января 2012

Что касается вашего вопроса, вы не можете, если вы используете наследование. Только прямые конструкторы суперкласса могут быть вызваны из подклассов, и только из подкласса вы можете вызвать конструктор суперкласса. Ссылка

Такое разоблачение суперкласса действительно нарушает основы наследования. Может быть, вам стоит подумать о другой модели, может быть, о композиции ("имеет" вместо "есть"), если вам нужен такой доступ?

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