分别定义变量、域、对象(用下标标识是在第几行创建的对象),实例域和指针(变量和实例对象的并),以及指向关系。× 表示笛卡尔积。

屏幕截图 2022-08-02 103836.png

pt(p) 代表的是指针 p 可能指向的对象(p 的指针集),如下示例,pt(p) 可能指向的目标可以记为 o2,o4(以行号作为 object 的下标)。

if(...){
    x = new A();
} else {
    x = new B();
}

spaces_-MJC1RRYQ991XoNX219t_uploads_git-blob-bfeee204b526b327ddd479a4bd1abc02543748aa_image-20201105195524932.png

看到 new 语句,将新建对象加入 pt(x) ,此时 x 可能还指向其它对象。

spaces_-MJC1RRYQ991XoNX219t_uploads_git-blob-ce9b2ed7a873b4cd55c06b75ad60b7ca0623b317_image-20201105195943007.png

看到 assign 语句,将 y 指向的对象加入 x 的指针集中,或者说,使 x 指向 y 指向的对象。

spaces_-MJC1RRYQ991XoNX219t_uploads_git-blob-e39e1d2b4d91acce3051d8240e05e72b29c8a8d4_image-20201105235312349.png

同理。

spaces_-MJC1RRYQ991XoNX219t_uploads_git-blob-ae81be77453d5b57609c1ee4fdd546ddf22c6646_image-20201105200112512.png