BUxHBBL{};//高16位行数x,低16位行开始相对地址;块号在对象头表。
元素或属性或说是变量的声明:BUxW
BUxW声明了变量的数据内容包含x个字,或说是2x个字符串。BUx 声明了包含x个位,BUxK 声明了包含x K个位,BUxM 声明了包含x M(百万)个位。在APO中,位容器的声明通常以行(256位)为单位的;因为APO包含有256位为单位的位处理器。
对象属性表的存储布局:
BU19H表1{ // 19行的表变量。(高16位为行数x,低16位为行开始地址)
DYV
// 行开始地址是第0行;行的字地址0;引用变量最小占一行,一行8个引用。
// 行开始地址是第1行,行字地址为0,长度99,占行数13行,最后行空5W。
// D变量行开始地址是第14行;行的字地址为0,长度32W,占行数4行。
引用变量内容定义:高16位是动态变量所占行数,低16位为对象号。动态对象序号在对象号区,0xC000- 0xFFFF。8K
表内的变量可看作全是1W的数组,对于静态表来说;要实现不同宽度数组就要定义表内表了。而动态数组就靠程序员了;当然,对于动态数组;编译器还是会多编译一条传送数组的16位宽度的成员项数和成员位宽度到CPU的寄存器B的指令的。
编译器翻译原则:
1)、先编排4W的变量在一起,其次是2W的变量;因它们可能是数值,也易于对齐。动态变量的所有引用变量(1W一个)放在一起成字数组,放于表头,最少占1行(8个)。
2)、多于4W的变量地址都是以行地址开始。
3)、最后是在有空洞的行插入1W/2W/3W的变量地址。
表内变量对应的地址值定义:
BU32 BL;
// T标志为1是变量的内容长度小于1行; Bit29?24的6位为长度及行的字开始地址。Bit30为1为引用变量,Bit29?27:111数组、110向量;100为对象引用等。Bit26?24的3位为行的字开始地址。变量类型属性字节Bit23?16用于特殊对象。
编译器翻译后的变量地址:不到一行的(8位,8位,16位)一组,保留字节为0,超过一行的(16位,16位)一组。
E = (10 100000,0,18);F= (10 010 100,0,18);
G = (11XXX 000,0,0);B = (99,1);D = (32,14);
A = (10 001100,0,13);C = (10 001110,0,13);
一个表必须完全被包在一个数据块里,一个数据块是64KH。我们可以在表内或代码块内声明一个动态变量为一个数据块,甚至连续数据块变量;而在表内引用该变量。但最长的字符串只有1M个字符,占一个数据块。一个数据块可以装多个表;或许有空洞。我认为内存合理分配,也应该需要程序员参与。字符串,数组,代码段在表内只是一个内容不超过32KW的变量。变量、对象的名字等可以用汉语双拼简写或英文简写或直接中文也行,APO编译器支持U编码的。
方法(method)表声明:
BUNH 方法表名字{//变量地址(方法表的16位行数,方法表的16位起始行地址)
BUxW 方法1; // 方法1变量地址(0,15位方法的指令长度x,方法的起始行地址)
….
}
方法表中的方法是一个接着一个的以行为单位紧密存放的。调用方式是:
类名(或对象名字).方法名字;
二、面向对象编程
我们可以这样说:万物皆对象,在程序里一切皆变量(对象、方法、属性、表)。
面向过程的思想:由过程、步骤、函数组成,以过程为核心;面向过程是先有算法,后有数据结构。
面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。面向对象是先有数据结构,然后再有算法。
我们知道同一个类的对象可以有很多个,对应的对象属性表也有很多;但只有一个方法表。具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。一个程序是由很多不同或相同种类的对象组成,以进程的形式在内存中运行时还可能动态增减一些新的对象。进程的执行体是线程对象,也就是说对象或方法的运行必须是通过线程对象来进行。在APO中可以有最少一个线程对象(主线程),最大32K个线程对象。其它活动对象最多也只是32K个;所以在APO中,一个进程最多有64K个打开的对象。但这并不包含打开的文件对象,一个进程打开的文件对象数最大可达64K个;是另外的文件对象管理员管理的。其实,在一个进程里;通常有4个管理员:文件对象管理员、线程对象管理员、普通对象管理员、内存管理员。管理员是通用的,系统内含的,每一个程序都要继承它们。我会以编写新型的APO操作系统为例,来说明面向对象编程的方式、过程。
1、面向对象的特征:
(1)
(2)分类性
任何类的划分都是主观的,但必须与具体的应用有关。
(3)继承性
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。