2013-05-07 13 views
6

Mam super klasę, na której zrobiłem obszerną dokumentację. Istnieją podklasy, które dziedziczą z tej super klasy i chciałbym ponownie użyć dokumentacji super, jeśli to możliwe. Na przykład z super klasy ClassA:Jak dziedziczę dokumentację od superklatek w Matlab?

classdef ClassA 
    %CLASSA Super Class for all others classes 
    % 
    % CLASSA Properties: 
    % Prop1  It's the first property 
    % Prop2  It's the second 
    % 
    % CLASSA Methods: 
    % Method1  It's a method 
    % Method2  It's another method 

    function value = Method1(var) 
     % Super implementation of Method1 
    end 

    % Other method definitions follow 
end 

a podklasy ClassB:

classdef ClassB < ClassA 
    %CLASSB Subclass of super class CLASSA 
    % 
    % CLASSB Properties: 
    % Prop3  It's the first property of subclass 
    % 
    % CLASSB Methods: 
    % Method 3 It's the first method of subclass 

    function value = Method1(var) 
     % Subclass implementation of Method1 
    end 

    % Other method definitions follow 
end 

Jeśli wpisuję help ClassB mam tylko ClassB „s opis pomocy. Chcę również dołączyć opis pomocy Super. Dane wyjściowe wyglądają mniej więcej tak:

CLASSB Subclass of super class CLASSA 

CLASSB Properties: 
    Prop1  It's the first property 
    Prop2  It's the second 
    Prop3  It's the first property of subclass 

CLASSB Methods: 
    Method1  It's a method 
    Method2  It's another method 
    Method3  It's the first method of subclass 

Czy istnieje sposób, aby to zrobić?

+5

Nie sądzę, że można to zrobić; Można jednak dołączyć "zobacz również", który automatycznie łączy się z twoją superklasą; po prostu umieść 'Zobacz także CLASSA. 'na końcu twojej dokumentacji' ClassB', a MATLAB zrobi resztę. – wakjah

+0

Nie wiedziałem o tym. To bardzo sprytne. – KronoS

Odpowiedz

5

Jak odnotowano w dokumencie @SamRoberts, istnieje dokumentacja właściwości i metod.

Na przykład:

classdef Super 
    %Super Summary of this class goes here 
    % Detailed explanation goes here 
    % 
    % Super Properties: 
    % One - Description of One 
    % Two - Description of Two 
    % 
    % Super Methods: 
    % myMethod - Description of myMethod 
    % 

    properties 
     One  % First public property 
     Two  % Second public property 
    end 
    properties (Access=private) 
     Three % Do not show this property 
    end 

    methods 
     function obj = Super 
      % Summary of constructor 
     end 
     function myMethod(obj) 
      % Summary of myMethod 
      disp(obj) 
     end 
    end 
    methods (Static) 
     function myStaticMethod 
      % Summary of myStaticMethod 
     end 
    end 

end 

i

classdef Derived < Super 
    %Derived Summary of this class goes here 
    % Detailed explanation goes here 
    % 
    % See also: Super 

    properties 
     Forth  % Forth public property 
    end 

    methods 
     function obj = Derived 
      % Summary of constructor 
     end 
     function myOtherMethod(obj) 
      % Summary of myMethod 
      disp(obj) 
     end 
    end 

end 

Teraz w linii poleceń, można powiedzieć:

Można się ładnie sformatowany hiperłączy.

Pamiętaj również, co otrzymasz z doc Derived (lub gdy podświetlasz słowo i naciskasz F1). To wewnętrznie wywołuje help2html, aby przekonwertować pomoc na HTML. Na przykład, możemy to zrobić sami:

>> %doc Derived 
>> web(['text://' help2html('Derived')], '-noaddressbox', '-new') 

web

Zauważ, że odziedziczone właściwości/metody są wyświetlane.

+0

w rzeczywistości, raz stwierdziłem, że to zachowanie 'doc' /' help2html' jest niepożądane, szczególnie gdy twoje klasy dziedziczą z klasy 'handle'. Aby go wyłączyć, musiałem edytować wewnętrzną funkcję MALTAB: '[toolboxdir ('matlab') '/helptools/private/help2xml.m']': http://pastebin.com/AYMa2p5q – Amro

+2

Jeśli uważasz, że jest to przydatne - zamiast modyfikować funkcję wewnętrzną, zazwyczaj dziedziczę z własnej klasy 'HandleHiddenMethods'. To dziedziczy po 'handle' i składa się z pojedynczego bloku' methods (Hidden = true) '. W tym są kopie wszystkich metod 'handle', przeciążonych, aby przekazać połączenie bezpośrednio do' handle'. Tak więc 'HandleHiddenMethods' zachowuje się tak samo jak' handle', ale nie wyświetla swoich metod w automatycznie generowanej dokumentacji. Działa to dla wszystkich metod innych niż 'isvalid', które są zapieczętowane i nie można ich przeciążyć. –

+0

@SamRoberts: sprytnie, dzięki za udostępnienie tej wskazówki. Nie jest łatwo śledzić te modyfikacje, szczególnie przy aktualizacji MATLABa co nowe wydanie. – Amro

2

Jeśli piszesz dokumentację w sposób opisywany, myślę, że jedynym sposobem uzyskania tego, o co prosisz, jest przeciążenie help w celu zrobienia czegoś dostosowanego. Na przykład Twój przeciążony help może sam wywołać builtin('help'), a następnie builtin('help') na swojej nadklasie.

Jednak nie dokumentujesz rzeczy w standardowy sposób; Zazwyczaj dokumentowałbyś właściwości za pomocą komentarzy bezpośrednio nad samą właściwością, a także dokumentowałeś metody z komentarzami bezpośrednio pod sygnaturą funkcji metody. Jeśli to zrobiłeś, automatycznie wyświetliłbyś pomoc dla wszystkich dziedziczonych metod.

+0

Czy masz link do konwencjonalnego sposobu dokumentacji? Zastosowałem się do sugestii [opisanych tutaj] (http://www.mathworks.com/help/matlab/matlab_prog/create-help-for-classes.html). – KronoS

+0

Zobacz lepszą odpowiedź @ Amro. –

Powiązane problemy