开发区域

先进与MATLAB软件开发

使代码有用,有用的和可测试的

编写MATLAB代码是诱惑地容易。抛光的功能算法MATLAB代码有用,有用的和可测试的需要设计。

解释清楚我之前写过的代码作为一个稻草人的例子,可以让该功能可用,有用的和可测试的包装是一个易于使用的MATLAB对象。

建立一个解释清楚API允许更多的用户使用的功能在他们的代码中,工具和工作流。在这篇文章中,我们将解释清楚在MATLAB重点是使它易于使用。

为了设计一个可用的,有用的和可测试的API,几个高级设计目标可以表达如下:

安装和使用的依赖关系应该很容易和自动化

解释清楚的功能是通过第三方库,虽然我可以写很多文件需要安装什么和在哪里,它变得更容易使用MATLAB自动化。

解释清楚的类定义对象的样子:

classdef解释清楚属性字典;CommentsOnly = true;结束属性(隐藏)处理;结束%的构造函数和方法去这里结束

这个类的属性允许字典文件的规范,并提供存储处理的奔放的图书馆。这个类的静态方法会返回一个字符串指定类所在地,这允许下载图书馆的一个已知的相对位置。

MATLAB命令提供了一套完整的经营网络和互联网上。利用这些命令,我们有:

方法(静态)% SPELLROOT方法定位工具的根文件夹函数[sRoot] = spellroot ()%文件夹路径相对于这段代码的位置sRoot = fileparts (mfilename (' fullpath '));结束% DOWNLOADJAZZY下载并提供奔放的图书馆从SourceForge %获取Java拼写检查库函数downloadJazzy ()%将jar文件存储在一个已知的位置jazzyJar = fullfile (spellcheck.spellroot,“自由”,“java”,“jazzy0 - 2 - 1. - jar”);urlwrite (“http://downloads.sourceforge.net/project/jazzy/oldfiles/jazzy0 - 2 - 1. - jar”,jazzyJar);%将JAR文件添加到MATLAB路径。如果存在(jazzyJar“文件”)javaaddpath (jazzyJar);结束结束结束

这些几行代码自动化图书馆直接从SourceForge的安装到用户的MATLAB会话。

真正的含义是,仅用了几行代码授权我们的MATLAB应用程序能够利用的成千上万的项目在SourceForge可能手头的任务有关。网络连通性和MATLAB平台的功能不限于SourceForge但延伸到Github, ProjectLocker,文件交换等。

总而言之,互联网提供的一切只是几行MATLAB代码之外。MATLAB可以同样轻松地连接到服务(REST、SOAP等)但这是另一个话题。

权力的字典工具也可以从SourceForge获取。考虑到该工具是多语言能力,我们将指定可用字典的列表以一种中立的格式(CSV)为简单起见。

en_US。邮政,http://downloads.sourceforge.net/project/jazzydicts/jazzydicts/Dictionaries%201.0/en_US.zip en_NZ。邮政,http://downloads.sourceforge.net/project/jazzydicts/jazzydicts/Dictionaries%201.0/en_NZ.zip en_GB。邮政,http://downloads.sourceforge.net/project/jazzydicts/jazzydicts/Dictionaries%201.0/en_GB.zip

下载这些工件的代码几乎完全相同的代码库,简洁中省略了这篇文章。

考虑到现在我们的软件构件都是在的地方,我们可以粘起来。这给我们带来了我们的下一个设计目标。

实用程序应该使用多样化的用户社区

MATLAB已经超过30年,有一个非常多样化的用户社区。从工程师汽车OEM研究员在生物技术创业,从一个学生在他的论文的软件专业团队开发MATLAB代码在华尔街,平台和语言有一个惊人的多样性的用户基础。

有趣的是,MATLAB语言允许一个精心设计的对象看,感觉和工作像一个典型的MATLAB函数。用更简单的术语来说,MATLAB类可以做几乎所有程序代码可以做……和更多。

为了说明这一点,我们班的一个入口点的设计是包装我们的下一步的功能。

方法%的构造函数函数解释清楚obj =(变长度输入宗量)%提供Jazzy MATLAB进口com.mathworks.spellcheck。*;%设置一个默认的语言。obj。字典= (“en_USx.dic”);%的默认%创建一个奔放的校对者obj。处理解释清楚= ();obj.Handle.setDictionary (obj.Dictionary);obj.Handle。verbose = true;%检查和校对者如果输入参数个数= = 1%或字符串指定指定文件名文件名=,(变长度输入宗量{1});%消防检查如果isempty(文件名)%我们正在处理一个字符串obj.check(变长度输入宗量{1});其他的%我们正在处理一个文件读成一个字符串str = fileread(文件名);obj.check (str);结束其他的%检查的内容编辑器obj.checkEditor ();结束结束% check()和checkEditor()方法到这里结束

构造函数是一个简单的调车场允许用户检查字符串、文件或者编辑的内容取决于提供的输入和输出。在这种情况下,我们不带参数的构造器会检查的内容编辑器。这并不总是可取的但我离开这样出于演示目的。

以来,类的调用相同名称相同的MATLAB函数的调用,代码提供了一个熟悉的界面,用户希望使用这个类的程序代码。熟悉面向对象技术的开发人员可以使用该对象的方法进行细粒度的控制效用。

%检查方法检查输入字符串函数检查(obj inputStr变长度输入宗量)%如果指定行号使用它的链接如果obj.Handle ~ isempty(变长度输入宗量)。linenumber = num2str(变长度输入宗量{1});obj.Handle.checkSpelling (inputStr);其他的obj.Handle.checkSpelling (inputStr);结束结束

检查()方法是橡胶与道路的地方。MATLAB代码调用Java代码和拼写检查执行。checkEditor方法(为了简便起见,我们省略了)是类似的,它读取当前在编辑器中打开的文件,然后执行检查。

如果linenumber checkEditor如在指定()代码,输出包括超链接线使用MATLAB opentoline()函数。

测试我们班:

解释清楚> > %检查的内容编辑器输入(172):github不建议输入(174):API建议:美联社建议:APB建议:

类现在提供我一个命令来检查我的编辑的内容使它非常容易我作者的内容。例如,字典里没有这个词github在第172行或API这篇文章的第174行。

测试其他路线通过构造函数:

> >解释清楚(论坛id) % > >检查字符串解释清楚论坛id %等价的语法

解释清楚对象也可以细粒度控制实例化并持续。

> > s =解释清楚;> > s.check(“论坛id”);%等价的语法输入:论坛id建议:神奇的建议:躁狂

这真的是多语言能力吗?我再次测试代码设置字典德语。

> >。字典= ' c: \ \工作检查公共\ de_DE \ \ de_DEx.dic”;> >。检查(seprechen您多伊奇)%故意拼写错误输入:seprechen建议:说输入:多伊奇建议:deutsch

MATLAB -返回修正版本“多伊奇说您”这听起来正确的(可能是一个母语的语言可以证实)。

满意我的MATLAB功能工作的方式,我终于可以解决最后的设计要求。

实用程序应该是可测试的

在其最简单的形式,一个单元测试练习的代码看起来像:

classdeftestspellcheck < matlab.unittest.TestCase% TESTSPELLCHECK为我们解释清楚简单的单元测试方法(测试)函数解释清楚testSpellCheck (testCase) = (“论坛id”);testCase.verifyEqual (char (s.Handle.suggestions.elementAt (0)),“魔法”);结束结束结束

我不会去构建一个健壮的回归测试套件的细节,而是停留在需求的影响。

的建设和使用自动化测试套件是一个非常重要的部分集成与第三方库和产品。下载188bet金宝搏测试套件隔离我们的工作从上游依赖变化。如果Jazzy库发生变化,发展或提高上游,这自然会影响我们的功能。

拥有一个完全自动化的测试套件购买能力重新测试功能对上游更改奔放的图书馆。在这种特殊情况下,代码很稳定但我写这个的原因是经常,上游模块非常积极维护和变化非常频繁。在这种情况下,投资建立一个回归测试套件很快就有回报的。

总之,作为一个平台MATLAB是典型的熔炉。各种各样的技术和技巧可以利用可用的语言容易扩展的平台。作为一名开发人员,这是很有用的MATLAB可以玩的一流技术创建健壮的解决方案以最小的努力。金宝搏官方网站




发表与MATLAB®R2015b

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。