开发区域

用MATLAB开发高级软件

制作代码可用,有用和可测试

写作matlab代码诱惑性地简单。抛光算法MATLAB代码的功能,使其可用,有用和可测试需要一些设计。

服用拼写检查我关于早些时候写的代码作为稻草人的例子,可以通过将其作为易于使用的Matlab对象包装它来使该功能可用,有用和可测试。

构建API允许更多用户在其代码,工具和工作流中使用SpellCheck功能。在这篇文章中,我们将在MATLAB中进行拼写检查,重点是易于使用。

为了设计一个可用的、有用的和可测试的API,以下是一些高级别的设计目标:

依赖项的安装和访问应该是容易和自动化的

SpellCheck功能由第三方库启用,而我可以编写大量文档关于需要安装的内容以及它的位置,只需使用MATLAB自动化它变得更加容易。

SpellCheck对象的类定义如下所示:

classdef拼写检查性质字典;CommentsOnly = true;结尾性质(隐藏)手柄;结尾%构造函数和方法到这里结尾

此类的属性允许指定字典文件,并为Jazzy库的句柄提供存储。此类上的静态方法将返回一个字符串,指定类的位置,从而允许将库下载到已知的相对位置。

MATLAB提供一整套命令来在网页和互联网上运行。利用这些命令,我​​们有:

方法(静态)%SPELLROOT方法,该方法将定位工具的根文件夹功能[sroot] = spellroot()%文件夹路径相对于此代码的位置sRoot = fileparts (mfilename (' fullpath '));结尾%downloadjazzy下载和提供爵士图书馆%从SourceForge获取Java拼写检查库功能downloadjazzy()%将jar文件存储在已知位置jazzyJar = fullfile (spellcheck.spellroot,'lib'“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平台的web连接和功能不仅限于SourceForge,还扩展到Github、ProjectLocker和File交换等。

简而言之,互联网所提供的一切仅仅是几行MATLAB代码。MATLAB可以很容易地连接到服务(REST、SOAP等),但那完全是另一个主题。

为该工具提供动力的词典也可以从SourceForge获取。鉴于该工具支持多种语言,为了简单起见,我们将以中性格式(CSV)指定可用词典的列表。

恩_US.zip,http://downloads.sourceforge.net/project/jazzydicts/jazzydicts/Dictionaries%201.0/en_US.zip en_NZ.zip,http://downloads.sourceforge.net/project/jazzydicts/jazzydicts/Dictionaries%201.0/en_NZ.zip 恩_GB.zip,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.Dictionary=哪个('en_usx.dic');%的默认创建一个花哨的拼写检查器obj.Handle=SpellCheck();obj.Handle.setDictionary(obj.Dictionary);obj.Handle.verbose=true;%检查并呼叫拼写检查器如果输入参数个数= = 1指定文件名或指定字符串filename=which(varargin{1});%启动拼写检查器如果isempty(文件名)%我们正在处理一个字符串对象检查(varargin{1});别的%我们正在处理一个文件,所以将其读入字符串str = fileread(文件名);obj.check(str);结尾别的%检查编辑器的内容obj.checkEditor ();结尾结尾%the check()和checkeditor()方法结尾

构造函数充当一个简单的开关场,允许用户根据提供给它的输入和输出检查字符串、文件或编辑器的内容。在本例中,不带参数的构造函数将检查编辑器的内容。这并不总是令人满意的,但为了便于说明,我保留了这种方式。

因为类的调用与同名的MATLAB函数的调用是相同的,所以代码为希望在过程代码中使用该类的用户提供了熟悉的接口。熟悉面向对象技术的开发人员可以使用此对象的方法对实用程序进行更细粒度的控制。

%CHECK方法检查输入字符串功能检查(obj、INPUTSR、varargin)%如果指定了线路编号,请将其用于链接如果~isempty(varargin)obj.Handle.linenumber=num2str(varargin{1});obj.Handle.checkSpelling(inputStr);别的obj.Handle.checkSpelling (inputStr);结尾结尾

check()方法是在橡胶遇到路面的地方。MATLAB代码调用Java代码并执行拼写检查。checkEditor方法(为简洁起见省略)与此类似,它读入编辑器中打开的当前文件,然后执行检查。

如果指定了一个行号,例如在checkEditor()代码的情况下,则输出包括使用MATLAB opentoline()函数指向该行的超链接。

测试我们的班级:

>>拼写检查%检查编辑器输入的内容(172):github无建议输入(174):API建议:AP建议:APB建议:APO

该类现在为我提供了一个命令,以检查我的编辑器的内容,使其在我作者内容中偷偷摸摸地访问它。例如,字典不包含单词github第172行或美国石油学会在这篇文章的第174行。

通过构造器测试其他路线:

>> spellcheck('majic') % Checks string >> spellcheck majic %等价语法

拼写检查对象也可以实例化和持久化,以便进行更精细的控制。

>> s =拼写检查;> > s.check(“论坛id”);%等价语法输入:majic建议:magic建议:manic

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

>> . dictionary = 'c:\Work\Spellchecker\public\de_DE\de_DEx.dic';>> s.check('seprechen sie deutch') %故意拼写错误

MATLAB返回修正的版本-“多伊奇说您”哪一个听起来正确(也许母语为该语言的人可以证实)。

对我的Matlab功能工作方式的方式感到满意,我最终可以解决最后的设计要求。

该实用程序应该是可测试的

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

classdeftestspellcheck < matlab.unittest.TestCase% TESTSPELLCHECK简单的单元测试为我们的拼写检查方法(测试)功能testSpellCheck(testCase)s=拼写检查(“majic”); testCase.verifyEqual(char(s.Handle.suggestions.elementAt(0)),“魔法”);结尾结尾结尾

我不会详细介绍建立强大的回归测试套件,而是达到要求的后果。

自动化测试套件的构建和使用是与第三方图书馆和产品集成的非常重要的部分。下载188bet金宝搏测试套件将我们的工作与上游依赖性变化隔离。如果jazzy图书馆的变化,演变或提高上游,它会自然地影响我们的功能。

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

总之,作为一个平台,MATLAB是一个典型的熔炉。从语言上可以获得各种技术和技巧,这些技术和技巧可以很容易地用于平台的扩展。作为一名开发人员,这是很有用的,因为MATLAB可以很好地利用一流的技术,以最小的效率创建健壮的解决方案rt。金宝搏官方网站




发布与MATLAB®R2015B

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。