- ·上一篇文章:批处理再现九九乘法表
- ·下一篇文章:下载SAV的病毒库的批处理
- ·百度中搜索更多的关于“面向对象的批处理语言(Object Oriented Batch Language)”相关内容
- ·谷歌中搜索更多的关于“面向对象的批处理语言(Object Oriented Batch Language)”相关内容
- ******申明******
- 本站文章内容有部分为收录网络中其他网友内容,DOS资源站不保证所有的代码都适合你使用。
- 由于编辑匆忙,有可能造成某些脚本文件出现丢失代码或代码无法运行的情况,请网友根据情况自行修改。
- 如果能将出错部分反馈给我,那就更好了。
面向对象的批处理语言(Object Oriented Batch Language)
面向对象的批处理语言(Object Oriented Batch Language)
本文文本、代码和思想源自以下文献:
《BATCH PROGRAMMING ELEMENTS》(Dirk van Deun)
Chap 9:“Object Oriented Batch Language”
!特别鸣谢 Dirk van Deun 做出的贡献!
两年前便见到了这篇文献,只是一直没有给与足够的关注,前几天突然翻出来,才
发觉其中潜藏的价值。其中“面向对象”的实现对批处理的编程思想做出了重要突破,
其以文件结构模拟数据结构的思想也对我有很大的启迪。
程序利用文件目录来模拟类库和对象库,以文件来模拟类所拥有的属性和方法,以
批处理来模拟对象的引用,从而实现了OOP 的四大结构:类、对象、属性和方法,也因
此实现了OOP 的继承和覆盖特性。
将程序彻底研究之后,我决定做出一些修改:
首先,将所有代码改用内部命令编写,最大限度地解决代码跨平台的可移植性。目
前进行和通过了 MSDOS6.22/7.10 和 WindowsXP命令行下的局部测试,我的设计目标是
能在 MSDOS/ Win9x / WinNT's 全系列平台下正常运行。
其次,将对象的定义方式和调用方式做出更改;即直接用类名定义对象,用对象名
引用属性和方法,使之更符合OOP 的代码书写习惯。
再次,改进了批处理中使用 OOBL 的方案;原程序虽然名为 OOBL ,但实际上它只
能工作于命令行,而无法将全部代码写入批处理中。
第四,增加了属性和方法的访问属性 public/private ,数据封装成为可能。
最后,将调用对象方法前的变量载入和调用后的变量保存策略做出较大修改。这个
修改是不得不然的,否则使用 Dirk 原本的 push/pop 方案,将会引入 edlin.exe这个
外部程序;但是这个新策略也带来了很多问题,对象的数据与类的数据明显重复,造成
了数据冗余和空间占用的问题日益突出。
目前为止,这是一个半成品,它仍然存在着相当大的缺陷。比如,为了结构的清晰
而未加入错误处理机制,至于设计中的对象的构造函数和方法的多态调用也还没有成熟
的方案。
但是,我现在的状态很糟糕,花了整整两个星期,进展却十分缓慢。所以,只得将
未成熟的代码放出,对此有兴趣的业内人士,可以研究看看,希望有人可以继续我未竟
的工作。
下面是 OOBL 的命令行范例:
E:\Batch\Test\OOBL>project work
"work":class man
"work":proprt Name
"work":proprt FullName private
"work":method setName
set name=%1
set fullname=%2 %3
^Z
"work":method putName
echo Name:%name%; FullName:%fullname%
^Z
"work":class employee man
"work":proprt salary private
"work":method setSal
set salary=%1
^Z
"work":method putSal
echo Name:%name%; FullName:%fullname%; Salary:%salary%;
^Z
"work":man John
"work":John name=John
"work":man fred
"work":fred name=Fred
"work":fred setName Fred Fred Ford
"work":john putName
Name:John; FullName:
"work":fred putName
Name:Fred; FullName:Fred Ford
"work":employee bill
"work":bill name=Bill
"work":bill setSal $100000
"work":bill putSal
Name:Bill; FullName:; Salary:$100000;
"work":project :end
Project is end!
E:\Batch\Test\OOB>

