想象这样的事情:
import class B.*;
interface A supports A.testSum
{
int sum( int a , int b ) access from B.calculator;
testSum() { Assert(sum(1,1)==2); }
........
class B ...
{
void calculator() { A.sum(3,5); //ok }
void someOtherMethod() { A.sum(0,3); //compile error }
“支持”的想法是次要的但相关的,因为在这种情况下测试适用于接口(因此语言将区分所有实现必须通过的接口测试和特定于实现私有的实现测试
但我想在这里传达的重要思想是访问控制语义;请注意,带有“access from”关键字的 A.sum 只能从方法 B.calculator 中调用。其他任何东西都被检测为编译时错误。这里的想法是以更细化的方式实施架构约束。如果您没有添加“访问自”或仅添加“访问自 *”,则意味着允许从任何地方调用该方法的默认行为。什么样的架构约束?好吧,在进行分层设计时手动执行的那种:A层(最低层)从B层(中间层)使用,而B层又从C层(高层)使用。但是 A 层无法访问 B 层,A 或 B 都无法访问 C 层,
问题:你知道支持上述语义的任何语言(包括源到源中间语言)吗?讨论这种语义是否会适得其反、危险或只是鼓励不良设计的额外要点
更新:这种限制还有另一个非常重要的用例:
事件驱动编程:通常事件的问题是事件往往做的太多,理解事件的依赖链可能会变得很棘手
因此,例如,可以定义事件处理程序只有一组可以交互的可见类(或者相反,它不能接触的一组对象)