基于对象

2024-07-15

基于对象(精选十篇)

基于对象 篇1

法庭对一般刑事案件的审理要求对犯罪事实进行还原, 只有这样才能证明犯罪事实的真实存在, 同样, 对计算机相关案件的审理也需要对数字事件进行还原。由于这类案件不同于一般的刑事案件, 在对事件进行还原时不能仅参照一般案件的还原方法, 应根据数字事件的特点构建出符合其本身的还原方法。国内外多数数字取证模型注重取证过程, 对数字事件重构涉及较少。为了解决上述问题, 本文提出了基于对象的数字事件重构方法, 以事件中的对象为研究出发点, 详细阐述了数字事件的重构过程。基于对象的数字事件重构方法, 不但可以重构犯罪经过, 证明犯罪事实的存在, 还可以发现易被忽略的对象, 揭示出未被直接察觉到的其他事件, 这对计算机犯罪案件的重构还原工作具有一定的理论指导作用。

1 基于对象的数字事件重构方法

数字对象是指数字数据的离散集合, 如存储有数字数据的文件、日志、数据包、进程等, 数字对象根据其功能、特性等因素的不同, 有着各自特有的属性。基于对象的数字事件重构是在所需证据已被收集, 且对这些证据分析完毕的基础上进行的, 利用掌握的证据, 对数字事件进行重构还原, 以证明数字事件的真实存在, 并发现隐藏的对象, 揭示未被直接察觉到的事件的存在。数字事件重构方法由证据检查、事件预处理、子事件重构、子事件排序、以及结论生成五部分组成, 如图1所示。

1.1 证据检查

数字事件重构首先要对在犯罪现场发现的所有证据全面检查, 确定证据的属性, 判断哪些可以作为事件重构中的证据, 哪些不在事件重构证据之列。在这一阶段, 为了掌握事件中对象的相关信息, 我们需要检查对象的类属性及特有属性。类属性是指可与一组事物相关联所具备的属性, 特有属性是指区别于其他事物而惟一确定该事物的属性。由于数字证据承载于物理介质中, 对于数字证据的检查, 首先要判断哪些物理证据可能包含数字证据, 因此该阶段即包括物理证据检查, 也包括数字证据检查。

1.2 事件预处理

事件预处理包括对原因对象、结果对象角色的定义, 将完整连续的事件分解成若干子事件, 以及子事件中对象角色的判断。

1.3 子事件重构

将完整事件分割成若干子事件后, 我们以各子事件中的结果对象为出发点, 对子事件进行事件重构, 最终构造出可信的子事件集。

1.3.1 子事件重构目的

某一完整事件经分解后, 所包含的子事件应包括以下几种情况: (1) 原因对象、结果对象都存在, 且已明确显现的子事件。对于这种子事件的重构是为了说明事件发生的过程, 以证明事件的可靠性。 (2) 能够找到明确发生的子事件, 但原因对象无法明确。对于这种子事件重构的目的是为了找到与结果对象相对应的原因对象, 以保证事件发生的完整性。 (3) 仅存在部分原因对象, 或部分结果对象, 理应存在某一事件, 但该事件尚未明确地显示出来的情况, 调查人员可根据已有的部分对象, 假设这样的事件存在, 通过子事件重构判断这些事件是否可能发生, 以及寻找事件可能发生相对应的其他对象。

在重构的过程中, 我们以每个子事件中的结果对象为出发点, 试图寻找原因对象与结果对象相匹配的原因结果对。结果对象属性的改变与原因对象属性有着密切的关系, 因此, 若知道在事件中哪些结果对象的属性发生了改变, 则可向前回溯, 寻找原因对象。同理, 也可利用原因对象属性的变化, 向后推理、寻找结果对象, 查找出被调查事件发生所必须的原因结果对象, 从而证明事件的存在。

为了事件重构的需要, 我们将子事件集E中的事件分为两类, 一类为事件明确发生, 无论其原因结果对象是否完整, 此类事件由上述分类中 (1) 、 (2) 情况下的事件组成, 将这样的事件放入分析事件集Ea中。另一类是由理应存在, 但未被发现的事件组成, 即由上述分类中情况 (3) 的事件组成, 我们将这样的事件归入待证事件集Eu中。重构分析应从明确的、已发生的事件入手, 因此, 我们从分析事件集Ea中选择子事件进行分析, 一方面可以验证分析事件集中子事件的可靠性、寻找补充事件所缺少的原因对象, 另一方面, 对已有事件的分析可以扩展寻找、发现、证实待证事件集Eu中的事件。

1.3.2 子事件重构过程

子事件重构过程的基本流程, 子事件重构的基本策略如下:

(1) 在分析事件集Ea中, 按照某种规则选择一子事件作为被调查事件, 事件选择的规则由调查人员根据实际情况而定。

(2) 选取对于当前被调查子事件影响大, 属性变化明显, 且未被分析的结果对象, 若结果对象集中不存在该对象, 则将其放入结果对象集Or中, 否则直接进入步骤 (3) 。

(3) 向前回溯寻找导致结果对象产生的原因对象。并将找到的明确出现的原因对象归入到原因对象集中OC。

(4) 判断对于被调查事件的发生, 是否还缺少其他原因对象, 若缺少原因对象, 可回到证据检查阶段对证据重新检查。判断所需的原因对象是否存在, 若存在, 则将找到的原因对象归入此事件对应得原因对象集合OC当中。对于被调查事件确实需要, 但经过检查仍无法找到的原因对象, 我们可假设此原因对象的存在, 说明此对象没有出现的原因, 并将其暂时归入假设原因对象集OCS, 待经过后续分析后, 若证明此对象的存在, 再将此对象归入原因对象集中。若不缺少其他原因对象, 则直接进入步骤 (5) 。

(5) 推寻分析与原因对象相对应的除被调查结果对象外的其他结果对象。原因对象由两部分组成, 一部分为原因对象确实存在的原因对象集OC, 另一部分由假设原因对象集OCS组成, 为了分析全面, 这两部分都要进行结果对象的推寻分析, 以找到更多没有明显出现的结果对象。对OC中原因对象的推寻, 可得到两种结果对象, 一种是确实存在也能找到的结果对象, 这种对象可能在初始结果集中存在, 也可能没有。注意, 初始结果对象集不同于结果对象集, 初始结果对象集存放的是经初步检查得到的显而易见的结果对象, 而并非经分析后发现的结果对象。结果对象集由初始结果集中的对象, 以及推寻分析后发现的结果对象组成, 分析得出的结果对象比较全面。另一种结果对象为理应存在的, 但却没有找到的结果对象, 我们称之为假设结果对象。通常情况下, 若有事件的发生, 则应有相应的结果产生, 若没有结果产生, 我们则认为该事件没有发生。因此, 我们将这种情况下的假设结果对象舍弃。同理, 对于OCS中原因对象的推寻也可以产生以上两种情形, 我们也只考虑第一种情况下推寻分析出的结果对象。

判断推寻分析出的结果对象是否在初始对象集中存在, 若存在, 则将结果对象放入结果对象集Or中, 若未在初始结果对象集中存在, 判断与这些对象对应的子事件是否属于待证事件集Eu, 若属于Eu, 则证实了Eu中事件的存在。若不属于Eu, 则说明该事件为新发现的事件, 将新子事件及已证实的事件填入到分析事件集Ea中。将新子事件及被证实子事件对应的结果对象放入结果对象集中。

(6) 判断该子事件中所有的结果对象是否都已分析完毕, 若都已分析完毕则转入步骤 (7) , 否则转入步骤 (2) 选择其他结果进行分析。在对其他结果对象分析的过程中, 如能回溯出OCS中的原因对象, 则说明该原因存在, 假设成立, 将该对象转入到原因对象集OC中。

(7) 对子事件进行事件检验。被检验子事件的信任度与支持该事件成立的对象的数量, 即|OC|、|Or|成正比, 与假设成立的对象的数量, 即|OCs|成反比。为了与其他子事件的信任度进行比较, 我们采用相对信任度作为事件检验的标准。相对信任度, S为被调查子事件中对象的总量, K为调节系数, 由调查人员根据对象的重要程度、具体的案情、调查环境等因素衡量K的取值。若信任度V≥P, 则事件检验通过, 否则事件检验失败。P为经验值, 由调查人员或专家根据经验及其他因素选取。如果事件检验通过, 则认为该子事件确实成立, 并填加到可信子事件集中。若事件检验失败, 丢弃该事件。

(8) 判断对于分析事件集Ea中的子事件是否全部分析完毕, 若已分析完毕则对分析的所有事件进行整理、归档, 否则, 转入步骤 (1) 选择下一事件继续分析。

(9) 对分析完毕后的事件整理、归档。记录下每个子事件中的原因对象集、假设原因对象集与结果对象集, 并给出原因对象与结果对象之间的对应关系。对于在分析过程中发现的子事件, 要给出详细的说明。

当所有子事件分析完毕后, 最终得到一个可信子事件集, 为了形象地说明各子事件中的原因结果对象与事件的关系以及各子事件之间的关系, 我们为可信子事件集中的所有子事件构造对象事件关系图。若其中某一子事件中的结果对象是另一子事件的原因对象, 则将二图合并, 若全部子事件分析完毕后OCS中仍有假设的原因对象, 在图示中, 可用虚线圈代表假设的原因对象, 重组合并后的对象事件关系如图2所示。

1.4 子事件排序

子事件排序是指将重构后的子事件按照某种顺序组合在一起, 形成一个完整或部分完整的事件链。通常情况下, 很难利用所有的子事件构造出一个完整的事件链, 但可以根据各子事件之间的关系构造出多个子事件链, 多个子事件链联系在一起可以揭示出有关完整事件的信息。

1.5 结论生成

为了对事件重构有一完备的描述, 以便日后工作参考借鉴, 最后还要对重构过程记录归档, 详细记录从证据检查到事件排序每一个过程的具体细节。此外, 还应详细记录重构过程中出现的各种问题, 解决方法, 最终的结果等内容, 最后形成《××数字事件重构报告》。

2 可行性分析

2.1 理论可行性

调查取证的最终目的是利用所掌握的证据对犯罪事实进行还原。向法庭呈堂某一案件时, 不仅要提交相应的证据, 还要阐述案件的发生经过, 重构还原犯罪事实。本文借鉴其他学者对物理事件的重构, 以及利用相关信息对数字事件的分析, 在此基础上提出了基于对象的数字事件重构方法, 方法既具有一般事件重构的思想, 又符合数字事件重构的基本理念, 因此, 该方法的提出具有合理的理论可行性。

2.2 实践可行性

为了验证基于对象的数字事件重构方法在实践工作中的可行性, 我们将该方法运用在一起网站被攻击的案件调查当中。首先, 对案件现场进行调查, 寻找案件相关的电子证据, 并对电子证据进行分析, 得出分析结果。在前期工作完成后, 为了将传统办案思想的重构方法与基于对象的数字事件的重构方法进行比较, 我们将调查人员平均分为两组, 配有同样的调查设备, 且调查环境基本相同, 这里我们不考虑调查人员能力的高低, 让两组调查员同时展开工作, 一组利用传统办案思想进行事件重构, 另一组应用基于对象的数字事件重构方法进行重构。利用两种方法对攻击事实重构的情况如表1所示, 这里我们选取了对于案件调查较重要的几个参数进行说明, 用两种方法都能重构出攻击发起时间、持续时间、流量大小、发起攻击的IP地址以及通话记录, 但由于基于对象的数字事件重构方法反复地推寻攻击结果与原因, 因此, 较传统的调查思想可发现更多的其他被攻击网站的信息, 以及其他相关参与人员。案件调查完毕我们得出表2的结论。

调查技术指标对比表中的结果我们可以看出, 数字事件重构方法在实际的办案过程中较传统思想的办案可以使调查人员办案思路清晰明确、节省调查时间, 提高事件的发现率, 进而案件调查的准确度也随之上升。因此, 基于对象的数字事件重构方法对于实际的案件调查具有一定的实践可行性。

3 结论

本文针对计算机相关案件审理工作中, 需对数字事件重构还原的要求, 以数字事件中的对象为研究切入点, 提出了基于对象的数字事件重构方法, 该方法侧重于数字事件重构的过程, 帮助调查人员理清了数字事件重构的工作思路, 提高了数字事件重构还原的各种技术指标。此方法目前应用于人工数字事件重构还原当中, 随着研究的进一步深入, 我们会将该方法的思想融入到数字事件重构产品的设计中, 实现数字事件重构在只有少量人工干预下的半自动化。

参考文献

[1]james S, Nordby J, editors.Forensic science:a ni ntroduction tos cientific and investigative techniques.Boca Raton.FL:CRC Press.2003.

[2]Lee H, Palmbach T.Miller M.Henry Lee抯crime scene handbook.London.UK:Academic Press.2001.

[3]Rynearson J.Evidence and crime scene Reconstruction.6th ed.Redding, CA:National Crime Investigation and Training.2002.

基于面向对象的卫星模拟器设计方法 篇2

卫星系统的复杂性是卫星模拟器研制的难点.针对面向功能方法的.不足,提出了面向时象的卫星模拟器设计方法,并使用OMT技术进行了卫星模拟器建模示例.

作 者:吴振宇 熊晓将 宋秋静 WU Zhen-yu XIONG Xiao-jiang SONG Qiu-jing  作者单位:中国空间技术研究院・北京・100094 刊 名:飞行器测控学报  ISTIC英文刊名:JOURNAL OF SPACECRAFT TT & C TECHNOLOGY 年,卷(期):2008 27(2) 分类号:V411.8 关键词:面向对象   卫星   模拟器  

基于对象管理的邮箱管理教学设计 篇3

从对象管理视角解读邮箱管理

对象管理的核心概念是对象、属性、关系、结构。属性指向单个对象,对象具有不同的属性,多个对象根据属性可以形成关系。对象间的各种强弱关系,进而构成了一定的结构。信息技术中的对象与管理不同于日常生活中对具体可见物的管理,它侧重的是对数字化对象的管理,如数字化设备、计算机中的文件、文件中的元素等。

邮箱管理中,通讯录管理的对象外显的是联系人,实际上管理的是邮箱地址;邮件管理的对象是邮件,如邮件的分组、搜索、排序、删除等,都是对邮件的管理操作。因此,联系人与邮件都如同计算机中的文件,是数字化对象。换言之,对象被管理的依据是其属性,而属性又是以数字化方式表示的。

对象属性无处不在,只要对象存在,其自身就携带着相应的属性,如文件具有“大小”“文件类型”等属性。邮件与文件类似,具有“邮件主题”“收件人”“发件人”“发送时间”等属性。

关系是由对象之间的属性形成的。邮件与周围邮件的关系就是建立在属性基础之上。例如,邮件排序,可以根据邮件主题进行升序或降序排序,也可以依据发件人(收件箱页面)或收件人(发件箱页面)排序,还可以根据时间先后顺序进行排序,不同的排序方式中,邮件与周围邮件的关系发生了变化,即邮件之间形成了不同的关系,不同关系构筑成网状结构,但是邮件本身的属性并没有因为排序而发生变化。通讯录管理也类似,管理通讯录强调根据关系将联系人分组,同样的联系人可以根据不同的关系形成不同的分组,使得联系人处于关系圈之中,关系圈之间又形成了一种网状结构。

文件管理、数据管理、邮箱管理,所有的对象都有属性,由属性形成关系,由不同关系构筑结构,结构以交织的网状形式呈现,形成具有完整结构的信息技术管理方式。

就邮箱管理而言,教学目标侧重于学生能在已有的文件管理经验的基础上,进行知识的迁移,通过对邮件、联系人等数字化对象的操作形成管理体验,认识到可以从邮件对象的属性开始认识对象和把握对象,进而将此经验延伸到实际生活中,自觉地把握对象属性、梳理对象间关系并对对象实施有效的管理。

邮箱管理教学设计

在学习邮箱管理之前,学生已经掌握了申请免费电子邮箱的方法,能够熟练地收发电子邮件,包括带附件的电子邮件。邮箱管理在此基础上展开,学生在收发电子邮件的同时,还需要对自己的邮箱进行管理,掌握管理操作与方法,培养管理意识。

1.通讯录

(1)保存联系人信息

学生学会收发邮件之后,如果需要给全班同学发邮件只能依次输入邮件地址,此时会形成寻找更快速、更高效的方法的需求。这就需要学生能够建立通讯录,并利用通讯录快速给多人发送邮件。邮箱地址类似于电话号码,因此创设情境时,教师可以利用生活中学生比较熟悉的电话通讯录来促成知识的迁移,从而认识到邮箱通讯录是邮箱中保存联系人的姓名、邮箱地址等信息的地方。

教学内容设计:说一说,父母在手机上是通过什么方式记录所有亲戚朋友的电话号码的呢?教师介绍两种保存联系人信息的方式:新建联系人与添加联系人。新建联系人:在通讯录页面,单击“新建联系人”按钮。添加联系人:在读信页面,利用“添加联系人”按钮将好友的邮箱地址添加到通讯录里。教师示范具体的操作方式,也可以安排学生自行探索,继而安排活动,使其选择合适的方式将周围同学的邮箱地址保存到通讯录中。

教学建议:在介绍两种保存方式的过程中,教师注意引导学生分析两种保存方式的区别。新建联系人适用的情形是,知道对方的邮箱地址,但与对方没有邮件往来。添加联系人适用的情形是,收到或发送邮件的联系人,但还没有保存对方的邮箱信息。在添加全班同学的邮箱地址时,教师需要提醒学生选择合适的方式。例如,学生可能与班上某些同学已经有邮件往来,这样最好选择添加联系人的方式;没有邮件往来的同学需要使用新建联系人的方式。除此之外,教师还需要为学生提供几个其他任课教师的邮箱地址,让他们保存在通讯录中,为通讯录管理做准备。

(2)通讯录管理

通讯录管理部分需要让学生明确,所管理的对象是联系人,可以根据不同的关系对联系人进行分组。

教学内容设计:通讯录中添加了较多的联系人之后,就像计算机中存放了很多文件一样,需要进行分类管理,才方便查找。计算机中的文件可以按照属性与非属性等方式分类。学生观察通讯录中的联系人,并思考分组方式。例如,根据与联系人的关系可以分为家人、同学、老师等。

具体操作上,通讯录管理与文件管理类似。面对杂乱无章的文件,需要先建立文件夹,再将文件分类移动到对应的文件夹中。面对通讯录中较多的联系人,也需要先建立组,再将联系人添加到各组中。

教学建议:教师可以让学生根据通讯录来思考如何对联系人分组。“组”的概念在信息技术课程中有着广泛的应用,如学生熟悉的QQ群组等。因此,教学过程中,教师可以引导学生将QQ分组的经验迁移至此。在组织学生管理邮箱通讯录中的联系人时,教师应鼓励学生按照某种属性进行个性化分组。

(3)利用通讯录发邮件

利用通讯录可以快速发邮件,让学生体会其中的效率思想,理解通讯录分组管理的目的。

教学内容设计:有了通讯录之后,写信时,收件人邮箱地址可以不用输入,直接在“通讯录”组中找到收件人,然后单击“联系人”,邮箱地址将自动出现在“收件人”地址框中。这样既可以节省输入时间,又可以避免输入错误。通讯录中联系人较多时,可以对联系人分组管理,以缩小查找范围,快速找到收件人。此外,通讯录中的联系人分组后,可以实现快速给某个组的成员群发邮件,实现一对多的高效交流。进入写信页面,鼠标指向通讯录中的某个组,单击“添加该组”,组内所有成员的邮箱地址都添加到“收件人”地址框中。

教学建议:教师可以利用组发邮件的方式,给全班同学发一封邮件,邮件内容可以是学生接下来需要完成的任务,如分享一张照片给全班同学,并对照片做简要介绍。

2.邮件管理

邮箱中的文件就像计算机中的文件一样,过多就会显得杂乱无章,需要对邮件进行移动、删除等操作管理,使邮箱更整洁。文件管理包括文件的分组、排序、搜索、删除等,邮件管理与之类似,也包括分组、排序、删除等。因此,邮件管理部分的教学需要教师引导学生将文件管理知识迁移至此,提高其对网络资源有效管理的能力。

(1)邮件分组

教学内容设计:邮箱中提供了邮件分组的功能,就像计算机系统中的库,自动将文件分为“视频”“图片”“文档”等类型。邮箱自动将邮件分别存放在“收件箱”“已发送”“草稿箱”等文件夹中。在自动分类的基础上,还可以根据需要对邮箱中的邮件进行手动分类,如将收件箱中的邮件移动到“草稿箱”或“垃圾邮件”。当然,还可以在邮箱中新建文件夹,实现个性化邮件分组管理的方式。例如,在网易的163邮箱中,可以利用页面左边的“+”按钮新建文件夹,建立个性化的邮件分类方式;然后选中邮件,再利用“移动到”按钮将邮件存放在某个文件夹中,将邮件进行分组存放。

教学建议:教学过程中,在邮箱中新建文件夹可以与学生整理文件时新建文件夹的经验结合,促成学生对所学知识进行迁移。

(2)邮件排序

教学内容设计:如果某个分组中邮件太多,很难快速找到需要的邮件,可以根据邮件的发件人、主题等属性进行排序,并根据排序结果查找。邮件的排序是根据邮件的某一属性进行排列。排序的具体操作是:在收件箱页面,单击“更多”,指向“排序”,在弹出的列表中选择一种合适的排序方式。例如,要找某个发件人的邮件,可以将邮件按照发件人进行升序或降序排列。

教学建议:邮件排序所管理的对象即邮件之间以不同的排序方式形成关系,不同的关系又形成结构关系。因此,教师教学时可以安排学生观察某一邮件按照不同的排序方式排序后的结果发生了变化,但邮件的发件人、时间等属性并没有因为排序而发生改变。

(3)邮件删除

邮件删除让学生认识到整理邮箱的重要性,让学习和生活更高效。

教学内容设计:日积月累,邮箱的邮件会越来越多,需要及时删除不需要的邮件,节省邮箱空间。邮件的删除操作与文件删除操作类似,都需要先选中再删除。学生可以整理、删除邮箱中的邮件。

教学建议:文件的删除是先选中再操作,邮箱也类似,所以操作上学生可以根据已有经验自行探索。如果学生邮箱中的邮件较少,教师可以在课前群发几封邮件给学生,以便他们删除时使用。

小结

从学科核心素养三层架构来看小学阶段的对象管理。“双基”层:学生需要了解不同的对象,以及对象之间的相互关系,知道对象的查找方法;“问题解决”层:能够从文件和数据的时空属性出发提取分类管理的线索,做好所使用的数字设备的信息管理;“学科思维”层:能够将信息社会中的现象置于对象、关系之中加以观察和管理。

基于汇编语言的面向对象编程 篇4

汇编语言编程的优点是速度快, 可以直接对硬件进行操作, 能够直接访问与硬件相关的存储器或 I/O 端口, 最大限度地发挥硬件的功能, 它可以不受编译器的限制, 对生成的二进制代码进行完全的控制, 能够对关键代码进行更准确的控制, 避免因线程共同访问或者硬件设备共享引起死锁, 可以根据特定的应用对代码做最佳的优化, 提高运行速度。在嵌入式系统、对硬件控制要求较多或对系统性能要求比较严格的场合, 应用汇编语言往往收效较好。

面向对象技术可以让用户实现抽象的数据类型, 通过继承大幅度地降低了代码重用现象, 提高了程序的开发效率。许多高级编程语言 (如c++、Java、Delphi等) 都支持面向对象技术, 但是由于这些高级编程语言最终都要将它们的源代码翻译成底层的机器代码, 所以在高级编程语言中支持的类和对象等概念, 在汇编语言中也应该存在对应的实现方法。但是大多数汇编语言的汇编器并没有为编写面向对象程序提供很好的支持, 而高级汇编语言HLA (High Level Assembly) 却为编写面向对象的汇编程序提供了很好的支持, 提高了代码的重用性, 为实现抽象数据类型提供了一种好的方法, 同时也提高了汇编程序的开发效率。

1HLA中的面向对象描述

1.1类

从本质上说, 类是一个允许定义非数据域 (如过程、常量和宏等) 的记录声明, 但在类的定义中包含其它的对象, 使类的功能大大超过了记录。在HLA中创建抽象数据类型的基本方法是声明一个类数据类型, 类的声明部分可以定义const、val、var和static等变量, 它总是出现在Type部分, 并使用以下语法:

Classname:class

<<class declaration section >>

Endclass;

在类中定义的所有过程、迭代器和方法都必须在后面的代码中有真正的实现, 可以选择把@external选项附在类中过程、迭代器和方法声明的结尾处, 用来告诉HLA真正的代码将出现在一个单独的模块中。作为一条通用规则, 类声明一般出现在头文件中, 用来表示抽象数据类型 (abstract data type, ADT) 的接口部分。过程、迭代器和方法体均出现在实现部分, 通常是一个单独的源文件, 可以单独编译, 并且能链接到使用该类的模块上。

类过程的声明和标准过程的声明是有区别的, 首先, 过程名包含了类名, 但需要注意的是在过程的begin和end子句中, 并不一定要在过程名前重复类名;另外, 一些过程属性 (如@use、@external、@retruns、@cdecl、@stdcall和@pascal等) 只在类的原型声明中才是合法的, 而另一些属性 (如@noframe、@nodisplay、@noalignstack和@align等) 则只在过程定义中才是合法的。

如果一个类例程的原型没有@external选项, 那么包含类声明的编译单元必须还包含这个例程的定义, 否则, HLA将在编译的结尾产生一个错误。一般情况下, 局部类会把类的过程、迭代器和方法的定义放在紧跟类声明之后的源文件中, 而当单独编译一个类的模块时, 一般将类的声明单独放在一个头文件中, 而将所有的过程、迭代器和方法的定义放在一个独立的HLA单元中, 并且对其进行单独编译。

1.2对象

类只是定义了一种类型, 在声明类之后还没有创建可以操作它的域的变量。对象是类的实例, 即一个类的变量, 可以像声明其它变量一样在var、static或storage段中声明对象。HLA为类声明中的每一个出现在var部分中的变量分配存储单元。

静态数据对象在类的对象中不是惟一的, HLA只分配一个静态变量, 而类的所有变量共享该静态变量。例如, 在以下的类和对象声明中, var3.var1和var4.var1是两个不同的变量, 而var3.var2和var4.var2却互为别名。

通常用静态变量保存有关整个类的信息, 而用类的var对象保存有关指定对象的信息, 也可以创建类的动态实例并通过指针指向那些动态对象。

1.3继承、重载和方法

继承是一个类从其它类中复制所有的域, 且可以在新的数据类型中扩展域的数目。重载是用一个更适合新类的方法替代继承类中现有方法的过程。

HLA是通过一个指向对象的指针来调用方法, 而不是直接通过对象变量来调用方法, 在通常情况下, 当程序通过指针间接引用数据时, 指针的值是与指针相关联的底层数据类型的某些值的地址。同样, 指向某些记录的指针不能正常指向其它的记录类型, 也不能访问其它类型的域, 但是使用指向类对象的指针可以降低该限制, 指向对象的指针可以包含该类型对象的地址, 或者任何继承了该类型的域的对象地址。如果已经获得了一个指向某个对象的指针, 并且调用了一个与该对象相关联的方法, 系统将会调用和对象相关联的被重载的方法, 而不是那个只与指针类型相关联的方法。当通过对象指针间接调用类的过程时, 系统将始终调用与基类相关联的过程。

2HLA中的面向对象实现

2.1编写类方法和过程

对于类定义中的每一个类过程和方法原型, 都必须有一个相应的过程体或方法体, 如果原型没有包含@external选项, 那么这些代码就必须和类的声明出现在同一个编译单元中, 如果原型后面跟着@external选项, 那么代码可以和类的声明出现在同一个编译单元中, 也可以出现在不同的编译单元中, 只要将最后所得到的对象文件和包含类声明的代码链接在一起就行。和外部过程一样, 如果没有提供代码, 则构建可执行文件时, 链接程序就会报错。

在一个编译单元中, HLA类例程必须始终紧跟在类的声明之后, 如果在单独一个单元中编译例程, 那么类的声明仍然必须置于例程的实现之前, 通常是通过#include文件来实现。如果直到定义一个例程时还没有定义类, 那么HLA就不知道如何处理例程的定义。

HLA在调用一个类例程时, 会自动将一个指针传递给一个对象的数据域, HLA在ESI寄存器中传递这个对象的指针, 将对象的地址自动加载到ESI寄存器中。对于类的方法, HLA也会将类的虚拟方法表 (virtual method table) 的地址加载到EDI寄存器中, 但当调用类方法或迭代器时, 由HLA产生的代码将重写EDI中的值。在类例程的入口, ESI包含了一个指向与类相关联的数据域的指针, 因为ESI作为对象数据域的基址, 所以最好不要改变类例程中的值。

2.2实现对象

汇编语言编程可以完全领会底层的实现细节, 允许在底层随意操作数据结构, 有助于创建可靠的算法, 但如果没有对象实现的详细知识, 就不会做到这些。

HLA用一种与记录非常类似的方式实现对象, 用与记录一样的连续方式为类中所用的var对象分配存储单元。类和记录的实现之间的区别在于类对象的开头部分多了一个虚拟方法表VMT (virtual method table) 指针域, 它包含了类的VMT的地址, VMT的地址依次包含了所有类的方法和迭代器的地址, 即使一个类不含任何方法或迭代器, 但必须有VMT域。HLA不会自动产生VMT, 必须在程序中显式第声明该表, 声明时只要在程序的static或readonly段中包含如下语句即可:

Readonly

VMT (classname) ;

当HLA调用类过程时, 和任何普通过程调用一样, 直接用一个调用指令调用该类过程即可。系统中的每个对象都将一个指针传送到VMT中, VMT是一个指向类中所有方法和迭代器的指针数组, 如图1所示。

在类中声明的每一个方法或迭代器在VMT中都有一个相应的入口, 该入口包含了方法或迭代器中的首条指令的地址, 所有类都会将指向VMT的指针放在对象中偏移量为0的地址, 在程序中有一个单独的VMT和每一个类相关联, VMT就是一个指向类相关的方法或迭代器的指针数组。出现在类中的第一个方法或迭代器的地址在偏移量为0 位置, 第二个在偏移量为4的位置, 依次类推。子类继承基类中的域时, 子类的VMT都会从基类的VMT中继承入口。如下为一个典型的调用序列:

Mov (objectadress, esi) ;

Mov ([esi], edi) ;

Call ( (type dword [edi+n]) ) ;

其中第一条指令将类对象的地址装入ESI寄存器, 第二条指令将VMT的地址装入EDI寄存器, 第三条指令调用一个放或迭代器, 其中的n是要调用方法或迭代器在VMT中的偏移量。

虽然VMT在一个对象中总是出现在偏移量为0的地方, 但是HLA实际上是将一个符号插入到符号表中, 所以只能

2.3初始化对象

在使用一个对象之前, 要确保已为该对象初始化了虚拟方法表的指针, 假设有以下的对象声明:

Var

Var1:tBaseclass;

……

Var1:mbase () ;

在对该对象的VMT地址初始化的一种简单的方式为:

Mov (&tBaseclass._VMT_, var1._pVMT_) ;

每个特定的类都可能有它自己的具体应用需要初始化, 虽然初始化可能根据类的不同而不同, 但是需要对每个特定的类的对象进行同样的初始化。如果曾经从一个给定的类中创建了多个对象, 则可以在创建的过程中进行初始化工作。

利用上面定义的类和对象就可以构造抽象的数据类型, 从而在汇编语言程序设计过程中实现了面向对象的编程思想和方法。

3总结

通过上面介绍的方法, 可以在汇编语言中实现面向对象编程技术, 从而可以编写出时间上和空间上比高级语言效率更高的程序。

参考文献

[1]Irvine K R.Assembly language for intel-based Computers (fourth edition) .北京:清华大学出版社, 2005

[2]Hyde R.The art of assembly language.北京:清华大学出版社, 2005

[3]严义, 包键, 周尉.Win32汇编语言程序设计教程.北京:机械工业出版社, 2005

[4]罗云彬.Windows环境下32位汇编语言程序设计.北京:电子工业出版社, 2002

[5]张长海, 郭东伟, 左万历, 等.Pentium汇编语言程序设计.北京:高等教育出版社, 2005

基于对象 篇5

论文关键词:学习对象 元数据 教学资源库

论文摘要:学习对象是教育技术领域的一个全新理念。作为理论,学习对象研究影响教学资源可重用性的各种因素间的最佳结构状态;作为技术,学习对象是教学资源的抽象与封装,教学资源以学习对象的形式存在,教学设计者通过重用学习对象来共享教学资源。本文介绍了学习对象的特征、分类、粒度和元数据语义模型,分析了在教学资源库系统中引入学习对象的优势,讨论了基于学习对象的教学资源库系统中学习对象粒度定位、类的封装与继承及其xML绑定。

一、引言

自20世纪90年代E-Learning逐渐兴起以来,教学媒体发生了改变,教学资源的形态也随之发生了变化,数字化教学资源作为教育信息化背景下的现代教学要素,己经成为支持信息化教学活动的重要基础和保证。

但是,教学资源普遍存在难以重用、互操作性差、共享困难、利用率低下等诸多问题。因此,教学资源的共享与重用越来越引起教育技术学界的关注。受到计算机科学中面向对象思想的深刻影响,学习对象的理念逐渐形成并得以快速发展。

本文探析学习对象的理论及其在共享型专业教学资源库中的应用。

二、学习对象的理论

(一)面向对象思想

20世纪70年代末,针对导致软件危机的根源,即用VonNeumann机求解的问题域结构与解域结构的不一致性,形成了面向对象的思想。

面向对象(Object-oriented,00)思想的基本内容是:1、系统由对象组成;2、对象具有标识唯一性且相互关联;3,对象由属性和方法组成,属性刻划了对象的状态,方法刻划了对象的作用、运动及其相互关联;4、对象的属性变化反映了系统的状态变化。5、系统中各个对象之间的相互作用关联,形成对象方法之间的相应动态组合,从而完成系统任务。

80年代,随着OOP的迅速发展,00思想及其方法与技术不仅在软件工程领域得到深人研究和广泛应用,还深刻影响了系统工程、知识工程、人工智能、计算机体系结构等众多领域。到了90年代,00在高度(思维科学)、广度(应用领域)和深度(形式描述)三个维度的研究不断扩展和深人,成为计算机科学的一个研究热点。

(二)学习对象的概念

00思想运用到教育技术领域,提出了可重用教学构件((reusableinstructionalcomponents)的概念。1994年,H.WayneHodgin;在《LearningArchitec-tures,API’s,andLearningObjects》一文中首次使用学习对象(Learningobject,LO)一词来描述这种易组合、可重用的教学构件。

,美国IEEE学习技术标准委员会(LTSC,IEEEP1484)成立。该委员会采纳了学习对象术语,,委员会下设的学习对象元数据工作组(P1484.12)给出了学习对象的一个十分宽泛的定义:学习对象是可以在技术支持学习的过程中被使用、重用或引用的任何数字或非数字的实体。

一些研究机构和学者也相继提出了学习对象的定义,但基本上都是针对上述定义的限制性界定和具体描述,最典型的是:学习对象是支持学习的可重用的数字化资源(anydigitalresourcethatcanbereusedtosupportlearning}。这些限定和描述刻划了学习对象的特性,从而进一步明确了学习对象的含义和范畴。

学习对象概念的三个显著特性是:

1、教学性。学习对象是针对学习而设计、在学习过程中被使用、为达到学习目的而存在的特定实体。

2、可重用。学习对象可以被教学设计者针对不同的教学对象、出于不同的教学目的、基于不同的教学策略、在不同的教学情境下重新组合和重复利用。

3、数字化。学习对象是数字化实体,能够传输和共享。

学习对象概念还具有其它一些特性,如自包含(self-contained)、自足(self-sufficient)、内聚(cohesion),可聚合(canbeaggregated)、互操作(interoperable)等,但教学性、可重用、数字化是最重要的三个特性。教学性是学习对象的首要任务,可重用是学习对象的核心目标,数字化是学习对象与传统教学资源的根本区别。

(三)学习对象与教学资源

建立在非数字化教学媒体基础上的传统教学资源,其形态是固化的、物化的和静态的。随着信息技术的发展和信息技术教育应用的普及,以网络为载体、以多种媒体来呈现的数字化教学资源,从一开始就表现出传统教学资源所无法比拟的巨大优势,并逐渐成为教学资源的主流形态。但是,仅仅只是教学资源的形态发生变化还远远不够,这是因为:1、它所包含的教学内容(或教学材料)仍然是固定的,难以被教学设计者解构和重组;2、它不具备一致的组织结构及其描述信息,难以互操作和共享。

学习对象是教学资源的抽象与封装,教学资源以学习对象的形式存在,教学设计者通过重用学习对象来共享教学资源。因此,学习对象是构件化的教学资源,能有效的检索、发现、管理、重用和共享,具有现代教学资源的全部特征。

(四)学习对象的分类

学习对象的内在固有特性包括:组合元素的个数、内含对象的类型、可重用的构件对象、一般功能、外部依赖性、逻辑类型、不同情境下可重用的潜力、同一情境下可重用的潜力。学习对象按上述固有特性分为5类:基本型((fundamental)、组合封闭型(tom-biped-closed)、组合开放型(combined-open)、生成呈现型(generative-presentation)和生成教学型(genera-tive-instructional)}Z}o

学习对象按组织结构分为原子、集合、线性、层次和网状类型叭按聚合度分为4个聚合层次。

(五)学习对象的粒度

粒度(granularity)是关于对象的大小、尺度及其详细程度等特征的描述。学习对象的粒度决定了学习对象的重用频率与效率,粒度过大会降低重用频率,粒度过小则会降低重用效率。

一方面,根据00思想,对象的粒度要满足“高内聚,低藕合”。另一方面,学习对象不同于软件工程学中的抽象数据类型,教学性是其首要特性,因此,学习对象的粒度要以能表达一定独立教学意义为原则。

(六)学习对象元数据

元数据是关于数据的数据,用于描述数据的属性。学习对象元数据(Learningobjectsmetadata,LOM)的作用在于,为教学设计者和学习者查找、获取、使用、评价、互换、共享、管理学习对象提供支持。学习对象元数据是学习对象的关键技术之一。

目前,国际上相对完备的LOM标准是IEEE((DraftStandardforLearningobjectsmetadata})(IEEEP1484.12.1)aIEEELOM标准定义了学习对象的一个语义模型,其结构是一个4层语义树。该语义模型将学习对象的属性组合成9类,分别是:general,lifecycle,meta-metadata,technical,education}rights,rela-tion,annotation,classification。该语义模型的数据元素分为必须数据元素(mandatorydataelement)与可选数据元素(optionaldataelement),全体必须数据元素组成LOM核心集,全体可选数据元素组成LOM可选集。特别的,第9类数据元素classification组成LOM分类扩展集,为特定领域的学习对象提供了一个简单的扩展机制。

我国《教育资源建设技术规范》是IEEELOM标准在教学资源领域的扩展和本土化。《教育资源建设技术规范》以LOM核心集为基础,抽取LOM可选集的一个必要子集,利用LOM分类扩展集对九类教学资源规定了扩展属性。

三、基于学习对象的教学资源库

教学资源库是面向教学的教学资源数据库系统,它利用信息技术对教学资源进行开发与整合,以计算机网络为传输载体与共享手段,实现优质教学资源的共建共享。教学资源库是示范性高等职业院校的主要建设内容之一,它主要包括专业教学目标与标准、精品课程体系、教学内容、实验实训、教学指导、学习评价等要素。

基于学习对象的教学资源库是指:基于学习对象所包含的教学设计理论、面向对象思想、可重用性核心理念,运用学习对象的元数据技术和面向对象的程序设计技术,描述、组织、管理、发布、运用教学资源的数据库系统。

基于学习对象的教学资源库具有以下优势:

第一,由于学习对象的可重用性,在学习对象理论指导下构建的教学资源库能以最大效度提高资源的使用效率;

第二,由于学习对象元数据的标准性,使教学资源的分类组织及其特征描述符合一定规范,同时也是资源数据库的设计依据;

第三,由于学习对象的潜在智能性,在某种教学策略或认知策略的引导下,系统能够自适应教学目标并生成相应的学习对象序列,从而使系统具有一定程度的智能化或通过代理结构实现智能代理。

(一)教学资源的分类

教学资源按内容可分为三大类,即标准类、素材类和课程类,其中素材类和课程类属于学习对象。各类教学资源界定如下:

1标准类包括职业标准、岗位能力标准、人才培养方案和课程标准等。

(1)职业标准是根据职业的活动内容,对从业人员工作能力水平的规范性要求。

(2)岗位能力是从业人员在具体工作岗位上应具备的能力,是职业能力的具体化。岗位能力标准一般从普通岗位能力、基本岗位能力、核心岗位能力三个层面描述工作岗位的能力体系,每个层面由若干能力素质类别构成,每一类别根据行为表现的不同而划分为多个级别,每个级别代表不同处理事件能力的程度。

(3)人才培养方案是人才培养目标与培养规格的.具体化、实践化表现形式,是学校实施人才培养工作的指导性文件,是组织教学和进行教学管理的主要依据。人才培养方案包括培养目标、培养规格、培养模式、课程目标、课程体系、实践实训教学体系、学习评价等方面的内容。 (4)课程标准是教材编写、教学实施、评价测量的依据,是学校管理和评价课程的基础。课程标准阐述课程的性质、价值与功能,明确三个维度(知识与技能、过程与方法、情感态度与价值观)的课程总目标和学段目标,描述学习领域的内容标准和学习目标(结果性目标和体验性目标),给出实施建议(教与学建议、教材编写建议、评价建议、课程资源开发与利用建议等)。

2.素材分为媒体素材、试题、试卷、课件、案例、常见问题解答、文献资料、资源目录索引等。

(l)媒体素材是传播教学信息的基本材料单元,素材类型分为文本、图形图像、音频、视频、动画五大类。

(2)试题是测试中使用的问题、选项、正确答案、得分点和输出结果等的集合。题库是按照一定的教育测量理论,在数据库系统中实现的试题集合。

(3)试卷是用于测试的典型成套试题。

(4)课件是针对若干知识点实施相对完整教学的软件。

(5)案例是指由各种数字媒体元素组合表现的有现实指导意义和教学意义的代表性事件或现象。

(6)常见问题解答是针对某一领域最常出现的问题给出的全面解答。

(7)文献资料是有关教育教学方面的政策、法规、条例、规章制度和专业文章、书籍、音像资料、事件记录等。

(g)资源目录索引是某一领域中相关的网络资源URL链接和非网络资源的索引气

3.课程类包括网络课程、精品课程、课程包等。

(1)网络课程是通过网络表现的某专业的教学内容以及所实施的教学活动的总和,包括按一定的教学目标、教学策略组织起来的教学内容和网络教学支撑环境。

(2)精品课程是指具有“五个一流”的示范性课程,即具有先进的教育思想、丰富新颖的教学内容、精湛的教学艺术、现代化的教学手段、严格的教学管理及评价等特点的示范性课程。“精品课程要使用网络进行教学与管理”,从这个意义上讲,精品课程的网络表现形式是网络课程。

(3)课程包是针对课程实施完整教学的软件。

(二)学习对象粒度的定位

教学资源的上述分类是依据内容分类,因此,学习对象的粒度取决于教学内容的规模。

知识点是教学内容的核心单元,知识点之间的关联关系体现了知识体系的内在联系,所以知识点及其关联关系是构建完整知识体系的基础。同时,一个知识点又是具有原子特性的不可分单元。因此,知识点属组合封闭型,围绕一个知识点的相关素材属基本型,由关联知识点组成的课程属生成教学型。

设计学习对象时,其粒度定位如下:

1、单个课件被一个学习对象封装;

2、其它素材类教学资源按照知识点分组,每个分组被一个学习对象封装;

3、一门课程对应一个学习对象序列。

(三)学习对象类的封装与继承

将教学资源分类后,提取每一类教学资源的共性特性和个性特性,这些特性在基于学习对象的教学资源库系统内部定义为一个抽象数据类型--一学习对象类(Learningobjectsclass,LOC)。LOC是教学资源在系统内部的抽象与封装,每个具体的教学资源是LOC的一个实例。

LOC与LOM都是教学资源的抽象与封装,LOC用于系统内部对教学资源的各种加工处理,LOM用于系统对外呈现教学资源,LOC与LOM是动态对应的。位于顶层的LOC是一个抽象类,它的属性与必须数据元素一一对应,方法至少包括构造器、set,get等方法。各类LOC继承顶层类,重载顶层类的属性与方法,其扩展属性与可选数据元素、分类数据元素一一对应,属性的赋值可以在构造时通过构造器由元数据库中初始读取,也可以通过set方法由元数据库中动态读取。

为了实现学习对象的序列化和智能代理,还要考虑LOC实例的持久化,在LOC实例的整个生存周期内保持有状态会话。

(四)学习对象元数据的XML绑定

为了实现元数据的XML绑定,基于学习对象的教学资源库系统需要具备:1、一个完备的资源命名空间;2、一套完整的XML标记,并通过DTD约束以符合规范,使用XSL设置显示格式;3、元数据字典和元数据编辑器等元数据管理工具;4,XML文档生成器。

注册教学资源时,在元数据字典和元数据编辑器向导下,提取教学资源的元数据,创建相应的LOC实例,存储到元数据库。发布教学资源时,XML文档生成器读取元数据库,用XML描述、封装元数据,生成XML文档格式的虚拟资源库。

四、结束语

学习对象是教育技术领域的一个全新理念。它所包含的教学设计理论、面向对象思想、可重用性核心理念对于教学资源的建设有着深远的理论指导意义。它的分类方法、粒度定位、元数据规范对于教学资源库的构建有着现实的实践指导意义。

基于对象 篇6

关键词:中断;Linux;面向对象思想

中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)12-21356-02

Research of Interrupt Design Based On Object-Oriented Thinking In Linux Kernel

FANG Hong,LV Tai-zhi

(Department of Information Engineering,JiangSu Marine Institute,Nanjing 211170,China)

Abstract:This paper introduced the problem of interrupt design and the basic solution under Linux.By applying object-oriented thinking and design model,Top Half and Bottom Half of interrupt mechanism were analyzed on structure and action, Finally,the paper pointed out that the highly performable and flexible framework of interrupt handling was realized in Linux kernel.

Key words:interrupt;Linux;object-oriented thinking

1 引言

中断是计算机系统中不可缺少的工作机制,对系统性能有重要影响。但其与硬件密切相关,作为支持多种硬件平台的Linux操作系统,在中断机制设计方面必须权衡性能和可移植、可扩展性等方面的矛盾。运用面向对象的技术构建高质量的软件体系结构,用高效的c语言来编程实现,将二者的优点有机结合起来,已成为Linux内核设计中的发展趋势。在Linux内核中,出于性能的考虑,将中断的处理分成上半部分[1](Top Half)和下半部分(Bottom Half),因此內核的中断处理机制也被分成两部分,本文基于Linux内核2.6.20,运用面向对象的方法及相关设计模式,对这两部分进行了深入分析。

2 Top Half分析

Top Half已被设计成一个独立的中断处理层。设备驱动通过使用该层提供的接口,使中断处理部分完全独立于硬件,从而大大提高了代码的可移植性;中断硬件驱动则可以实现和使用该层定义的中断硬件接口和中断处理回调接口,对中断处理层提供支持,同时也可以利用该层提供的标准中断处理流程,简化设计和实现。

2.1结构分析

通过分析中断相关内核源代码[2],抽象出Top Half的类图(图1)。类的提取主要来源于相关头文件中的struct结构,也有一些是直接从代码中抽象而来,并没有相应的struct。为了取得一定的对应关系,类的命名尽量采用了与之对应的struct结构的命名。对于包含函数指针的struct,可以有两种观点:第一种将其视为定义了抽象方法的抽象类,第二种将其视为包含了预定义接口的类。本文采用第二种观点,因为它更能体现面向对象设计的基本原则(编程中使用接口,而不是接口实现;优先使用组合而不是继承)。manager主要定义实现上层接口,设备驱动可以进行请求、禁能、释放中断等操作,无需知道中断硬件的细节,从而使设备驱动中断处理相关的代码无需改变就可以方便地移植到不同平台。manager内含一个包含irq_des的线性数组,以此实现全局管理。irq_des与中断号一一对应,是将底层硬件隔离及实现中断处理流程的关键。它包含的irq_chip通过定义一组接口方法,将不同的中断硬件行为统一进行了封装。一方面底层中断硬件驱动只要根据自身功能部分或全部实现这组方法,就可以向上提供满足需要的中断处理功能,方便了底层的设计;另一方面负责中断处理流程的handle_irq,通过使用chip的方法与硬件交互,从而将中断流程处理与硬件细节处理分离。由于不同类型的中断,其中断处理流程不尽相同,不同于以前的在一个函数中处理各种类型中断的方法,內核目前将其细分成6种类型(edge level simple percpu bad fasteoi),并分别提供了标准的实现,这样可以针对特定类型,优化代码,提高处理性能。虽然有多种类型的处理方法可供使用,但内核仍抽象出单一的中断处理接口handle_irq供底层调用,在这里,使用了策略(Strategy Pattern)设计模式[3],6种类型的中断处理方法(具体策略)是handle_irq(策略接口)的不同实现,而irq_des则提供了策略赖以存在的上下文(Context)。策略模式使中断处理更具灵活性、可扩展性。例如可以方便地增加新的中断处理类型以及根据需要重新实现特定类型的中断处理方法,却对使用者没有影响。chip和handle_irq相结合一方面屏蔽了底层中断硬件的变化对上层的影响,另一方面给中断硬件驱动的设计实现带来了便利;而性能却因为优化了不同中断类型的处理代码而得到提高。

图1 Top Half类图

为了有效利用紧缺的中断资源,内核支持中断共享,这主要通过irqaction来实现。irqaction的设计使用了职责链(Chain of Responsibility)模式[3],该模式的设计意图在于使多个对象都有机会处理请求,通过将这些对象连成一条链,并沿着这条链传递该请求来实现,它降低了请求的发送者和接收者之间的耦合。由于中断共享时,有多个中断处理函数,但只有具体的中断处理程序知道是否要处理中断,且要求支持中断处理函数的动态增减,所以非常适合运用职责链模式。action包含一个handler,它定义了处理中断请求的接口,具体的中断处理则由使用中断的设备驱动程序以中断处理函数的方式来实现。在handle_irq的具体实现中,均会调用handle_IRQ_event方法,该方法遍历irqaction链,并依次调用handler接口方法,最终实现中断的处理。职责链模式虽然有诸多优点,但也有缺点:主要是处理效率偏低,因为处理一个请求可能要遍历到最后才能完成,这就要求共享同一中断的设备不能太多,同时要求中断处理程序尽快判断出中断是否需要处理,若不需要应及时返回。

2.2行为分析

中断的实际处理过程是一个软硬件相结合的、异步和并发的复杂过程,虽然内核中断处理层屏蔽了中断处理的细节,但使用中断的设备驱动编写者仍需要理解中断处理的主要过程,特别是中断处理函数被调用的上下文环境,作为一个较高层次的抽象,下面描述了一个中断被处理的基本过程。首先设备驱动使用request_irq申请登记中断处理函数,相应设备触发了一个中断,经过底层软硬件的一系列处理,最终会调用irq_desc的handle_irq方法,该方法又会调用handle_IRQ_event,它遍历irqaction链,调用中断处理函数,中断处理函数在进行必要的处理后,一般会在标识出要延迟处理的工作后返回,最后在判断出没有硬软中断嵌套及有软中断需要处理的情况下,调do_softirq进行下半部分的处理。

3 Bottom Half分析

在内核中,Bottom Half的实现机制主要有软中断(softirq)和任务片(tasklet)[4],tasklet是基于softirq的,二者的主要区别是同一软中断处理函数可以同时运行在多个CPU上,而同一任务片同时只能运行在一个CPU上,不同的任务片可以同时运行在不同的CPU上。因此需要软中断实现者自己处理因多CPU 存取共享数据产生的同步问题,在获得高性能的同时,增大了编程难度。而任务片则在性能和编程难度间找到了一个合理的平衡点,被大多数设备驱动所采用。

3.1结构分析

通过分析与tasklet和softirq相关的源代码,可以抽象出两者的类图(图2),smanager负责提供初始化、请求、触发、处理软中断的方法,其中do_softirq负责实际处理软中断,该方法在软中断层有标准实现,但在某些平台上(如i386平台)则由体系相关部分实现以支持软中断栈,但系统运行时只能使用一种实现,为此内核使用条件编译,在编译时确定使用哪一种实现,这实现了一种编译时的“多态”。smanager内含一个包含32个softirq_action的线性数组,以此实现对软中断的全局管理,数组下标隐含了软中断的优先级,下标越小,优先级越高。softirq_action实际上是软中断相量,设计的相当简单,它包含一个action接口由具体的软中断来实现。内核已实现并装入了几种软中断,这些软中断一经装入就不会被卸下,所以内核目前没有提供释放软中断的方法。一般推荐由内核开发者来实现软中断,而不是设备驱动的编写者。

tmanager通过tasklet_action实现action接口方法成为一种软中断,tmanager负责对外提供创建、调度、禁能tasklet的方法,它内含几个与CPU个数相等的数组,每个数组包含一个tasklet相量链(与CPU一一對应),在这里,再次采用了职责链设计模式,因为与中断共享类似,多个tasklet实际上共用了一个软中断触发标志位,且要求支持tasklet的动态增减,但tasklet的动态性更强,仅执行一次就被从链表中删除。在内核中实现了两类不同优先级的tasklet,其结构和行为基本一致,本文以普通优先级的tasklet为主进行论述。

3.2行为分析

软中断的运行可分为触发和执行两步。触发机制类似于内核中的信号机制,raise_softirq方法设置触发标志位(每个CPU均有一个整型标志字,每位依次与软中断号相对应,置1表示该软中断需要处理);软中断的实际执行由do_softirq方法完成,该方法可以在多CPU上同时执行,首先判断当前CPU是否已运行软中断,若是则退出,以避免重入可能导致的死锁;然后依次遍历软中断数组,对于标志位置1的软中断则调用其action方法,进行实际的软中断处理。

图2 softirq和tasklet类图

tasklet的运行也分为提交和执行两步,提交由tasklet_schedule完成,它会把tasklet插入到与当前CPU所对应的tasklet链中,在插入前会判断tasklet是否已被调度到其它CPU上(通过成员state判断),若是则返回,以此保证某个tasklet在多个tasklet链表中的唯一性,然后调raise_softirq触发软中断;执行由tasklet_action(被do_softirq调用)完成,它遍历与当前CPU对应的tasklet链表,调用func接口方法实现处理,并将处理过的tasklet从队列中删除。在tasklet处于运行状态时,该tasklet可以再次被调度到tasklet链表中,但不能被运行,直到前一tasklet运行完毕。提交和执行机制共同保证了同一tasklet在多CPU上的串行执行以及不同tasklet在多CPU上的并行执行。

4 结论

通过充分运用面向对象的基本设计原则(封装变化;编程中使用接口,而不是接口实现;优先使用组合而不是继承)以及设计模式,Top Half 和Bottom Half被设计实现成了一个中断处理的框架结构,融高效与灵活为一体,本身也可以被抽象提炼出一种设计模式。其设计思想和方法值得学习和借鉴。

参考文献:

[1]陈莉君.Linux操作系统内核分析[M].北京:人民邮电出版社,2000.102-125.

[2]Linux2.6.20内核源码[EB/OL].http://www.kernel.org.

[3]Erich Gamma.等.著.李英军.等.译.设计模式:可复用面向对象软件的基础[M].北京:机械工业出版社,2000.9:147-218.

[4]毛德操,胡希明.Linux 内核源代码情景分析[M].杭州:浙江大学出版社,2001.222-333.

基于对象 篇7

1 LonMa rk对象的组成

LonMark对象是网络变量和配置属性信息、对象类型和索引、制造商定义的部分的集合。网络变量是一个对象,它是LonWork网络中各个设备之间进行通信的最基本的方法。网络变量是一个设备的逻辑输入和输出。它的类型、功能和数量都是被它所在的应用程序定义的。每个网络变量都有一个被应用程序定义了的数据类型和方向。网络变量是在方向的基础上分类的———他们可以被声明为输入网络变量和输出网络变量。网络变量用于报告LonMark对象的状态或给其赋一个新的值。标准类型的集合称为标准网络变量类型[Standard Network Variable Types(SNVTs),它们定义了网络变量的标准范围、单位和类型标号[identification(ID)number]。LonMark对象提供了基础的应用层的互操作。下面是一些简单的网络变量说明:

network input SNVT_temp temp_set_point;//定义一个标准的温度输入网络变量。

network output SNVT_lev_disc primary_heater;//定义一个标准的输出网络变量。

network output int current_temp;//自定义一个整型网络变量。

配置属性用于配置LonMark对象的操作,配置属性可以通过使用配置网络变量(configuration network variables)和SNVT来实现[2],或者他们作为配置参数来实现,该参数存储在一个数据块中,使用LonTalk文件传输协议读或写,或者由存储器来直接读/写。配置参数的标准集合作为标准的配置参数类型(SCPTS)。配置属性可以用来配置设备、LonMark对象或者网络变量的属性。

Lon Mark对象定义了网络上节点间如何交换信息的格式和语义。一个Lon Mark兼容的节点包含一个或多个Lon Mark对象。每个对象由一个唯一的对象类型号和网络变量的输入、输出及配置特性来定义。LonMark对象提供了基础的应用层的互操作。网络变量和配置属性随同它们之间的互操作性被功能接口模块所定义[3]。该模块或者是用户自定的功能接口文件模块,或者是一个标准的功能接口文件模块。标准的网络变量是被LonMark互操作性协会定义和修改的。图1给出了Lon Mark对象的基本框架。

Lon Mark对象的类型包括以下几类:

(1)开环传感器对象、闭环传感器对象。

(2)开环执行器对象、闭环执行器对象。

(3)控制器对象。

其中,传感器对象是一个能够被任何传感器使用的通用的对象,例如,一个模拟电压、温度或者是一个温度传感器,甚至一个数字开关。这个传感器对象支持数据直接传输到一个执行器对象,或者到一个被定位在控制对象中的控制环。传感器对象有两个版本:“开环传感器对象”和“闭环传感器对象”,使用哪一个传感器对象是由应用程序决定的。闭环传感器对象能够使它适用于那些具有能够利用多个执行器组成在一起的多路传感器的应用程序。这个闭环传感器的目的是利用多路传感器去控制一个通用传感器,或者是一个信号传感器去控制多路执行器,与此同时保存传感器和执行器中对象的实际和期望的状态。

执行器也是一个能被任何执行器使用的通用对象,例如发动机或一个阀门。它可以被远程的控制器对象的控制规则所控制,或者直接由传感器控制。像传感器对象一样,执行器对象也有“开环执行器对象”和“闭环执行器对象”。

控制器对象接收来自传感器对象的信号并向执行器对象输出控制信号。在控制器对象定义中,对与控制器对象接口的传感器对象和执行器对象的数量没有限制,设计者能够灵活地对传感器和执行器设备提供接口。

LonMark最下层是制造商定义的一些网络变量和类型,以及非互操作性的接口等。每个LonMark对象和节点都包含有一个非LonMark互操作性接口,该非互操作性接口的作用是:如果该节点与同一制造商的其他节点相互操作,可使制造商提供更多特定的特征或行为。通过这种方式,制造商能够将自己的产品与其它的实现同样的LonMark对象的LonMark产品区分开来。

2 基于LonMa rk的智能节点结构

基于LonMark对象的应用节点称为LonMark节点。LonMark节点还包含一个节点对象,让网络管理工具来监控它自己和其它对象在节点中的状态,图2给出了LonMark的节点特征描述。

节点对象(Node object)和其他LonMark对象具有与之关联的网络变量和配置属性。配置属性的例子包括设定值、报警值、转换和线性化表格以及缺省值等。LonMark节点对象提供了关于整个节点的信息,包括状态获取机制,控制其它Lon Mark对象(使能、使不能、自检测等等),它包括一些标准的网络变量,例如,nvirequest(输入网络变量请求)、nvostates(节点状态的输出网络变量)、nvoalarm(警戒网络变量的输出)等,节点对象允许节点中的对象功能被监测。当网络变量nviquest接受到一个来自上面的更新请求时,网络变量nvostates就被更新了,同时这个可选的网络变量nvoalarm也被更新了。与此同时,网络变量nvoalarm还报告警戒状态。SNVT_obj_request的定义中还包括一个对象ID域,这允许节点对象向一个节点上的所有对象报告当前状态和警戒状态。

3 应用实例

下面是一个用Neuron C语言编写的关于闭环传感器对象的应用例子,它适用于所有的传感器,包括温度传感器、烟雾传感器等,图3基于LonMark对象的闭环传感器和执行器的网络变量连接图:

//这个程序可以在LonBuilder神经元芯片仿真器上运行,或者在LTM-10 Lon Talk节点上运行。通过网络变量浏览器可以观察输出网络变量nvoValue,你可以按NodeBuilder上的IO4按钮观察网络变量的变化。你可以通过更改ST_OFF或者ST_ON来更新反馈回来的网络变量nviValueFb,这是你可以观察到和IO0管脚连接的LED的变化。

4 结束语

未来的网络应该是开放的、互操作的网络。LonWork网的飞速发展必将使各产品之间的互操作性显得更加重要,所以LonMark对象在以后的程序设计中将显得尤为重要。

参考文献

[1]Echelon.LonMark Application Layer Interoperability Guidelines[R].078-0120-01D

[2]Echelon.NodeBuilder User’s guide[R].078-0141-01C

基于面向对象思想蓝牙安全模块设计 篇8

自从1994年爱立信公司开发蓝牙技术以来,蓝牙技术由于其方便性,低功耗等特性有了快速的发展,并已应用到许多领域,相应的各种各样的蓝牙产品也出现在市场上,例如蓝牙耳机、蓝牙电脑、蓝牙手机、蓝牙打印机等等,人们可以方便的使用蓝牙产品进行通信而不需要通信费用,并且很大程度上替代了有线通信,同时随着蓝牙技术的快速发展,其本身的问题也越来越突出,其中最重要的就是安全问题,极大的制约了蓝牙技术的发展,本论文就是针对此问题提出了蓝牙安全模块的设计思想,并开发出独立的蓝牙模块使其可以集成到不同的产品中。

2 安全原因分析

蓝牙的安全问题主要包括两个方面:第一是协议本身的问题,例如PIN的易攻击性,由于蓝牙算法简单和无线传播本身的不安全性,使得当用户输入的PIN码位数小于8位时很容易被第三方计算出PIN码,进而密钥被盗。协议允许对不同的设备使用同一密钥即Unit Key,这就使得密钥泄露成为可能。这类攻击主要包括Unit Key Attack,Relay Attacke,On-Line Pin Attack等。第二是上层蓝牙实现时安全控制不够,很多上层业务实现并没有实现安全控制,有些实现安全控制的安全度不高,这类攻击包括Bluesnarfing,Bluebugging,Peripheral hijiacking等随着科技的发展,蓝牙攻击的种类会越来越多也越来越容易,就如同PC机中的防火墙和杀毒软件一样,蓝牙也需要专门负责安全的功能模块才能应对各种各样的攻击。

3 蓝牙安全模块分析和设计

安全管理器就是要设计的蓝牙安全模块,它需要提供一些接口与蓝牙协议中的L2CPA层、用户接口、设备数据库、服务数据库和HCI接口进行通信。

3.1 安全模块的功能分析

安全模块的功能如下:

1.当需要建立一次L2CAP连接的时候,默认情况下会启动一次安全检测,然而,当在用户认为相对安全的环境下,例如在家中,办公室等,用户可以不需要启动安全检测,这就需要一个布尔标识参数flag_sec,为了保证安全,此值只能用户对其进行修改,而每次建立连接时都会对其检查,当为真是进行安全检测,否则不进行检测;2.蓝牙规范中包括可信(trusted)设备和业务,对于可信设备不需要进行安全鉴权,对不同的业务安全级别的要求不同,所以安全模块需要同设备数据库和业务数据库进行交互来确定是否要进行安全检查,同时用户也可以设定一些设备和业务的安全级别;3.对于建立在同一L2CAP上的不同的连接即不同应用可以在安全管理器中调用不同的鉴权过程,即只需要在安全管理器增加其功能,此论文主要讨论在L2CAP层的安全应用;4.为了以后的可扩展性以及透明性,此功能模块主要以接口的同其他层交互。

3.2 连接建立过程

1.要求建立L2CAP连接;2.L2CAP把请求转给安全管理器并同时传递参数;3.当安全管理器启动的时候开始验证安全性,当安全管理器关闭的时候直接返回真,否则的话进行下一步;4.首先从服务数据库和设备数据库读取安全级别,如果可信任设备和服务直接返回真,否则进行下一步;5.要求用户输入PIN码,也可能包括其他需要的参数,这主要是有所采用的安全算法决定;6.从HCI层请求远端设备的验证值;7.把从HCI层得到的验证值和本地的计算值进行比较,相等的情况下就认为远端设备通过鉴权,并相L2CAP层返回TRUE;8 L2CAP层根据结果来决定是否进一步建立连接,当从安全管理器返回TRUE则建立连接否则不建立连接。

4 安全模块算法

由于原蓝牙算法的易攻击性,本安全模块使用PIN与身份标识相结合设计算法,其中PIN码是两者所共有的,CID是本设备的身份标识,包括BD_ADDR,friendly name。f(),g(),w()是函数,为了保证PIN的安全性,本模块f()使用一对多的函数,例如sin()函数,由于无线传播时只传输f(PIN),所以第三方只能监听到f值并得到PIN的部分信息很难计算出Kinit的值。对于g()则需要采用一对一算法,w()函数用于计算Kinit,由于Kinit用于以后的鉴权和加密,它的安全与否对蓝牙整体安全性能有很大的影响。当双方进行鉴权的时候通过对方CID来取得相应的Kinit连接。

5 结语

本文介绍了蓝牙安全模块的总体设计框架和安全算法的核心方法,提出了身份识别和PIN相结合的安全机制,并主要是从PIN保护的角度来设计算法。由于一般的应用都需建立在L2CAP层之上,所以本论文只对L2CAP层的安全进行实现,没有考虑更上层的安全问题,有待进一步的研究。

摘要:主要介绍了蓝牙安全模块的软件设计思想,为了使模块具有很好的移植性,采用java进行模块开发,同时针对蓝牙协议算法的易破解性,提出了新的安全算法,此算法对PIN码进行一对多计算,同时对蓝牙设备通过用户设定进行了身份标识,在以后的鉴权中只进行身份信息的交换,这使得即使蓝牙认证过程被第三方监听,第三方仍然无法获得PIN码和密钥。

关键词:蓝牙安全,面向对象,安全算法,蓝牙安全模块

参考文献

[1]Bluetooth SIG Security Expert Group,bluetooth security white paper,2002.

[2]金纯,许光辰,孙睿.《蓝牙协议及其实现》北京:电子工业出版社,2001.

[3]张禄林,雷春娟,郎晓红.《蓝牙技术》北京:人民邮电出版社,2001.

[4]Bluetooth Paring and Authentication Vulnerabilities,Dennis K.Nilsson.

[5]Bluetooth SIG,Specification of the Bluetooth System V2.1+EDR,http://www.bluetooth.com/,26July2007.

基于均值漂移的立体视频对象分割 篇9

视频分割是指将图像或视频序列按一定的准则分割成区域,目的是为了从视频序列中分离出视频对象。立体视频对象分割技术是从静态图像分割技术和单通道视频分割技术的基础上发展起来的。进行立体视频对象分割[1,2,3],可以利用静态图像分割技术和单通道视频分割技术中的分割方法,先提取一路通道视频的目标,然后根据视差估计提取另一通道的相应目标。立体图像对中的深度信息指示了三维对象的空间位置,可以直接利用视差图来提取出不同深度层面的物体。

根据视差图的特性,笔者提出了利用改进的均值漂移算法与视差图相结合的方法对立体视频对象进行分割。通过实验验证,这种分割方法可以取得很好的分割效果。

2 视差估计

所谓视差是指同一个点在两幅图像中投影点之间的位置偏差,定义P点在左右成像平面的投影点离各自平面中心的位移之差为视差dv,即:

式(1)把物体与像平面的距离z(即三维世界中的深度)及视差d直接联系了起来。视差包含了三维场景物体的空间信息,可以用来描述相对深度。处在同一目标对象上的点,由于它们与摄像机之间的距离相近,其视差也相近,具有连续性;但在对象边界处,由于不同对象离摄像机的距离不同,故视差不同,具有间断性。离摄像机较近的物体,产生较小的立体视差;而离摄像机较远的物体则产生较大的立体视差。

笔者使用的是一种基于自适应权值的视差估计方法[4]。

3 立体视频对象的分割

3.1 分割前的预处理

为了抑制视差图中的噪声,采用3×3模板的中值滤波方法对视差图进行滤波。由连续性约束可知,除了对象边界处深度间断的地方,物体的视差变化是连续的。根据这个约束条件可以对立体图像对的视差图中处于不同视差平面的物体使用改进的mean shift方法对视频对象进行提取。

3.2 改进的mean shift算法

mean shift是一种非参数密度估计的方法[5]。算法的核心是对特征空间的样本点进行聚类,得到密度梯度为零的点。在d维欧氏空间Rd中,有n维样本点组成的集合S={xi,1≤i≤n},点x估计的密度概率值为

式中:表示点x的估计密度,h表示窗口的半径,k(x)为核函数的轮廓函数。要分析数据集合中密度最大的数据的分布位置,可以对标准密度梯度(2)进行估计

将g(x)作为G(x)轮廓函数,将(4)代入(3),得

第二项是mean shift向量,表示为

mean shift向量mh,G(x)总是指向密度大的方向,即密度梯度增加的方向。

笔者基于视差图的分割,对mean shift向量进行了改进

式中:d(x)代表灰度值。由于视差图具有不同层次的灰度值,通过不同的灰度值可以确定不同的对象,在mean shift向量中通过加入灰度权值,可以更准确地区分不同层次的对象。

3.3 基于改进的mean shift的视频对象的分割

笔者是通过对视差图使用改进的均值漂移聚类的方法得到视频对象的分割。聚类是按照事物间的相似性进行分类的过程,聚类过程中聚类中心点的寻找是关键,聚类中心点是特征空间中密度的局部最大值点。mean shift方法是通过mean shift矢量迭代来定位密度的模式点,mean shift方法对图像进行聚类时,迭代计算每一个像素点的mean shift矢量,来确定相应的密度模式点,并准确的将像素点归到对应的区域内。如果对图像中的每一个像素点都进行迭代计算,则计算量较大,为提高分割算法的效率,笔者利用视差图的特性对mean shift算法进行了改进,改进的mean shift的算法步骤如下:

1)根据灰度值的不同对视差图中的所有像素进行分类,属于同一灰度级的像素进行标记Mi;

2)窗口中心处于当前某一像素的位置;

3)检查当前像素的4邻域,如果其中某个像素与当前像素处于同一灰度级,则用邻域像素取代当前像素,返回3),否则4);

4)计算mean shift向量,将窗口中心移至邻域的像素的位置,直到mean shift向量小于某一阈值时停止;

5)通过聚类,合并小于某一阈值的区域,进行分割。

4 实验结果

为验证算法的有效性,选取了人工合成图像和自然图像进行实验。人工合成图像的分割结果如图1所示。选取的人工合成图像包含有灰度值及形状不同的区域。可以看出,笔者所采用的方法能够准确分割出不同灰度层次的区域。

自然图像的分割如图2所示,原始图像采用了Tsukuba立体视频序列对。图2a和图2b为原始的左图像和右图像,图2c为求得的视差图,图2d为使用改进的mean shift算法分割的视差图,图2e和图2g为灯和雕塑对象区域的二值掩模图像,图2f为对象灯的分割结果,图2h为对象雕塑的分割结果。通过实验结果可知,对图像中前景的两个对象可以取得很好的分割效果,分割对象的边缘比较平滑准确。

5 结论

笔者提出了一种利用改进的mean shift算法分割视差图的立体视频对象提取方法。首先利用自适应权值的视差估计方法得到立体视频对象的视差图,然后使用改进的mean shift算法对获得的视差图进行分割,实验结果表明这种方法可以准确的提取视频中具有语义信息的对象。进一步的工作可以结合对象的运动信息,修正单独依赖深度信息进行分割的不足,以普遍适应对各种场景立体视频序列对象的分割。

摘要:提出了一种结合深度信息与改进的均值漂移算法相结合的立体视频对象分割方法。首先采用自适应权值的视差估计方法,获得可靠的视差图,然后利用改进的均值漂移算法对视差图进行分割,获取视频对象。实验结果表明,该方法可以获得与语义一致的对象分割。

关键词:立体视频,对象分割,视差估计,均值漂移

参考文献

[1]朱仲杰,郁梅,蒋刚毅.用于立体视频会议系统的立体对象分割和跟踪算法[J].计算机辅助设计与图形学报,2004,16(3):16-20.

[2]DOULAMIS A D,DOULAMIS N D,NTALIANIS K S,et al.Unsupervised semantic object segmentation of stereoscopic video sequences[C]//Proc.IEEE International Conference on Intelligence,Information andSystems.Washington D.C.:IEEE Press,1999:527-533.

[3]袁惇,吕朝辉.立体视频对象分割综述[J].电视技术,2006,30(S1):123-124.

[4]吕朝辉,袁惇.一种基于自适应权值的立体匹配方法[J].光学技术,2007,33(4):501-504.

基于对象 篇10

概念建模时,主动面向对象数据库与面向对象数据库不同的是:它除了要建模对象的结构和被动行为以外,还要建模对象的主动行为[1]。因此,要完整地建模主动面向对象数据库,就需要这样一种三维的概念建模机制:基于对象结构/主动行为/被动行为的三维建模机制。

UML是面向对象建模领域事实上的工业标准,它的主要内容可归纳为静态建模机制和动态建模机制两大类[2]。从应用角度来看,静态建模机制主要确定类之间的静态结构关系,构建系统的静态结构模型;而动态建模机制主要确定类(对象)的操作/方法,构建系统动态模型[3]。由上述内容可见,UML是一种二维建模机制:基于对象结构/对象行为的二维建模机制,它将主动行为和被动行为都作为同样的对象行为来建模,这显然不能完整地反映主动面向对象数据库的三维概念模式:对象结构、主动行为和被动行为。

为了解决这个问题,本文提出使用主动对象/行为图这一建模工具来拓展UML,借以形成基于对象结构/主动行为/被动行为的这样一种三维建模机制,从而能以完整的概念建模主动面向对象数据库。

主动对象/行为图包括对象型图(包括辅助的查询图)、行为图和事态/活化图,数据库模式的对象结构可以使用对象型图来建模;被动行为可以使用行为图来建模;而主动行为可以使用事态/活化图来建模[4,5]。这样,主动面向对象数据库的三维模式就可以得到全面有效的描述了。

下文将首先分析主动面向对象数据库三维建模需求的必然性;然后分析基于主动对象/行为图的主动面向对象数据库三维概念建模机制的基本思想;最后以这种三维机制在通信计费系统概念建模中的应用为背景展开分析这一基于主动对象/行为图的主动面向对象数据库概念建模的三维机制。

1主动面向对象数据库的三维建模需求

1.1主动对象模型的三维特征

在一般的面向对象数据库中,对象完全是被动的,所以用这种方法实现的数据库一定也是被动的,基本上是传什么消息做什么操作,对象本身丝毫没有主动行为的功能。而主动面向对象数据库采用了一种“主动对象”的概念,进而提出一个面向主动对象的数据库模型。

一个主动对象模型可以简化为一个三元组:AO={O, M, ECA}。其中:

(1) O是对象元素的集合,每个对象元素又可以是由更简单的对象元素构成的复杂对象。

(2) M是一个可施行于O上的方法的集合。

(3) ECA是主动数据库中附属于对象AO的一组“事件-条件-行为”规则的集合,简称为对象的ECA规则集合,它是主动行为最常见的形式描述[1]。

由上述定义可见,主动对象对于特定事件的发生都有可能激活一个规则组,从而主动执行一些预先设置的行为。这也就是说上述定义的主动对象具有某种主动性,它区别于传统意义上的对象,除了具有对象结构、被动行为等特征外,还具有主动行为的特征,是一种具有三维特征的对象。因此,主动对象模型是一种三维模型:对象结构/被动行为/主动行为。

1.2主动面向对象数据库三维建模的必要性

主动面向对象数据库是基于主动对象的,因此与传统数据库系统不同的是主动面向对象数据库系统描述论域对象的下述三方面:对象结构、被动行为和主动行为。其中被动行为描述了由消息激活的对象方法,而主动行为描述对象自动执行特定操作的特性,这种特定操作的执行以预定义事态的发生为条件。相应的,主动面向对象数据库概念建模除了要考虑对象结构和被动行为外还要考虑主动行为。

2基于主动对象/行为图三维建模机制的研究

尽管UML是面向对象建模领域事实上的工业标准,然而UML并没有建模主动面向对象数据库主动行为的专有机制,如果使用UML建模主动面向对象数据库,它只能将主动行为和被动行为都作为普通操作、方法来建模,显然不能全面有效地反映主动面向对象数据库的三维模式[2,3]。

解决这个问题,可以借鉴主动对象/行为图的建模思想,使用主动对象/行为图建模思想来拓展UML,以便能建模主动面向对象数据库的三维模式。主动对象/行为图用事态/活化图拓展了传统的对象/行为图。事态/活化图用来对主动行为建模,它包括事态图和活化图,其中活化图用来对事务规则建模,而事态图用来对触发事务规则的事态进行描述[5]。

图1描述了基于主动对象/行为图的这样一种三维概念建模机制。由图可知,数据库模式的对象结构、被动行为和主动行为可分别由主动对象/行为图的三个不同的部分来描述,它们分别是对象型图(包括辅助的查询图)、行为图和事态/活化图。

2.1使用对象型图建模对象结构

对象型图引自传统的对象/行为图,它用于描述数据库的对象结构,说明了对象型实例的有关性质。为了更好地描述对象的结构,除了对象型图以外,还可以用查询图说明对象的复合性质的导出表达式[4]。

2.2使用行为图建模被动行为

行为图也引自传统的对象/行为图。它通过状态和活动描述对象型实例的被动行为。行为图包括生命周期图、活动说明图和活动实现图。生命周期图描述了对象型的状态、活动以及状态和活动间的连接弧,此图可以确定对象的更新操作及其可能的执行顺序。活动说明图和活动实现图是用来描述对象型的生命周期图中定义的活动的,当然也可以描述用户定义的复合活动。活动说明图说明活动的形式输入输出参数。活动实现图说明了活动的实现。另外,还可以说明活动的前置和后置条件[4]。

2.3使用事态/活化图建模主动行为

事态/活化图用来对数据库的事务规则即主动行为建模,它包括事态图和活化图。事态图,是一种高级说明性语言,用来描述数据库概念设计中的事态。事态是用来抽象事件和时间间隔的这样一个更一般的术语。活化图用来描述ECA型的事务规则,其说明的规则可以由事态图说明的事态触发。活化图和事态图一起被称为事态/活化图,它可以完成在概念级对事务规则建模的需求[5]。

篇幅原因,关于对象型图及其辅助的查询图、行为图、事态图和活化图本文就不展开介绍了,有兴趣的读者可以查阅文献[4]和文献[5]。

3基于主动对象/行为图三维建模机制的应用

在对通信计费系统数据库进行概念建模时,开发组应用了基于主动对象/行为图的主动面向对象数据库三维建模机制,取得了良好的效果。下文以账单对象bill为例说明基于主动对象/行为图的这种三维建模机制。

账单是通信计费数据库系统的核心对象之一。账单对象首先要利用话单对象传来的数据进行合账即费用累计,其次账单对象还要执行客户交费后的冲账任务,另外账单对象还要进行客户的信用检查,当发现客户存在信用问题时就要通知催款单对象对客户进行催款、停机、复机和销户等工作。

由上述分析可见,账单对象bill是一个典型的主动对象,它的概念建模具有明显的三维特征。下文基于主动对象/行为图简要建模数据库对象bill的三维模式,其中被动行为和主动行为给出了建模图。

3.1对象BILL静态结构的建模

账单对象bill通过billsID、tallyPeriod、creditOK、currentFee定义了账单对象的属性账单识别号、记账周期、信用状况、当前费用;通过payingFee、customers、cdrs、debts分别描述了账单对象与交费对象、客户对象、话单对象、催款单对象之间的引用联系;通过wd描述了BILL对事态型DAY的引用;通过P_Fee_Event、M_Fee_event、S_events表示了BILL拥有的三个局域型事态类。篇幅原因,没有给出相关的对象型图BILL。

3.2对象BILL被动行为的建模

对象bill被动行为的建模应该从生命周期、活动说明以及活动实现这三个方面来进行,篇幅原因,文中只是给出了被动行为合帐的活动说明图,其他就不赘述了。

图2是对象型BILL的被动行为plusFee的建模图,被动行为plusFee遵循活动说明图的建模规范,被动行为plusFee被建模为一个活动plusFee。活动plusFee有两个端口IDcurrentFee和IDnewFee。其中端口IDcurrentFee是活动plusFee的主端口,它既是输入端口又是返回端口,该端口既要提供活动plusFee执行之前的值,还要返回活动执行以后的值,返回的特定客户的当前话费值仍然要驻留在状态atWork之中;端口IDnewFee是一个输入端口,它要求对象CDR在活动执行前要处于状态delivery,并且指派到输入端口的特定客户的新话费信息值在活动执行前一定要驻留在前置状态delivery中,但在活动执行后不能再驻留在那里。

3.3对象BILL主动行为的建模

对象BILL的主动行为有合账时信用报告、冲账时信用报告以及信用设置等,篇幅原因下面只是以合账时信用报告这个主动行为为例介绍主动行为的建模。

账单对象合账的行为是被动的,而合账时信用报告这一行为是主动的。当客户的欠费额超过指定阀值时,主动行为合账时信用报告就会主动激活,它会将该客户欠费信息通知相应的催款单对象。主动行为合账时信用报告通过下述的ECA规则plusReport来建模。

合账时信用报告(plusReport)如图3所示。图3所示的规则plusReport定义在事件类P_Fee_events之上。该事件类是预定义的,其成员型是BILL_ACTIVITY_PLUSFEE,触发事件以e命名。每当执行活动plusFee时,系统自动产生事件P_Fee_event,它导致规则plusReport的考虑和执行。由于此事件类是预定义的,因此无须由事态图导出。

在每一时间子变化后,如果账单的局部事件类P_Fee_events的引用事件的发生时间是当前时间子,规则plusReport就会考虑该账单。如果账单所示的客户当前欠费self.currentFee超过了指定阀值maximalFee,规则将被立即执行活动plusCreditReport。

倘若执行规则plusReport所为的对象bill没处于状态atWork中,那么例外事件被激活,并被插装到类plusReport_ObjectNotEnabledDuringConsid之中,该类局域于对象bill。

plusCreditReport是一个复合活动,它根据账单的当前信用状况值向不同的对象报告客户欠费信息:如果该账单的信用状况creditOK为yes,那么账单对象就将客户欠费信息idDateFee向根对象报告;若客户的信用状况creditOK为no,那么账单对象就将IDdateFee通知相应的催款单对象debt。篇幅原因,将该活动简化为一基本活动。

4结语

基于主动对象/行为图建模主动面向对象数据库的三维建模机制,在通信计费系统的开发过程中得到了较为广泛的应用,取得了良好的效果,但也发现了一些问题尚待解决,例如:

(1) 基于主动对象/行为图建模主动面向对象数据库的三维建模机制的内涵和外延还需要进一步研究。

(2) 主动对象/行为图与UML在某种形式上的融合是下一步要展开研究的主要工作。

参考文献

[1]李庆忠.主动面向对象数据库的主动机制研究及应用[M].北京:中国科学院计算技术研究所,2000.

[2]James Rumbaugh,Ivar Jacobson,Grady Booch.UML参考手册[M].北京:机械工业出版社,2001.

[3]方红萍,陈和平.信息系统UML建模研究[J].计算机工程与设计,2006,27(19):3613-3615.

[4]Kappel G,Schrefl M.Object-Behavior Diagrams.[C]//Proceedingsof the 7th International Conference on Data Engineering,Kobe,Japan,1991:530-539.

上一篇:动物检疫监管下一篇:全日制研究生