2010-03-10 3 views
30

Tôi đang viết một ứng dụng khá lớn bằng cách sử dụng MATLAB hướng đối tượng và điều này đã khiến tôi suy nghĩ về cách viết mã. Nếu đây là C, tôi sẽ sử dụng Doxygen. Đối với Java, tôi sẽ sử dụng JavaDoc. Cả hai đều có hầu hết các tiêu chuẩn đã được thống nhất về cách thức lớp và phương thức tài liệu nên xem xét và những gì nó nên chứa.Làm cách nào để ghi lại mã MATLAB hướng đối tượng?

Nhưng còn mã MATLAB thì sao? Phần lớn tôi đã thấy trong các lớp của TMW là một hoặc hai câu ngắn ở đầu lớp, và tôi không thể tìm thấy bất kỳ chủ đề nào dành cho việc viết tư liệu các ứng dụng MATLAB khá lớn.

Vậy làm thế nào để bạn ghi lại các lớp MATLAB? Bất kỳ vấn đề về phong cách cụ thể hoặc công cụ bổ sung nào?

Trả lời

25

Tôi nhận ra câu hỏi là cũ, nhưng vì lợi ích của Google: Matlab có tính năng tích hợp cho điều đó. Bạn viết bình luận của bạn theo một phong cách nào đó (a la JavaDoc) và chúng được nhận bởi các hàm trợ giúp và doc. Nó có thể được sử dụng để ghi lại các lớp, thuộc tính và phương thức. Nó là hoàn toàn đáng ngạc nhiên, nhưng một chút khó tính. Doc là ở đây:

http://www.mathworks.com/help/matlab/creating-help.html

+0

Đây chính xác là những gì tôi đang tìm kiếm, cảm ơn bạn. – jjkparker

10

tôi ghi lại oo mã của tôi theo cách sau:

  1. Vào đầu của tập tin có chứa 'classdef', tôi viết một bản tóm tắt về những gì lớp nào, và sử dụng điển hình. Tôi cũng giải thích chi tiết các thuộc tính và tôi thêm một mô tả 1 câu của mỗi phương pháp.
  2. Sau mỗi định nghĩa thuộc tính, tôi thêm một câu giải thích về nó (trên cùng một dòng)
  3. Mỗi phương pháp được viết thành một hàm, tức là nó có dòng H1, tóm tắt và giải thích đầu vào và thông số đầu ra.

Khi bạn gọi 'doc myClass', bạn sẽ thấy (1) ở đầu, tiếp theo là danh sách các thuộc tính được giải thích bởi các câu bạn đã thêm vào (2) và danh sách các phương pháp hiển thị H1- dòng và phần còn lại của trợ giúp (3) nếu bạn nhấp vào liên kết. Ngoài ra, tất cả các lớp của tôi phân lớp một siêu lớp chung thực hiện (trong số những người khác) phương thức 'help' gọi doc (class (obj)), cho phép tôi đưa ra sự trợ giúp từ mọi cá thể của lớp.

Ví dụ

%# MYCLASS is a sample class 
%# All this text will show up at the top of the help if you call 'doc myClassName' 
%# 
%# myClass is an example for documentation. It implements the following properties and methods: 
%# PROPERTIES 
%# myProp - empty sample property (some more explanation could follow here) 
%# 
%# METHODS 
%# myMethod - sample method that calls doc 
%# 

classdef myClass 

properties 
    myProp = []; %# empty sample property 
end %# properties 

methods 

%%# MYMETHOD -- use %% so that you can easily navigate your class file 
function myMethod(obj) 
%#MYMETHOD calls up the help for the object 
%# 
%# SYNOPSIS myMethod(obj) 
%# INPUT obj: the object 
%# OUTPUT none 
%# 
    try 
     doc(class(obj)) 
    catch 
     help(class(obj)) 
    end 
    end %#myMethod 
end %#methods 

end %#myClass 

Sửa 1 Nếu bạn muốn có một tài liệu html thoải mái, bạn có thể, ngoài ra, sử dụng m2html để tạo ra nó cho bạn. M2html sẽ thu thập các văn bản trợ giúp và thậm chí nó có thể làm đồ thị phụ thuộc.

Chỉnh sửa 2 Trong khi m2html tài liệu mã Matlab chuẩn độc đáo, nó không có hỗ trợ cụ thể cho lớp. Điều này có nghĩa là bạn nhận được các phương thức như là 'các hàm con' được liên kết trong lớp, nhưng bạn không nhận được một bản tóm tắt tốt đẹp như bạn nhận được với Doxygen, hoặc bạn nhận được với trình duyệt tài liệu dựng sẵn.

+0

m2html có thể tạo tài liệu cho cú pháp classdef mới trong Matlab không? Tôi không thể tìm thấy bất kỳ gợi ý nào trong tài liệu. –

+0

@ Jonas: Yeah m2html thật tuyệt, buit không phải là tốt nhất cho các lớp MATLAB. Hơn nữa, bạn không thể loại trừ một số giám đốc mà bạn không muốn lập chỉ mục và tài liệu! Có cách nào tốt hơn cho đến bây giờ để làm điều đó ngoại trừ doxygen? Cảm ơn – tim

3

Hãy thử Sphinx với phần mở rộng matlabdomain. Nhân sư là một gói Python tự động mã hóa tài liệu bằng cách sử dụng ReStructuredText (rst) markup.Phần mở rộng sphinxcontrib-matlabdomain cho phép tự động tài liệu của mã MATLAB sử dụng đánh dấu rst được Sphinx công nhận trong các tài liệu của nó. Gửi lỗi và đề xuất đến số issue tracker on BitBucket.

Ví dụ, đoạn mã sau vào my_project/my_fun.m:

function [outputs] = my_fun(args) 
% MY_FUN does really cool stuff 
% [OUTPUTS] = MY_FUN(ARGS) 
% 
% :param args: Input arguments 
% :type args: cell array 
% :returns: outputs 
% :raises: :exc:`my_project.InvalidInput` 

code ... 
end 

sẽ được ghi lại trong một tập tin đầu tiên như thế này:

.. _my-project 

My Project 
========== 
.. automodule:: my_project 

    This folder contains all the functions and classes for my project. 

My Function 
----------- 
.. autofunction:: my_fun 

và sẽ tạo ra html (hoặc pdf, cao su, và nhiều người khác) như được hiển thị trên this blog post.