Unlink操作 :: 沉思者

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=455048 存档链接: https://web.archive.org/web/20041208150644id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=455048


沉思者 我思故我在 <<<关联类上的操作 | 主页 | 也谈对象的生命>>> Unlink操作 2004-10-22 unlink操作是link操作的反过程,它用来断开对象之间,对象与类之间建立起来的连接. unlink操作的语法为: 1. unrelate from [ across ] 2. unrelate [ across ] 3. unrelate from o 对象之间 如果想断开两个对象之间的连接,则使用第一种语法. 它要求指定连接的双方.比如: |-------| R1 |-------| | A |--------| B | |-------|1 *|-------| select one a from b->A[R1]; // unrelate a from b across R1; unrelate a from b; 如果两者之一或全部都存在着指定关联上的连接,但两者之间并不存在指定关联上的连接,在进行unlink操作时就会出错. 但如果两者均不存在指定关联上的连接,则对其进行unlink操作则是一种正常行为.比如: create object instance a0 of A; create object instance b0 of B; relate a0 to b0; create object instance a1 of A; create object instance b1 of B; relate a1 to b1; create object instance a2 of A; create object instance b2 of B; unrelate a0 from b1; // Error!! unrelate a1 from b2; // Error!! unrelate a2 from b2; // OK!!! o 整体断开 如果想断开一个对象在某个关联上的所有连接,则使用第二种语法,比如: create object instance a0 of A; create object instance b0 of B; create object instance b1 of B; relate a0 to b0; relate a0 to b1; // unrelate a0 across R1; unrelate a0; // the links between a0 and b0, a0 and b1 // are all unlinked. 需要注意的是,按照这种方式进行unlink操作时, 连接另外一端的对象可能从此不再满足multiplicity的约束.比如: relate a0 to b0; unrelate a0; // the links between a0 and b0, a0 and b1 // are all unlinked. select one a from b0->A[R1]; // failed!!! because there // isn't instance of A across // association R1 of b0, while // its multiplicity is 1. 并且,在unlink操作执行之后,你没有途径可以获取到连接另外一端的对象/对象集合.如果你想得到它/它们,必须在unlink操作之前进行. 比如: select many Bs related by a0->B[R1]; // Now you get all instances // which related to a0 across // association R1. unrelate a0; create object instance a1 of A; relate a1 to Bs across R1; 达到相同目的的更简洁的手段是使用replace,比如: create object instance a1 of A; replace a0 with a1 across R1; o 静态关联 如果两个类之间的关联是一个静态关联,在执行unlink操作时,使用第3种语法. |-------| R1 *|-------| | A |---------->| B | |-------|

bars
create object instance
b0
of
B;
relate
b0
to
A;
unrelate
b0
from
A;
darwin_yuan
发表于
2004-10-22 17:56
引用Trackback(0)
编辑
Comments
发表评论
最近更新
Delegate Class
Package vs. Namespace
Function Signature:新思维
Visibility: 两种观点
Java在Interface方面的缺陷
也谈对象的生命
Unlink操作
关联类上的操作
Link操作(三)
Link操作(二)