2013-05-07 51 views
6

Tôi có một lớp học Super mà tôi đã thực hiện một số tài liệu mở rộng. Có các lớp con kế thừa từ lớp siêu này và tôi muốn sử dụng lại tài liệu của siêu nếu có thể. Ví dụ với Super lớp ClassA:Làm cách nào để kế thừa tài liệu từ các lớp siêu trong 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 

Và một lớp con, 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 

Nếu tôi gõ help ClassB tôi chỉ nhận được ClassB 's mô tả sự giúp đỡ. Tôi muốn có mô tả trợ giúp của Super cũng được đưa vào. Kết quả sẽ trông giống như sau:

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 

Có cách nào để thực hiện việc này không?

+5

Tôi không nghĩ rằng có thể thực hiện việc này; tuy nhiên, bạn có thể bao gồm "xem cũng" sẽ tự động liên kết với lớp học siêu của bạn; chỉ cần đặt 'Xem thêm CLASSA.' vào cuối tài liệu' ClassB' của bạn và MATLAB sẽ làm phần còn lại. – wakjah

+0

Tôi không biết về điều này. Điều đó rất thông minh. – KronoS

Trả lời

5

Như được ghi chú bởi @SamRoberts, có standard way thuộc tính và phương pháp ghi lại tài liệu.

Ví dụ:

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 

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 

Bây giờ trên dòng lệnh, bạn có thể nói:

Bạn được định dạng đẹp siêu liên kết.

Cũng lưu ý những gì bạn nhận được với doc Derived (hoặc khi bạn đánh dấu từ và nhấn F1). Điều này gọi nội bộ help2html để chuyển đổi trợ giúp thành HTML. Ví dụ, chúng ta có thể làm được điều này chúng ta:

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

web

Lưu ý rằng kế thừa các thuộc tính/phương pháp được hiển thị.

+0

trên thực tế, tôi đã từng thấy hành vi này của 'doc' /' help2html' không mong muốn đặc biệt là khi các lớp của bạn kế thừa từ lớp 'handle'. Để tắt nó, tôi phải chỉnh sửa hàm MALTAB bên trong: '[toolboxdir ('matlab') '/helptools/private/help2xml.m']': http://pastebin.com/AYMa2p5q – Amro

+2

Trong trường hợp bạn thấy điều này hữu ích - thay vì sửa đổi một hàm bên trong, tôi thường kế thừa từ lớp 'HandleHiddenMethods' của riêng mình. Điều này kế thừa từ 'handle', và bao gồm một khối' methods (Hidden = true) 'duy nhất. Đây là các bản sao của tất cả các phương thức 'handle', quá tải để chỉ truyền cuộc gọi thẳng tới' handle'. Vì vậy, 'HandleHiddenMethods' hoạt động giống như' handle', nhưng không hiển thị các phương thức của nó trong tài liệu được tạo tự động. Điều này làm việc cho tất cả các phương thức khác với 'isvalid', được niêm phong và không thể bị quá tải. –

+0

@SamRoberts: thông minh, cảm ơn bạn đã chia sẻ mẹo này. Nó không phải là dễ dàng để theo dõi các sửa đổi, đặc biệt là khi nâng cấp MATLAB mỗi bản phát hành mới. – Amro

2

Nếu bạn đang viết tài liệu theo cách bạn mô tả, tôi nghĩ cách duy nhất bạn có thể nhận được những gì bạn đang yêu cầu là quá tải help để làm điều gì đó được tùy chỉnh. Ví dụ: quá tải help của bạn có thể tự gọi số builtin('help') và sau đó là builtin('help') trên siêu lớp của nó.

Tuy nhiên, bạn không ghi lại tài liệu theo cách tiêu chuẩn; thông thường, bạn sẽ ghi lại các thuộc tính bằng cách sử dụng các chú thích ngay trên chính thuộc tính đó và các phương thức tài liệu với các chú thích ngay bên dưới chữ ký hàm của phương thức. Nếu bạn đã làm điều đó, sau đó bạn sẽ tự động hiển thị trợ giúp cho tất cả các phương pháp kế thừa.

+0

Bạn có liên kết đến cách thức tài liệu thông thường không? Tôi đã làm theo các đề xuất [được nêu tại đây] (http://www.mathworks.com/help/matlab/matlab_prog/create-help-for-classes.html). – KronoS

+0

Xem câu trả lời hay hơn của @ Amro. –