このようなものを想像してください:
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 }
この場合、テストはインターフェイスに適用されるため、「サポート」の概念は二次的ですが関連性があります(したがって、言語は、すべての実装が合格する必要があるインターフェイステストと、実装プライベートに固有の実装テストを区別します。
しかし、ここで伝えたい重要なアイデアは、アクセス制御のセマンティクスです。「accessfrom」キーワードを持つA.sumは、メソッドB.calculatorからのみ呼び出すことができることに注意してください。それ以外のものは、コンパイル時エラーとして検出されます。ここでの考え方は、よりきめ細かい方法でアーキテクチャの制約を適用することです。「accessfrom」を追加しなかった場合、または「access from *」を追加しただけの場合は、メソッドをどこからでも呼び出せるようにするデフォルトの動作を意味します。どのようなアーキテクチャ上の制約がありますか?レイヤードデザインを行うときに手動で適用される種類:レイヤーA(最低レベル)はレイヤーB(中間レベル)から使用され、レイヤーB(中間レベル)はレイヤーC(高レベル)から使用されます。ただし、レイヤーBはレイヤーAからアクセスできず、レイヤーCはAとBのどちらからもアクセスできません。
質問:上記のセマンティクスをサポートする言語(ソース間中間言語を含む)を知っていますか?この種のセマンティクスが逆効果であるか、危険であるか、または単に悪い設計を助長するかどうかを議論するための追加のポイント
更新:この種の制限には、もう1つの非常に重要なユースケースがあります。
イベント駆動型プログラミング:通常、イベントの問題は、イベントの実行が多すぎる傾向があり、イベントの依存関係のチェーンを理解するのが難しい場合があることです。
したがって、たとえば、イベントハンドラーには、対話できる表示可能なクラスの特定のセット(または、逆に、触れることができないオブジェクトの特定のセット)のみがあると定義できます。