一种非覆盖式更新代码内容的方法和装置与流程

文档序号:23755836发布日期:2021-01-29 16:43阅读:56来源:国知局
[0001]本发明涉及计算机
技术领域
:,具体而言涉及一种非覆盖式更新代码内容的方法和装置。
背景技术
::[0002]在软件程序的开发过程中,编写代码会涉及许多重复性的工作,重复的代码的编写工作是一件繁琐的体力劳动,借助代码生成器来生成代码是业内普遍采用的降低软件开发强度、减少代码的重复编写、提高开发效率的有效方式之一。但目前业界已有的代码生成器仅具备代码生成能力,这就导致了代码生成器的使用范围受限,其仅适用于软件项目开始的初期阶段,即基于已有需求设计完数据结构后的代码统一生成;而对于软件项目开发的中后期,需求产生变动的场景,由于代码生成器仅能重新生成代码,在更新代码时,这种重新生成的代码将会直接全面覆盖之前的旧代码,其中包含了已由开发人员手动修改或新加入的旧代码。这种直接覆盖式的重新生成代码方式会导致开发人员手动修改或新加入的内容被覆盖清除,这导致大量bug出现,一些功能无法运行。因此,代码生成器的代码生成功能不适合在软件开发过程中的需求或数据结构变动的场景中使用。[0003]对于软件开发过程中的需求或数据结构的变动而引发的代码修改和更新,完全由软件编程人员手动修改时,由于代码修改的工作量大、容易出错,存在代码修改或更新的准确性不高,且工作效率低下的问题。技术实现要素:[0004]本发明的目的在于提供一种非覆盖式更新代码内容的方法和装置,以改善上述问题。[0005]本发明的第一实施例提供了一种非覆盖式更新代码内容的方法,其包括:[0006]s1获得待更新代码文件中的对象的属性定义信息;[0007]s2当获得的对象的属性定义信息被修改时,获得对当前对象作出的修改类型和相应的修改字段,该修改类型包括:新增、更新、和删除;[0008]s3将上述修改后的对象的属性定义信息作为输入参数,使用代码生成工具和代码生成模板生成临时新代码文件;[0009]s4分别获得待更新代码文件的语法树和所述临时新代码文件的语法树,从所述待更新代码文件的语法树中提取所述删除类型的修改字段所对应的语法树节点,从所述临时新代码文件的语法树中提取所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0010]s5从所述待更新代码文件的语法树中删除所述更新类型的修改字段所对应的语法树节点和所述删除类型的修改字段所对应的语法树节点,在所述待更新代码文件的语法树中添加从所述临时新代码文件的语法树中提取的所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0011]s6将更新后的待更新代码文件的语法树转换为代码以便对所述待更新代码进行更新。[0012]其中:在步骤s1中,通过读取该待更新代码文件所连接的数据源来获得对象的属性定义信息。[0013]其中,在所述获得的对象的属性定义信息被修改之前,将对象的属性定义信息转化为json格式。[0014]其中:所述获得对当前对象作出的修改类型和相应的修改字段的步骤包括:[0015]对比修改前的对象的属性定义信息和修改后的对象的属性定义信息,得到对当前对象作出的修改类型和相应的修改字段;或[0016]通过监控记录函数直接监控和记录所作出的修改类型和相应的修改字段。[0017]本发明的第二实施例提供了一种非覆盖式更新代码内容的装置,其包括:[0018]对象信息获取模块,其用于获得待更新代码文件中的对象的属性定义信息;[0019]修改内容获取模块,其用于当获得的对象的属性定义信息被修改时,获得对当前对象作出的修改类型和相应的修改字段,该修改类型包括:新增、更新、和删除;[0020]代码生成模块,其用于将修改后的对象的属性定义信息作为输入参数,使用代码生成模板生成待更新代码文件;[0021]语法树解析模块,其用于获得待更新代码文件的语法树和所述临时新代码文件的语法树;[0022]节点提取模块,其用于从所述待更新代码文件的语法树中提取所述删除类型的修改字段所对应的语法树节点,从所述临时新代码文件的语法树中提取所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0023]语法树合并模块,其用于从所述待更新代码文件的语法树中删除所述更新类型的修改字段所对应的语法树节点和所述删除类型的修改字段所对应的语法树节点,在所述待更新代码文件的语法树中添加从所述临时新代码文件的语法树中提取的所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0024]语法树转换代码模块,其用于将更新后的待更新代码文件的语法树转换为代码以便对所述待更新代码进行更新。[0025]其中:所述对象信息获取模块是通过读取该待更新代码文件所连接的数据源来获得对象的属性定义信息。[0026]其中,所述装置还包括格式转化模块,其用于在所述获得的对象的属性定义信息被修改之前,先将对象的属性定义信息转化为json格式。[0027]其中:所述修改内容获取模块执行以下操作:[0028]对比修改前的对象的属性定义信息和修改后的对象的属性定义信息,得到对当前对象作出的修改类型和相应的修改字段;或者[0029]通过监控记录函数直接监控和记录作出的修改类型和相应的修改字段。[0030]本发明的第三实施例提供了一种计算机可读存储介质,其中,在所述计算机可读存储介质上记录有当被处理器执行时实现第一实施例及其优选实施例所述的方法的计算机程序。[0031]本发明的第四实施例提供了一种计算装置,包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,促使处理器执行第一实施例及其优选实施例所述所述的方法。[0032]根据本发明提供的一种非覆盖式更新代码内容的方法和装置,采用了解析待更新代码文件的语法树并对其进行更新,再将更新后的语法树转换成更新代码内容的新颖方法,这样不会触及开发人员所做的修改或自定义添加的代码内容,使其得以保留而不被覆盖,即开发人员在之前版本中所做的代码更改信息或者自定义的代码信息均能够得以保留,不会被覆盖或清除,从而实现了对代码内容的非覆盖式更新。由此,本发明提供的非覆盖式更新代码内容的方法和装置可以用于代码生成器中,使代码生成器具有提供非覆盖式更新代码的能力,使得代码生成器可以适用于软件项目开发的全周期(新需求的初级阶段及需求变更的中后期阶段),通过流程自动完成代码更新,提高了软件的开发效率,避免了人为修改导致的遗漏和出错,提高了代码质量。附图说明[0033]图1是本发明第一实施例提供的非覆盖式更新代码内容方法的流程图;[0034]图2是本发明第二实施例提供的非覆盖式更新代码内容方法的流程图;[0035]图3是本发明第三实施例提供的非覆盖式更新代码内容装置的示意性框图;[0036]图4是本发明第四实施例提供的非覆盖式更新代码内容装置的示意性框图。具体实施方式[0037]下面将结合具体实施例和附图,对本发明提出的技术方案进行清楚、完整地描述,显然所描述的示例性实施例仅仅出于说明目的而非限定。[0038]图1是本发明第一实施例提供的非覆盖式更新代码内容方法的流程图。如图1所示,本发明第一实施例提供的非覆盖式更新代码内容的方法包括:[0039]s1获得待更新代码文件中的对象的属性定义信息。[0040]这里的所述待更新代码文件为有内容需要更新的旧版本的代码文件。例如,由于在软件开发过程中的需求或数据结构变动而要对至少一部分代码作出修改的旧版本的代码文件。[0041]获得待更新代码文件中的对象的属性定义信息的方式可以是通过读取该待更新代码文件所连接的数据源来获得对象的属性定义信息。数据源就是存储数据的地方,例如数据库,其就是一种数据源。代码正常运行一般是会连接到数据源的,例如代码正常运行工作需要和数据库连接。通过读取在程序代码中定义的对象的属性信息的保存位置来获得对象的属性定义信息。[0042]不同的数据源有对应的实现方式。以常见的关系型数据库为例,可以通过数据库的查询sql得到对象(对于数据库来讲,跟代码映射的对象就是数据表)的字段定义。例如,mysql可以通过“showfullcolumnsfromtable_name”的sql语句查询得到表的字段定义。此时得到的是数据库查询结果,如下user表查询结果的示例:[0043]fieldtypenullkeydefaultextracommentidbigintnopmiauto_incrementid主键realnamevarchar(100)noꢀꢀꢀ昵称ageintnoꢀꢀꢀ年龄[0044]s2当获得的对象的属性定义信息被修改时,获得对当前对象作出的修改类型和相应的修改字段,该修改类型包括:新增、更新、和删除。[0045]在这里,可以通过代码生成工具对获得的对象的属性定义信息进行修改,代码生成工具可以是任何已知的代码生成器,也可以是用于生成代码的ui界面或命令行等。开发人员或代码生成工具的使用者基于需求的变化,可以使用代码生成工具修改相应的对象的属性定义信息,从而可得到对当前对象作出的修改类型和相应的修改字段。例如,基于上面的例子,根据需求的变化,开发人员或代码生成工具的使用者作出的修改操作如下:[0046]1个“新增类型”,修改字段:“birthdate”,类型是“date”,备注是“出生日期”;[0047]1个“更新类型”,修改字段:“realname”,备注改成了“真实姓名”;[0048]1个“删除类型”,修改字段:“age”。[0049]如下user表查询结果的示例:[0050]fieldtypenullkeydefaultextracommentidbigintnopmiauto_incrementid主键realnamevarchar(100)noꢀꢀꢀ真实姓名birthdatedatenoꢀꢀꢀ出生日期[0051]再者,获得对当前对象作出的修改类型和相应的修改字段的步骤包括:[0052]对比修改前的对象的属性定义信息和修改后的对象的属性定义信息,得到对当前对象作出的修改类型和相应的修改字段;或[0053]通过监控记录函数直接监控和记录作出的修改类型和相应的修改字段。[0054]也就是说,可以通过两种方式获得对当前对象作出的修改类型和相应的修改字段。第一种方式是通过将修改前的对象的属性定义信息和修改后的对象的属性定义信息进行对比,从而可以知道哪些字段做了修改以及修改的类型,即新增类型、更新类型或删除类型。第二种方式是设置一个监控记录函数,直接监控和记录对当前对象作出的修改行为,即直接监控和记录作出的修改类型和相应的修改字段。[0055]s3将上述修改后的对象的属性定义信息作为输入参数,使用代码生成工具和代码生成模板生成临时新代码文件。[0056]代码生成工具可以与上面所述的代码生成工具相同。代码生成模板可以是代码生成工具自带的模板,也可以是开发人员或代码生成工具的使用者利用业内常见的诸如freemarker、velocity、thymeleaf等模板语言来预先编写的自定义模板。[0057]s4分别获得待更新代码文件的抽象语法树和所述临时新代码文件的抽象语法树,从所述待更新代码文件的抽象语法树中提取所述删除类型的修改字段所对应的语法树节点,从所述临时新代码文件的抽象语法树中提取所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点。[0058]可以使用诸如javaparser等语法树解析引擎分别对待更新代码文件和所述临时新代码文件进行语法树解析,分别获得所述待更新代码文件的抽象语法树和所述临时新代码文件的抽象语法树,这样就可以获得目标字段关于语法树的节点定义信息。[0059]以javaparser为例,可以通过如下函数实现:[0060]compilationunitcompilationunit=staticjavaparser.parse(code);[0061]可以得到任意类型的节点数据,使用如下所列的函数可以得到代码中的全部字段的属性定义集合。[0062]list<fielddeclaration>fielddeclarationlist=compilationunit.findall(fielddeclaration.class)。[0063]但是本领域技术人员都知道,使用语法树解析引擎将代码文件解析成具体语法树在这里也是适用的,这里并不受限于抽象语法树。[0064]基于在s2步骤中获得的字段信息,可以从所述临时新代码文件的抽象语法树中提取到所需要的语法树节点定义信息。例如:[0065]“新增”字段birthdate的相关属性定义节点和方法定义节点;[0066]“更新”字段realname的相关属性定义节点和方法定义节点。[0067]还可以从所述待更新代码文件的抽象语法树中提取到要被删除的字段的语法树节点定义信息,例如:[0068]“删除”字段age的相关属性定义节点和方法定义节点。[0069]以上的例子仅仅出于解释说明的目的,在软件开发过程中的需求或数据结构的变动,可以同时出现新增类型、更新类型、和删除类型,也可以只有部分类型出现,例如只发生了新增类型、或是更新类型、或是新增类型和删除类型二者、或是新增类型和更新类型二者、或是更新类型和删除类型二者等情况,这是基于实际需要而发生的。[0070]s5从所述待更新代码文件的抽象语法树中删除所述更新类型的修改字段所对应的语法树节点和所述删除类型的修改字段所对应的语法树节点,在所述待更新代码文件的抽象语法树中添加从所述临时新代码文件的抽象语法树中提取的所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点。[0071]基于在步骤s4中获得的语法树节点信息,即在所述待更新代码文件的抽象语法树中的所述删除类型的修改字段所对应的语法树节点、和在所述临时新代码文件的抽象语法树中的所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点,从所述待更新代码文件的抽象语法树中移除“删除”字段的相关语法树节点(属性定义节点和方法定义节点等)、以及移除“更新”字段的相关语法树节点(属性定义节点和方法定义节点等);在所述待更新代码文件的抽象语法树中分别添加从所述临时新代码文件的抽象语法树中提取出的“新增”字段的相关语法树节点(属性定义节点和方法定义节点等)、和“更新”字段的相关语法树节点(属性定义节点和方法定义节点等)。具体操作方法是本领域技术人员所熟知的,继续以javaparser为例,移除操作可以通过nodelist.remove()实现;添加操作可以通过nodelist.add()实现。[0072]s6将更新后的待更新代码文件的抽象语法树转换为代码以便对所述待更新代码进行更新。[0073]可以使用现有的已知方法来实现将更新后的抽象语法树转换为代码内容的相应操作。继续以javaparser为例,将语法树转换为代码内容可以通过compilationunit.tostring()实现。[0074]对所述待更新代码进行更新的方法通常就是将新的代码内容写回到所述待更新代码文件,这可以通过如java语言的filewriter对象或者一些封装工具类如apachecommons的fileutils.writestringtofile等来实现。[0075]图2是本发明第二实施例提供的非覆盖式更新代码内容方法的流程图。如图2所示,该第二实施例提供的非覆盖式更新代码内容的方法就是在第一实施例所提供的方法中加入了步骤s12,即在所述获得的对象的属性定义信息被修改之前,先将对象的属性定义信息转化为json格式。具体步骤如下所述:[0076]s1获得待更新代码文件中的对象的属性定义信息;[0077]s12将对象的属性定义信息转化为json格式;[0078]s2当获得的对象的属性定义信息被修改时,获得对当前对象作出的修改类型和相应的修改字段,该修改类型包括:新增、更新、和删除;[0079]s3将上述修改后的对象的属性定义信息作为输入参数,使用代码生成工具和代码生成模板生成临时新代码文件;[0080]s4分别获得待更新代码文件的抽象语法树和所述临时新代码文件的抽象语法树,从所述待更新代码文件的抽象语法树中提取所述删除类型的修改字段所对应的语法树节点,从所述临时新代码文件的抽象语法树中提取所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0081]s5从所述待更新代码文件的抽象语法树中删除所述更新类型的修改字段所对应的语法树节点和所述删除类型的修改字段所对应的语法树节点,在所述待更新代码文件的抽象语法树中添加从所述临时新代码文件的抽象语法树中提取的所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0082]s6将更新后的待更新代码文件的抽象语法树转换为代码以便对所述待更新代码进行更新。[0083]其中,对步骤s12进行举例说明。json数据的示例如下:[0084]{[0085]“classname”:“user”,[0086]“columns”:[[0087]{“field”:“id”,“type”:“long”,“isnull”:false,“isprimarykey”:true,“comment”:“id主键”},[0088]{“field”:“realname”,“type”:“string”,“isnull”:false,“isprimarykey”:false,“comment”:“昵称”},[0089]{“field”:“age”,“type”:“integer”,“isnull”:false,“isprimarykey”:false,“comment”:“年龄”}[0090]][0091]}[0092]继续该例子,在步骤s2中,在获得的对象的属性定义信息被修改后,此时新的json数据为:[0093]{[0094]“classname”:“user”,[0095]“columns”:[[0096]{“field”:“id”,“type”:“long”,“isnull”:false,“isprimarykey”:true,“comment”:“id主键”},[0097]{“field”:“realname”,“type”:“string”,“isnull”:false,“isprimarykey”:false,“comment”:“真实姓名”},[0098]{“field”:“birthdate”,“type”:“date”,“isnull”:false,“isprimarykey”:false,“comment”:“出生日期”}[0099]][0100]}[0101]继续该例子,这里给出在步骤s3中所提及的代码生成模板的一个自定义例子:[0102][0103]另外,对第一实施例的各个步骤的阐释内容也适用于第二实施例的相应步骤,第二实施例所给出的例子也适用于第一实施例。[0104]尽管在第一实施例和第二实施例中介绍了使用语法树解析引擎对代码文件进行语法树解析以获得抽象语法树,但是将代码文件解析成具体语法树在这里也是适用的。[0105]基于以上所述的第一实施例和第二实施例,本发明采用了解析待更新代码文件的抽象语法树并对其进行更新,再将更新后的语法树转换成更新代码内容的新颖方法,这样不会触及开发人员对代码所做的手动修改内容或自定义添加的代码内容,使其得以保留而不被覆盖,即开发人员在之前版本中手动执行的代码更改信息或者自定义的代码信息均能够得以保留,不会被覆盖或清除,从而实现了对代码内容的非覆盖式更新,使得代码生成器可以适用于软件项目开发的全周期(新需求的初级阶段及需求变更的中后期阶段),通过流程自动完成代码更新,从而提高了软件的开发效率,避免了人为修改导致的遗漏和出错,提高了代码质量。[0106]下面通过一个具体例程继续说明本发明提供的技术方案的有益效果。[0107]假设待更新代码内容如下所示:[0108][0109][0110]使用现有技术的覆盖式代码更新方法,则开发人员手动新增的代码内容:privatestaticstringstatus_a=“在职”;和[0111]privatestringgetstatus(){[0112]…}[0113]将被覆盖清除。[0114]而使用本发明提供的非覆盖式更新代码内容的方法,更新后的代码内容如下所示:[0115][0116]由此可见,开发人员手动新增的代码内容:privatestaticstringstatus_a=“在职”;和[0117]privatestringgetstatus(){[0118]…}[0119]能够被保留,不会被覆盖或清除。[0120]图3是本发明第三实施例提供的非覆盖式更新代码内容装置的示意性框图。如图3所示,本发明第三实施例提供的非覆盖式更新代码内容的装置包括:[0121]对象信息获取模块1,其用于获得待更新代码文件中的对象的属性定义信息;[0122]修改内容获取模块2,其用于当获得的对象的属性定义信息被修改时,获得对当前对象作出的修改类型和相应的修改字段,该修改类型包括:新增、更新、和删除;[0123]代码生成模块3,其用于将修改后的对象的属性定义信息作为输入参数,使用代码生成模板生成待更新代码文件;[0124]语法树解析模块4,其用于获得待更新代码文件的抽象语法树和所述临时新代码文件的抽象语法树;[0125]节点提取模块5,其用于从所述待更新代码文件的抽象语法树中提取所述删除类型的修改字段所对应的语法树节点,从所述临时新代码文件的抽象语法树中提取所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0126]语法树合并模块6,其用于从所述待更新代码文件的抽象语法树中删除所述更新类型的修改字段所对应的语法树节点和所述删除类型的修改字段所对应的语法树节点,在所述待更新代码文件的抽象语法树中添加从所述临时新代码文件的抽象语法树中提取的所述新增类型的修改字段所对应的语法树节点和所述更新类型的修改字段所对应的语法树节点;[0127]语法树转换代码模块7,其用于将更新后的待更新代码文件的抽象语法树转换为代码以便对所述待更新代码进行更新。[0128]其中:所述对象信息获取模块是通过读取该待更新代码文件所连接的数据源来获得对象的属性定义信息。[0129]其中:所述修改内容获取模块执行以下操作:[0130]对比修改前的对象的属性定义信息和修改后的对象的属性定义信息,得到对当前对象作出的修改类型和相应的修改字段;或者[0131]通过监控记录函数直接监控和记录作出的修改类型和相应的修改字段。[0132]图4是本发明第四实施例提供的非覆盖式更新代码内容装置的示意性框图。如图4所示,所述非覆盖式更新代码内容装置还包括格式转化模块11,其用于在所述获得的对象的属性定义信息被修改之前,先将对象的属性定义信息转化为json格式。[0133]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述第三实施例描述的装置的具体工作过程,可以参考前述第一实施例中的对应过程,前述第一实施例及相应的优选实施例中列举的例子和相关描述,同样适用于解释第三实施例描述的装置的工作过程,在此不再重复描述。[0134]同样,上述第四实施例描述的装置的具体工作过程,可以参考前述第二实施例中的对应过程,前述第二实施例及相应的优选实施例中列举的例子和相关描述,同样适用于解释第四实施例描述的装置的工作过程,在此不再重复描述。[0135]基于以上所述的第三实施例和第四实施例,本发明提供的非覆盖式更新代码内容装置采用了解析待更新代码文件的抽象语法树并对其进行更新,再将更新后的语法树转换成更新代码内容的新颖方法,这样不会触及开发人员所做的修改或自定义添加的代码内容,使其得以保留而不被覆盖,即开发人员在之前版本中所做的代码更改信息或者自定义的代码信息均能够得以保留,不会被覆盖或清除,从而实现了对代码内容的非覆盖式更新,使得代码生成器可以适用于软件项目开发的全周期(新需求的初级阶段及需求变更的中后期阶段),通过流程自动完成代码更新,从而提高了软件的开发效率,避免了人为修改导致的遗漏和出错,提高了代码质量。[0136]以上已参照图1至图4描述了根据本申请示例性实施例的非覆盖式更新代码内容的方法和装置。然而,应理解的是:附图3和4所示出的装置及其单元模块可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些装置或单元模块可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。此外,这些装置或单元模块所实现的一个或多个功能也可由物理实体设备(例如,处理器、客户端或服务器等)中的组件来统一执行。[0137]此外,上述非覆盖式更新代码内容的方法可通过记录在计算可读介质上的程序来实现,例如,根据本申请示例性实施例,可提供一种计算机可读存储介质,其中在所述计算机可读存储介质上记录有当被处理器执行时实现如第一实施例所述的方法或其与相应优选实施例的组合所述的方法的计算机程序。另外,还可提供一种计算机可读存储介质,其中在所述计算机可读存储介质上记录有当被处理器执行时实现如第二实施例所述的方法或其与相应优选实施例的组合所述的方法的计算机程序。[0138]上述计算机可读存储介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,应注意,所述计算机程序还可用于执行除了上述步骤以外的附加步骤或者在执行上述步骤时执行更为具体的处理,这些附加步骤和进一步处理的内容已经在参照图1和2进行相关方法的描述过程中提及,因此这里为了避免重复将不再进行赘述。[0139]此外,上述非覆盖式更新代码内容的方法还可以通过记录在计算装置上的程序来实现。该计算装置包括存储部件和处理器,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行如第一实施例所述的方法步骤或其与相应优选实施例的组合所述的方法步骤;或者执行如第二实施例所述的方法步骤或其与相应优选实施例的组合所述的方法步骤。[0140]具体说来,所述计算装置可以部署在服务器或客户端中,也可以部署在分布式网络环境中的节点装置上。此外,所述计算装置可以是pc计算机、平板装置、个人数字助理、智能手机、web应用或其他能够执行上述指令集合的装置。[0141]这里,所述计算装置并非必须是单个的计算装置,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。计算装置还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子装置。[0142]在所述计算装置中,处理器可包括中央处理器(cpu)、图形处理器(gpu)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。[0143]根据本申请示例性实施例的方法中所描述的某些操作可通过软件方式来实现,某些操作可通过硬件方式来实现,此外,还可通过软硬件结合的方式来实现这些操作。[0144]处理器可运行存储在存储部件之一中的指令或代码,其中,所述存储部件还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,所述网络接口装置可采用任何已知的传输协议。[0145]存储部件可与处理器集成为一体,例如,将ram或闪存布置在集成电路微处理器等之内。此外,存储部件可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储部件和处理器可在操作上进行耦合,或者可例如通过i/o端口、网络连接等互相通信,使得处理器能够读取存储在存储部件中的文件。[0146]此外,所述计算装置还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。计算装置的所有组件可经由总线和/或网络而彼此连接。[0147]根据本申请示例性实施例的方法所涉及的操作可被描述为各种互联或耦合的功能块或功能示图。然而,这些功能块或功能示图可被均等地集成为单个逻辑装置或按照非确切的边界进行操作。[0148]尽管以上描述了本申请的示例性实施例,但是应理解:上述描述仅是示例性的,并非穷尽性的。本申请不限于所披露的各示例性实施例,并且在不偏离本申请的范围和精神的情况下,对于本
技术领域
:的普通技术人员来说许多修改和变更都是显而易见的。因此,本申请的保护范围应该以权利要求的范围为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1