专利名称:根据类的规范构建可编译且可执行应用程序的设备和方法
技术领域:
本发明涉及根据类所表达的规范构建可编译且可执行的应用程序, 并且属于面向对象编程的范畴。
背景技术:
术语"类,,在这里意味着由以下所表达的表达形式类名以及至少一 个所存储数据的定义(或表示)和/或由至少一个指令所描述的至少一个 公开函数(public fUnction )。
此外,表达形式"应用程序规范"在这里意味着定义所需应用程序应 当满足的至少一个要求的至少一个语句。更确切地,该应用程序要求描 述了所述应用程序将要做什么,并且描述了其功能性和非功能性特征是 什么。优选地,这些要求以自然语言来表达,但是它们可以在任何形式 化或非形式化的文本表示形式下进行表达。
许多作者已经描述了编写(软件)应用程序的方法,但是这些方法 或者是完全手工编写或者依赖于诸如Java SDK、 Eclipse、 Visual Studio 之类的软件开发环境。所以,这些方法不允许根据其规范自动构建可执 行的应用程序。
发明内容
本发明的目的是克服上面提到的缺陷,更确切地是允许根据类的高 级表示(每个类存储数据和/或实施至少一个公开函数和/或能够激活至 少 一个其它类的至少 一个所选择公开函数)所表达的规范来构建可执行 的应用程序。
出于该目的,本发明提供了一种用于根据类构建可编译且可执行的 应用程序的方法,其包括以下步骤—-表达规范,该规范描述了要按照以高级符号语言所编写的类的 形式化表示而构建的应用程序,该类的形式化表示包括类声明、数据声 明、函数声明和从四种基本类型中所选择的指令类型的受限组,该四种
基本类型分别包括用于访问(A)所选择类的所选择存储数据的指令,
用于根据所选"^算子以及可能的一些(一个或多个)给定输入参数计算
(C)所选择数据的指令,用于测试(T)所选择类数据是否满足所选择 条件的指令,以及用于生成(G)可能具有至少一个所选择数据参数的 任意类的所选择公开函数的激励的指令,接着
-根据规范类的这些高级形式化表示以所选择的编程语言产生 "新,,类表示,以及
-对这些新类表示进行组合以构建对应于该规范的可编译且可执 行的应用程序。
地二 .
-类的每个公开函数可以通过至少一个指令的序列来描述,该指 令具有从四种基本指令类型A、 C、 T和G的受限组中所选择的类型;
-指令类型的受限组可包含四种基本指令类型A、 C、 T和G;
-在一种变化形式中,指令类型的受限组中包含的类型可少于四 种基本指令类型A、 C、 T和G;
-某人每次接收到描述所要构建的应用程序的规范时,可对该规 范执行自动分析以确定表达它的类,接着可自动确定所确定的这些规范 类的形式化表示;
-某人可存储至少一些从其产生新类的表示的类的形式化表示, 并且可访问所存储的这些类的形式化表示来确定表达所接收规范的类 的形式化表示。
本发明还提供了 一种用于根据类的高级表示构建可编译且可执行 的应用程序并且包括生成装置的设备,该生成装置被配置以用于
-根据表达描述所要构建的应用程序的规范的规范类的形式化表 示以所选择的编程语言产生"新,,类的表示,以高级符号语言所编写的每个类的形式化表示包括类声明、数据声明、函数声明和从四种基本类型
中所选择的指令类型的受限组,该四种基本类型分别包括用于访问(A)
所选择类的所选择存储数据的指令,用于根据所选择算子以及可能的一
些(一个或多个)给定输入参数计算(C)所选择数据的指令,用于测 试(T)所选择类数据是否满足所选择条件的指令,以及用于生成(G) 可能具有至少 一 个所选择数据参数的任意类的所选择公开函数的激励 的指令,并且
-用于对这些新类的表示进行组合以构建对应于该规范的可编译 且可执行的应用程序。
根据本发明的设备可包括可单独或合并考虑的其它特征,并且特别
地
-类的每个公开函数可以通过至少一个指令的序列来描述,该指 令具有从四种基本指令类型A、 C、 T和G的受限组中所选择的类型;
-其可包括分析装置,该分析装置被配置成在每次接收到描述所 要构建的应用程序的规范时,对该规范进行分析以确定表达它的类;
-其可包括存储装置,该存储装置用于存储至少一些从其产生新 类的表示的类的形式化表示;
> 该分析装置可被配置以用于访问该存储装置以便提取所存储的 表达所接收规范的类的形式化表示。
通过研究随后的详细描述以及附图,本发明的其它特征和优势将变 得显而易见,其中唯一的附图示意性地图示了根据本发明的设备实施例 的示例。
具体实施例方式
所述附图不仅可被用来使得本发明完整,而且如果需要还可用于解
释本发明的定义。
本发明旨在提供一种用于根据类所表达的可执行应用程序的规范
7的文本来构建可执行应用程序的设备以及相关联的方法。
本发明针对根据类的形式化表示、以文本编写的、表达应用程序的
要求的规范所描述的任意类型的应用程序。
我们记得,术语"类"在这里意味着由以下所定义(或表达)的表达
形式 一个类名以及至少一个所存储数据的定义(或表示)和/或由至少 一个指令的序列所描述的至少一个公开函数。
如所述唯一附图所示意性图示的,根据本发明的设备D包括至少一 个生成模块(或代码生成器)GM。
该生成模块(或代码生成器)GM在每次必须要根据规范AS构建 可执行的应用程序AP时进行千预。
我们记得,表达形式"应用程序规范"在这里意味着定义所需应用程 序所应当满足的至少一个要求的至少一个句子。更确切地,该应用程序 要求描述了所述应用程序AP将要做什么,并且描述了其功能性和非功 能性特征是什么。优选地,这些要求以自然语言来表达,但是它们可以 在任何形式化或非形式化的文本表示形式下进行表达。
根据本发明,每个应用程序规范AS根据以高级符号语言编写的包 括所选择的称述类型的类Ci的形式化表示进行表达。
这些所选择的称述类型包括三种声明类型以及指令类型的受限组。
所述三种声明类型为类声明、数据声明和函数声明。
每个受限组的指令类型在四种基本类型中进行选择,所述四种基本 类型分别包括
-用于访问所选择类的所选择存储数据的指令。该类型可被称作A (用于"访问(Access)"),因为其包括存在于访问函数中的指令,
-用于根据所选择的选择算子以及可能的一些(一个或多个)给 定输入参数计算所选择数据的指令。该类型可被称作C (用于"计算 (Calculate或Compute )"),因为其包括存在于计算函数中的指令,
-用于测试所选择的类数据是否满足所选择条件的指令。该类型 可被称作T (用于"测试(Test)"),因为其包括存在于测试函数中的指 令,以及-用于生成可能具有至少一个所选择数据参数的任意类的所选择 公开函数(或方法)的激活(或者换句话说,用于对任意类生成事件)
的指令。该类型可被称作G (用于"生成(Generate)"),因为其包括存 在于事件生成中的指令,该事件在面向对象领域内被转换为带有参数的 函数调用。
例如,如果类Ci由其名称("class_name")所指定,并且类数据由 其名称("data—name")所指定,则
- 访问函l史可4皮写为A(class—name, data—name), 或者如果4吏用点 符号,可写为A(class一name. data一name)。
- 计算函数可被写为C(result, operandi, operator, operand2), 其 中operandi和operand2是函数调用的类数据或结果,
— 烦'H式函凄史可3皮写为T(condition, action—if—true, action—if—false), 其中"action—if—true"指示如果相关联的条件为真(或被满足)的情况下 所要执行的动作,"action—if—false"指示如果相关联的条件为假(或未满 足)的情况下所要执行的动作,且"condition,,表达了关于函数调用的类 数据或结果的逻辑条件,并且
— 生成函凄t可^皮写为G(class—name, function—name, parameter), 或 者3口果4吏用点l寻号,可写为G(class一name. function—name (parameter)), 其中"function—name,,指示类"class—name,,的公开函数(或方法)。
类Ci可属于至少三种不同的类别。第 一种类别包括存储至少 一个数 据的类。第二种类别包括由至少一个特定指令的序列所定义的类。第三 种类别包括存储至少一个数据并且由至少一个特定指令的序列所定义 的类。
根据本发明,"特定指令"是表达为谓词(predicate)的指令并具有 上述四种基本指令类型(A、 C、 T、 G)之一。
表达(或组成)应用程序规范AS的类Ci可由设备用户根据该应用 程序规范的文本进行确定。在这种情况下,用户根据上述三种声明类型 (类、数据、函数)构建每个所确定的类Ci的形式化表示,并且通过使 用属于从上述四种基本指令类型所选择的指令类型的受限组的指令描绘每个类的每个函数。例如,设备D可建议用户从四种基本指令类型(A、
C、 T、 G)中选择至少一种指令类型。
在一种变化形式中,设备D可以包括存储装置SM,该存储装置SM 旨在存储一组类Ci (i=l至N)的的形式化表示。在这种情况下,用户 可根据自己来确定(或选择)用在存储装置SM中的组成(或表达)应 用程序规范AS的类Ci的形式化表示。
可使用能够存储类Ci的形式化表示且为本领域技术人员已知的任 意类型的存储装置SM,并且特别为数据库、闪存、CD、 USB钥匙、ROM 或RAM、平面文件系统和任意其它类型的存储库。
在另一种变化形式中,设备D可包括分析模块AM,该分析模块 AM旨在当每次接收到应用程序规范AS时对该应用程序规范AS的文本 进行分析以便确定组成(或表达)它的类Ci。 一旦分析模块AM已经确 定了组成应用程序规范AS的类Ci,用户根据上述三种声明类型(类、 数据、函数)构建每个所确定类Ci的形式化表示,并且通过使用属于从 上述四种基本指令类型所选择的指令类型的受限组的指令描绘每个类 的每个函数。例如,设备D可建议用户从四种基本指令类型(A、 C、 T、 G)中选择至少一种指令类型。
在又一种变化形式中,设备D可包括上述存储装置SM和分析模块 AM,所述分析模块AM不仅旨在对接收的应用程序规范AS的文本进 行分析以便确定组成它的类Ci,而且用于访问所述存储装置SM以便提 取所确定的这些类Ci的形式化表示。在该变化形式中,分析模块AM可 被划分为两个子模块,第一子模块用于执行文本分析,而第二子冲莫块用 于从存储装置SM种提取所述第一子模块在规范文本中所确定的(一个 或多个)类的(一个或多个)形式化表示。此外,在该变化形式中,分 析模块AM可耦合到(一个或多个)外部实体(ontology)或者( 一个 或多个)外部普通词典或类属词典,以便更容易地利用语义分析提取类。
一旦组成应用程序规范AS的类Ci的形式化表示已经由用户定义或 者由分析模块AM从存储装置SM提取,则生成模块GM就被配置以用 于根据这些形式化表示以所选择的编程语言产生"新"类的表示,即源代码中的类,并接着用于将这些源代码类进行组合以便构建与所接收的应
用程序规范AS相对应的所需的可编译且可执行的应用程序AP。例如,所选4奪的编禾呈语言可以为Java、 C+十或C弁。才艮据本发明的编程过程可被称作"精简指令集编程"(RISP)并且可以与生物蛋白的概念相比较。我们记得,蛋白由共同定义为多肽的选定数目的给定缩氨酸构成,每个缩氨酸由选定顺序的四个氨基酸(腺噪呤(A)、鸟。票呤(G)、胞核嘧啶(C)和胸腺嘧啶(T))的序列构成。例如,多肽(或蛋白)可部分地由以下序列所定义(ACTG-AACG-ACCG- ACTG-...)所定义。此外,蛋白通过分子或离子交换在其间进行通信。因此,与蛋白领域类似,根据本发明的类Ci对应于缩氨酸,类数据对应于分子,且所生成的事件对应于分子交换(当利用参数进行函数调用时)或者离子交换(当不使用参数而进行参数调用时)。因此,(生成模块GM所产生的)可执行应用程序AP是一种X特定指令的群组的有序序列,所述X特定指令的类型被选择到M种基本指令类型的选定受限组中。M是至少等于1的整数。例如,M二4(如同生物缩氨酸的情形)。因此,应用程序是由生成模块(或代码生成器GM)用作输入来构建完整且可编译的应用程序AP的一組指令。
现在将描述一个简单的、部分的且非限定的示例来说明由根据本发明的设备D所执行的编程过程。
该非限定示例与自动柜员机(或ATM)的使用相关。我们记得,自动拒员机(ATM)能够被定义为在公共场所无需人工职员或银行拒员的情况下为金融机构(例如银行)的用户提供对金融交易的访问的计算机化通信设备。在大多数现代的ATM上,通过插入具有磁条的塑料卡或具有芯片的塑料智能卡来识别用户,所述卡包含唯一^^号和一些安全信息,诸如过期日期。安全性的提供通过用户输入私人验证号码(PIN)来实现。当使用ATM时,用户能够访问其银行帐户以便提取现金(或信用卡预付现金)并检查其帐户余额。
下文中,假设应用程序规范AS意在允许用户进行取现。例如,这-用户在ATM中插入他的卡,
-ATM要求用户输入其密码(PIN码),
-用户输入其密码,
- ATM (读卡器)验证密码
-如果密码错误,则在三次尝试之后,将卡退还用户,-如果密码正确,则ATM要求用户输入其取现的数量,-用户输入其所需数量,-ATM检查卡上是否批准所述取现数量,
-如果银行余额允许取现,则ATM通过银行接口对用户的帐户进行请求,
-如果以上条件为OK,则可通过出钞口给出钞票。对该简单规范文本的分析允许确定以下类Ci:卡、读卡器、银行接口、 ATM、出钞口。这些类Ci之间的事件交换允许实施应用程序AP。所确定的类Ci按"ACTG符号,,的形式化表示的示例可以如下
card {data:
secret—code= 1234;
card—reader {data:
code—input;
functions:
introduce—card() {
G(dialogue, "Your card is being read");G(card—reader, check—code))
check一code() {
G(dialogue, "Please enter your PIN code");C(code一input, i叩ut());
T(code」nput=A(card, secret—code), G(ATM, ask—amount), code—KO);
code—KO() {
G(dialogue, "Bad code"))G(card—reader, check—code);
return—card() {
G(dialogue, "Please take your card to get'your money");G(slot, distribute, A(ATM, withdrawal—amount));slot {dat3:
nb—of一ban k:n otes;
functions:
distribute(parameter) ■{C(nb一of—banknotes=parameter/A(banknote, value));
G(dialogue,,,Here is your money (nb of*banknotes = "+nb—of—banknotes+"),,);
根据ACTG符号,代码生成器GM能够自动为类"读卡器,,产生以下Java形式的新类
class card—reader {〃data:
int code—input;
〃 instances (generated)dialogue thedialogue;card thecard;ATM theATM;slot theslot;
〃constructor (generated)public card一reader() (
thedialogue= new dialogue();thecard = new card();theATM =隨ATM();theslot = new slot();
"methods:
public void introduce—card() {
thedialogue,display("Your card is being read");this.check—code();
public void check—code() {
thediaogue.display("Please enter your PIN code");code—input = i叩ut();
if(code_mput=thecard,secret—code) theATM,ask一amount();else this.code_KO();
}
public void code一KO() {
thedialogue.display("Bad code");this.check—code();
public void return—card() {
thedialogue.display("Please take your card to get your money");theslotdistribute(theATM. withdrawal—amount);
实际上,代码生成器GM对表达规范AS的所有类Ci自动产生新的Java类(这里,这些类为卡、读卡器、银行接口、 ATM、出钞口 )。
设备D,更确切地是其生成模块GM以及可能其存储装置SM和/或分析模块AM优选地是软件模块。但是它们也可能分别由(一个或多个)电路或硬件模块或者硬件和软件模块的组合构成。
本发明还可以关于用于根据组成规范AS的类Ci来构建可执行应用程序AP的方法来考虑。
这样的方法可以利用诸如以上参考唯一附图所描述的设备D来实施。因此,此后将仅提及其主要特征。
根据本发明的方法包括
-表达规范AS,该规范AS描述了要按照以高级符号语言所编写的类Ci的形式化表示而构建的应用程序AP,该类的形式化表示包括三种声明类型类声明、数据声明、函数声明,以及从四种基本类型中所选^^的指令类型的受限组,该四种基本类型分别包括用于访问(A)所选择类的所选择存储数据的指令,用于根据所选择算子以及可能的一些(一个或多个)给定输入参数计算(C)所选择数据的指令,用于测试(T)所选择类数据是否满足所选择条件的指令,以及用于生成(G)可能具有至少 一 个所选择数据参数的任意类的所选择公开函数的激励的指令,接着
-根据规范类Ci的这些形式化表示以所选择的编程语言产生"新"类的表示,以及
-对这些新类的表示进行组合以构建对应于该规范AS的可编译且可执行的应用程序AP。
当(由分析模块AM)自动执行对规范AS的文本分析时,以及当(由分析模块AM)自动从存储装置SM提取规范类的形式化表示时,本发明可被看成是用于根据其规范AS的文本直接产生可编译且可执行的应用程序AP的手段。
14本发明提供了 一种与本领域已知的诸如遗传算法、神经网络和蚁群编程之类的生物方法明显不同的新方法。
记得遗传算法(或进化算法)属于启发式算法的范畴,其目标在于当已知没有在合理时间内解决问题的精确方法时,以可接受的时间得到优化问题的近似结论。通过使用基因和变异的概念,遗传算法使用达尔文在19世纪研究的自然选择和进化的概念,并且将这些概念应用于给
定问题的潜在结论的种群。因此,可通过连续"跳跃(jump)"进一步接近可接受的结论。
本发明没有使用基因的概念,也没有使用变异、自然选择或进化的概念,并且其目标并不在于优化而在于在面向对象编程的范畴内方〗更地产生可执行的应用程序。
人工神经网络是一种其设计在原理上受到真实神经元(人或其它)极大启发的计算模型。神经网络通常通过统计类型的学习方法进行优化,从而它们首先属于统计应用的范畴,它们在其中以一组允许生成宽函数空间的范例集得以丰富,灵活且部分结构化,并且其次属于人工智能方法的范畴,它们在其中通过允许采用与正常逻辑推导相比更多地在感知上进行学习的决策而得以丰富。
本发明不使用神经元或统计的概念,不是一种人工智能的方法,并且其目标不在于引发决策而在于在面向对象编程的范畴内方便地产生
可执行的应用程序。
蚁群编程是受到蚂蚁搬运食物行为的启发的 一种用于组合优化问题的启发式方法。其允许以较深的视角观察在用于组合优化问题的多阶
解的迭代蒙特卡洛方法的使用之下的一般原则。这样的视角旨在为设计者提供具有新类别、表达术语和用于利用手头问题的特性进行有效处理的工具的算法。其搜索原始组合问题经缩减得到的多阶决策问题的优化策略。
本发明不使用蚂蚁的概念,也不使用克隆或其它优化的概念,并且内方^i也产生可^l行的应用程序。本发明并不局限于上述仅作为示例的方法和设备的实施例,相反其 包含了本领域技术人员在随后的权利要求范围内所能够想到的所有可
选实施例。
权利要求
1. 一种用于根据类(Ci)的高级表示构建可编译且可执行的应用程序(AP)的方法,每个类存储数据和/或实施至少一个公开函数和/或能够激活至少一个其它类的至少一个所选择公开函数,其特征在于所述方法包括i)表达规范(AS),所述规范(AS)描述了要按照以高级符号语言所编写的类(Ci)的形式化表示而构建的应用程序(AP),所述类(Ci)的形式化表示包括类声明、数据声明、函数声明和从四种基本类型中所选择的指令类型的受限组,所述四种基本类型分别包括用于访问所选择类的所选择存储数据的指令,用于根据所选择算子以及可能的某个或某些给定输入参数计算所选择数据的指令,用于测试所选择类数据是否满足所选择条件的指令,以及用于生成可能具有至少一个所选择数据参数的任意类的所选择公开函数的激励的指令,接着ii)根据规范类(Ci)的所述形式化表示以所选择的编程语言产生“新”类的表示,以及iii)对所述新类的表示进行组合以构建对应于所述规范(AS)的可编译且可执行的应用程序(AP)。
2. 如权利要求1所述的方法,其特征在于类的每个公开函数通过至少一个指令的序列来描述,所述指令具有从四种基本指令类型的所述受限组中所选择的类型。
3. 如权利要求1和2之一所述的方法,其特征在于所述指令类型的受限组包含所述四种基本指令类型。
4. 如权利要求1和2之一所述的方法,其特征在于所述指令类型的受限组包含的基本指令类型少于所述四种基本指令类型。
5. 如权利要求1至4之一所述的方法,其特征在于某人每次接收到描述所要构建的应用程序(AP)的规范(AS)时,i)其对所述M^范(AS)执行自动分析以确定表达它的所述类,接着ii)自动确定所确定的这些规范类(Ci)的所述形式化表示。
6. 如权利要求1至5之一所述的方法,其特征在于某人存储所述类的形式化表示中的至少 一些从其产生所述新类的表示的类的形式化表示,并且访问所存储的这些类的形式化表示来确定表达所述所接收规范(AS)的类(Ci)的形式化表示。
7. —种用于根据类(Ci)的高级表示构建可编译且可执行的应用程序(AP)的设备(D),每个类存储数据和/或实施至少一个公开函数和/或能够激活至少一个其它类的至少一个所选择公开函数,其特征在于所述设备包括生成装置(GM),所述生成装置(GM)被配置以用于i)根据表达描述所要构建的应用程序(AP)的规范(AS)的规范类(Ci)的形式化表示以所选择的编程语言产生"新,,类的表示,以高级符号语言所编写的每个类的形式化表示包括类声明、数据声明、函数声明和从四种基本类型中所选择的指令类型的受限组,所述四种基本类型分别包括用于访问所选择类的所选择存储数据的指令,用于根据所选择算子以及可能的某个或某些给定输入参数计算所选择数据的指令,用于测试所选择类数据是否满足所选择条件的指令,以及用于生成可能具有至少一个所选择数据参数的任意类的所选择公开函数的激励的指令,并且ii)用于对所述新类的表示进行组合以构建对应于所述规范(AS )的可编译且可执行的应用程序(AP)。
8. 如权利要求7所述的设备,其特征在于类的每个公开函数通过至少一个指令的序列来描述,所述指令具有从四种基本指令类型的所述受限组中所选择的类型。
9. 如权利要求7和8之一所述的设备,其特征在于所述指令类型的受限组包含所述四种基本指令类型。
10. 如权利要求7和8之一所述的设备,其特征在于所述指令类型的受限组包含的基本指令类型少于所述四个基本指令类型。
11. 如权利要求7至IO之一所述的设备,其特征在于其包括分析装置(AM),所述分析装置(AM)被配置成在每次接收到描述所要构建的应用程序(AP)的规范(AS)时,对该规范(AS)进行分析以确定表达它的类。
12. 如权利要求7至11之一所述的设备,其特征在于其包括存储装置(SM),所述存储装置(SM)用于存储所述类的形式化表示中的至少 一些从其产生所述新类的表示的类的形式化表示。
13.如权利要求11和12的组合所述的设备,其特征在于所述分析装置(AM)被配置成用于访问所述存储装置(SM)以便提取所存储的表达所述所接收规范(AS)的类的形式化表示。
全文摘要
本发明提供了根据类的规范构建可编译且可执行应用程序的设备和方法。该设备旨在根据类的高级表示构建可执行的应用程序,每个类存储数据和/或实施至少一个公开函数和/或能够激活至少一个其它类的至少一个所选择公开函数。该设备包括生成装置,其被配置用于i)根据规范类的形式化表示产生“新”类的表示,每个类的形式化表示包括类声明、数据声明、函数声明和从四种基本类型中所选择的指令类型的受限组,以及ii)用于对所述新类的表示进行组合以构建对应于所述规范的可执行的应用程序。
文档编号G06F9/44GK101482818SQ20081018959
公开日2009年7月15日 申请日期2008年12月8日 优先权日2007年12月7日
发明者P·拉尔韦 申请人:阿尔卡特朗讯